Le mappage entre deux ensembles de résultats est facile à calculer, car les informations que vous obtenez dans un test peuvent être représentées comme un ensemble de trois tuples: le premier composant est un point (multidimensionnel), le second est une étiquette de cluster (arbitraire) fourni par votre algorithme, et le troisième est une étiquette de cluster (arbitraire) fournie par un algorithme de référence. Construire le par kkktableau de classification des paires d'étiquettes: si les résultats concordent, ce sera un multiple d'une matrice de permutation. Autrement dit, chaque ligne et chaque colonne doivent avoir exactement une cellule non nulle. C'est une simple vérification à programmer. Il est également simple de suivre de petites déviations de cet idéal vers des points de données individuels afin que vous puissiez voir précisément comment les deux réponses diffèrent si elles diffèrent. Je ne prendrais pas la peine de calculer des mesures statistiques de l'accord: soit il y a accord parfait (jusqu'à la permutation), soit il n'y en a pas, et dans ce dernier cas, vous devez rechercher tous les points de désaccord pour comprendre comment ils se produisent. Les résultats sont d'accord ou non; tout désaccord, même en un seul point, doit être vérifié.
Vous pouvez utiliser plusieurs types d'ensembles de données pour les tests: (1) ensembles de données publiés avec résultats k-means publiés; (2) des ensembles de données synthétiques avec des clusters forts évidents; (3) ensembles de données synthétiques sans regroupement évident. (1) est une bonne discipline à utiliser lorsque vous écrivez un programme de mathématiques ou de statistiques. (2) est facile à faire à bien des égards, par exemple en générant des points aléatoires pour servir de centres de grappes, puis en générant des nuages de points en déplaçant aléatoirement les centres de grappes en quantités relativement faibles. (3) fournit des vérifications aléatoires qui peuvent révéler des comportements inattendus; encore une fois, c'est une bonne discipline générale de test.
En outre, envisagez de créer des ensembles de données qui mettent l'accent sur l'algorithme en se situant juste aux limites entre les solutions extrêmes. Cela nécessitera de la créativité et une compréhension approfondie de votre algorithme (ce que vous avez probablement!). Un exemple que je voudrais vérifier dans tous les cas serait des ensembles de vecteurs de la forme où v est un vecteur sans composante nulle et i prend des valeurs intégrales séquentielles 0 , 1 , 2 , … , n - 1 . Je voudrais également vérifier l'algorithme sur des ensembles de vecteurs qui forment des polygones équilatéraux. Dans les deux cas, les cas où n n'est pasje vvje0 , 1 , 2 , … , n - 1nun multiple de est particulièrement intéressant, y compris lorsque n est inférieur à k . Ce qui est commun à ces situations, c'est que (a) elles utilisent toutes les dimensions du problème, mais (b) les solutions correctes sont géométriquement évidentes, et (c) il existe plusieurs solutions correctes.knk
ré≥ 2uv2 jXzXz
w = z - ( z ⋅ x ) x .
ywXyXyréncos( 2 πk / n ) x + sin( 2 πk / n ) yk0n - 1