Dans le premier résultat, on lit :
Class attribute: play Classes to Clusters: 0 1 2 <-- assigned to cluster 1 3 5 | yes 1 3 1 | no Cluster 0 <-- No class Cluster 1 <-- no Cluster 2 <-- yes
Or, les clusters portent des labels “yes”, “no”, et “No class”. Le cluster #1 contient 3 des 5 “no”, le cluster #0 contient 5 des 9 “yes” : ces clusters contienent des majorités des instances de ces deux classes et se voient attribués leur noms.
| N | S | Incorrect | Remarques |
|---|---|---|---|
| 3 | 20 | 6 | ⇐ best |
| 1 | 9 | le cluster “no” ne contient plus que 40% des “no” | |
| 3 | 8 | il y a plus de “no” (3) dans le cluster “yes” que dans le cluster “no”! | |
| 5 | 8 | les “no” sont mieux cernés, mais les “yes” pas du tout. | |
| 8 | 7 | ||
| 13 | 6 | ⇐ best | |
| 34 | 9 | ||
| Meilleur résultat pour N=3 est 6 avec S=13 ou S=20 | |||
| 2 | 3 | 7 | |
| 5 | 6 | ||
| 8 | 5 | ⇐ best | |
| 13 | 6 | ||
| 21 | 5 | ⇐ best | |
| 18 | 7 | ||
| Meilleur résultat pour N=2 est 5 avec S=8 ou S=21. | |||
| ⇒ | Les meilleurs seeds pour N=2 et N=3 ne sont pas les mêmes! | ||
| 4 | 20 | 8 | Le clusters 1 et 2 devraient porter le label “yes” tous deux, mais ce n'est attribué qu'une fois. |
| 6 | 20 | 9 | La grande majorité des “yes” sont dans des cluster “No class.” |
| 8 | 20 | 10 | Les clusters semblent de plus en plus aléatoires. |
Visualisation. Il est noté dans l'énoncé que “représentées par une croix si la classe existante coincide avec la classe représentée par le cluster et par un carré dans le cas contraire;” ça devrait figurer dans une légende de la visualisation. Il serait (je trouve) plus lisible si les points des premières et dernières valeurs des attributs étaient affichés non pas sur les bord mais avec une marge en haut et en bas.
Tous les attributs semblent bien répartis dans le jeu de données. D'ailleurs, on a pu voir ça dans preprocess. Le seul attribut qui n'est pas présent dans “yes” et “no” est “outlook:overcast”, mais “humidity” semble assez clivant aussi: plutôt “no” avec humidity élevé. Il manque des instances de rainy outlook avec temperature vraiment élevée.
Il serait utile de pouvoir defiler les crossplot des valeurs de paires d'attributs automatiquement et ne pas avoir à les choisir paire par paire. Et peut être avoir la possibilité de faire des combinaisons d'attributs pour voir des projections plus sophistiquées.
Paramètres pour Cobweb : on ne fixe plus le nombre de clusters, mais on choisit “cutoff” et “acuity”.
La structure hiérarchique formée: pas très lisible, à prime abord. Et 12 instances incorrectement classées avec 23 clusters pour ce premier résultat!
Varions les paramètres pour chercher mieux :
| C | S | Nombre incorrect | Nombre de clusters | Remarques |
|---|---|---|---|---|
| 0.1 | 42 | 12 | 23 | |
| 0.2 | 42 | 9 | 15 | |
| 0.3 | 42 | 5 | 1 (=yes) | Plus qu'un cluster, tous les “no” sont donc mal classés. |
| 0.23 | 42 | 8 | 4 | 40% des “no” mal classés, mais 67% des “yes” mal classés! |
| 0.235 | 42 | 5 | 2 | Bien! |
| 0.234 | 42 | 8 | 4 | Cutoff trop faible, on ne peut pas (beaucoup) baisser de 0.235. |
| 0.236 | 42 | 5 | 2 | |
| 0.237 | 42 | 5 | 2 | |
| 0.238 | 42 | 5 | 2 | |
| 0.239 | 42 | 5 | 2 | |
| 0.25 | 42 | 5 | 1 | trop grand |
| 0.24 | 42 | 5 | 2 | |
| 0.245 | 42 | 5 | 2 | |
| 0.247 | 42 | 5 | 1 | |
| 0.246 | 42 | 5 | 2 | Limite supérieur (approchée) |
| 0.235 | 21 | 5 | 1 | Plus qu'un cluster, tous les “no” sont donc mal classés. |
Donc, pour S=42, le meilleur intervalle semble être de 0.235 à 0.246. Mais pour S=21, ce n'est plus vrai.
Dessiner la structure hiérarchique de clusters.
| Instance | Outlook | Temp | Hum. | Windy | Play | |
|---|---|---|---|---|---|---|
| cluster1 | 2.0 | overcast | 83.0 | 86.0 | FALSE | yes |
| 12.0 | overcast | 81.0 | 75.0 | FALSE | yes | |
| 3.0 | rainy | 70.0 | 96.0 | FALSE | yes | |
| 4.0 | rainy | 68.0 | 80.0 | FALSE | yes | |
| 9.0 | rainy | 75.0 | 80.0 | FALSE | yes | |
| 8.0 | sunny | 69.0 | 70.0 | FALSE | yes | |
| 0.0 | sunny | 85.0 | 85.0 | FALSE | no | |
| 7.0 | sunny | 72.0 | 95.0 | FALSE | no | |
| cluster2 | 1.0 | sunny | 80.0 | 90.0 | TRUE | no |
| 5.0 | rainy | 65.0 | 70.0 | TRUE | no | |
| 13.0 | rainy | 71.0 | 91.0 | TRUE | no | |
| 11.0 | overcast | 72.0 | 90.0 | TRUE | yes | |
| 6.0 | overcast | 64.0 | 65.0 | TRUE | yes | |
| 10.0 | sunny | 75.0 | 70.0 | TRUE | yes |
On dirait que “Windy” est le seul critère clivant dans ce modèle. En tenant compte de “outlook:overcast”, deux des trois “yes” mal classés en cluster2 pouvait être repêchés. La “faute” des deux “no” en cluster1 est moins évidente.
Personnellement, je préfère voir la hiérarchie sous cette forme (tableau).
Exercices sur Cobweb avec iris.arff
Variations d'“acuity” sur un petit jeu (3*5 instances).
| S | Cutoff | Acuity | Clusters | Erreurs | |
|---|---|---|---|---|---|
| 42 | 0.002 | 3.0 | 1 | 10 | |
| 42 | 0.002 | 2.0 | 1 | 10 | |
| 42 | 0.002 | 1.5 | 1 | 10 | |
| 42 | 0.002 | 1.0 | 2 | 5 | Mieux (enfin) : voyons avec encore plus petit |
| 42 | 0.002 | 0.5 | 6 | 5 | |
| 42 | 0.002 | 0.3 | 8 | 7 | Trop petit : le nombre d'erreurs augmente. Cherchons entre 0.5 et 1.0 |
| 42 | 0.002 | 0.7 | 2 | 5 | |
| 42 | 0.002 | 0.6 | 4 | 5 | Si on sait qu'il faut trois clusters, il faut chercher entre 0.6 et 0.7, mais faisons-nous du supervisé ou pas? |
| 42 | 0.002 | 0.55 | 4 | 6 | Remarque : plus d'erreurs que pour 0.5 ou 0.6. |
| 42 | 0.002 | 0.65 | 2 | 5 | |
| 42 | 0.002 | 0.63 | 3 | 4 | |
| 42 | 0.002 | 0.64 | 3 | 4 | |
| 42 | 0.002 | 0.62 | 3 | 4 | |
| 42 | 0.002 | 0.61 | 4 | 5 |
⇒ meilleurs résultats entre 0.62 et 0.64.
Que nous montre la visualisation? Déjà, au niveau de l'output text, on voit que il distingue bien les setosa, mais ne sépare pas bien les virginica et versicolor.
Après mélange des lignes du jeu de données, les résultats sont:
| Acuity | Clusters | Erreurs |
|---|---|---|
| 1.5 | 2 | 5 |
| 1.0 | 2 | 5 |
| 0.6 | 4 | 5 |
| 0.55 | 4 | 5 |
| 0.5 | 5 | 3 |
| 0.45 | 6 | 4 |
| 0.4 | 6 | 4 |
Comme l'énoncé suggère, la meilleur valeur pour acuity est un peu plus faible : 0.5, et ne fait que 3 erreurs, ce avec 5 clusters au lieu de 3.
Avant (cobweb1– triée par “class” ) :
1 2 4 <-- assigned to cluster 0 5 0 | Iris-setosa 4 0 1 | Iris-versicolor 5 0 0 | Iris-virginica
Après (cobweb2 –“class” désordonné) :
2 3 5 6 7 <-- assigned to cluster 0 0 4 0 1 | Iris-setosa 3 1 0 1 0 | Iris-versicolor 0 5 0 0 0 | Iris-virginica
Dans le premier cas, 4 versicolor ne sont pas distinguées des virginica. Dans le deuxième cas, cette distinction est mieux faite; d'ailleurs, si l'on fusionne C6 avec C2 et C7 avec C5, il ne reste qu'une mauvaise discrimination – un versicolor dans C3.