Die Zuordnung zwischen zwei Ergebnissätzen ist einfach zu berechnen, da die Informationen, die Sie in einem Test erhalten, als Satz von drei Tupeln dargestellt werden können: Die erste Komponente ist ein (mehrdimensionaler) Punkt, die zweite eine (beliebige) Clusterbezeichnung wird von Ihrem Algorithmus bereitgestellt, und die dritte ist eine (beliebige) Clusterbezeichnung, die von einem Referenzalgorithmus bereitgestellt wird. Konstruieren Sie das durchkkKlassifizierungstabelle für die Etikettenpaare: Wenn die Ergebnisse übereinstimmen, handelt es sich um ein Vielfaches einer Permutationsmatrix. Das heißt, jede Zeile und jede Spalte muss genau eine Zelle ungleich Null haben. Das ist eine einfache Prüfung zum Programmieren. Es ist auch einfach, kleine Abweichungen von diesem Ideal zurück zu einzelnen Datenpunkten zu verfolgen, sodass Sie genau sehen können, wie sich die beiden Antworten unterscheiden, wenn sie sich überhaupt unterscheiden. Ich würde mir nicht die Mühe machen, statistische Übereinstimmungsmaße zu berechnen: Entweder gibt es eine perfekte Übereinstimmung (bis zur Permutation) oder es gibt keine, und im letzteren Fall müssen Sie alle Punkte der Uneinigkeit aufspüren, um zu verstehen, wie sie auftreten. Die Ergebnisse stimmen entweder überein oder nicht. Jede Meinungsverschiedenheit, auch nur an einem Punkt, muss überprüft werden.
Möglicherweise möchten Sie verschiedene Arten von Datensätzen zum Testen verwenden: (1) veröffentlichte Datensätze mit veröffentlichten k-means-Ergebnissen; (2) synthetische Datensätze mit offensichtlich starken Clustern; (3) synthetische Datensätze ohne offensichtliche Clusterbildung. (1) ist eine gute Disziplin, wenn Sie ein Mathematik- oder Statistikprogramm schreiben . (2) ist in vielerlei Hinsicht einfach zu tun, beispielsweise indem einige zufällige Punkte erzeugt werden, die als Zentren von Clustern dienen, und dann Punktwolken erzeugt werden, indem die Clusterzentren relativ kleine Mengen zufällig verschoben werden. (3) bietet einige zufällige Überprüfungen, die möglicherweise unerwartete Verhaltensweisen aufdecken; Auch dies ist eine gute allgemeine Testdisziplin.
Darüber hinaus sollten Sie Datensätze erstellen, die den Algorithmus belasten, indem Sie nur an den Grenzen zwischen extremen Lösungen liegen. Dies erfordert Kreativität und ein tiefes Verständnis Ihres Algorithmus (den Sie vermutlich haben!). Ein Beispiel, das ich auf jeden Fall überprüfen möchte, wären Vektorsätze der Form wobei ein Vektor ohne Nullkomponenten ist und sequentielle Integralwerte . Ich würde auch den Algorithmus an Vektorsätzen überprüfen wollen, die gleichseitige Polygone bilden. In beiden Fällen Fällen , in denen ist nicht ein Vielfaches von sind besonders interessant, auch dann, wennivvi0,1,2,…,n−1nknist kleiner als . Diesen Situationen ist gemeinsam, dass (a) sie alle Dimensionen des Problems verwenden, jedoch (b) die richtigen Lösungen geometrisch offensichtlich sind und (c) es mehrere richtige Lösungen gibt.k
(Bilden Sie zufällige gleichseitige Polygone in Dimensionen, indem Sie mit zwei zufällig ausgewählten Vektoren ungleich Null und . (Eine gute Möglichkeit besteht darin, ihre Komponenten unabhängige Standardnormalvariablen sein zu lassen.) Neu skalieren Nennen wir diese und . Entfernen Sie die -Komponente mithilfe der Formel ausd≥2uv2dxzxz
w=z−(z⋅x)x.
Erhalten Sie indem Sie skalieren, um die Einheitslänge zu erhalten. Wenn Sie möchten, skalieren Sie sowohl als auch gleichmäßig nach dem Zufallsprinzip neu. Die Vektoren und bilden eine orthogonale Basis für einen zufälligen 2D-Unterraum in Dimensionen. Ein gleichseitiges Polygon von Eckpunkten wird erhalten als die Menge von wenn die ganze Zahl von reicht bis .)w x y x y d n cos ( 2 π k / n ) x + sin ( 2 π k / n ) y k 0 n - 1ywxyxydncos(2πk/n)x+sin(2πk/n)yk0n−1