K-means ist ein standardmäßiger unbeaufsichtigter Clustering-Algorithmus, der bei einer Menge von "Punkten" und einer Anzahl von Clustern K jeden "Punkt" einem von K Clustern zuweist.
Pseudocode von K-Mitteln
Beachten Sie, dass es viele Varianten von K-Mitteln gibt. Sie müssen den unten beschriebenen Algorithmus implementieren. Möglicherweise haben Sie einige Variationen des Algorithmus oder verwenden integrierte Funktionen, solange Sie bei gleichen Anfangspunkten das gleiche Ergebnis wie bei diesem Algorithmus erzielen.
Bei dieser Herausforderung sind alle Eingaben Punkte in der 2D-Ebene (jeder Punkt wird durch seine Koordinaten in x und y dargestellt).
Inputs: K, the number of clusters
P, the set of points
Choose K points of P uniformly at random
Each chosen point is the initial centroid of its cluster
Loop:
For each point in P:
Assign to the cluster whose centroid is the nearest (Euclidean distance)
In case of a tie, any of the tied cluster can be chosen
Recompute the centroid of each cluster:
Its x coordinate is the average of all x's of the points in the cluster
Its y coordinate is the average of all y's of the points in the cluster
Until the clusters don't change from one iteration to the next
Output: the set of clusters
Eingänge und Ausgänge
- Sie können K und P durch
STDIN
oder als Funktionsargument usw. führen. - P und die Punkte in P können mit einer beliebigen Struktur dargestellt werden, die für Mengen / Listen in der Sprache Ihrer Wahl natürlich ist.
- K ist eine streng positive ganze Zahl.
- Sie können davon ausgehen, dass Eingaben gültig sind.
- Es wird immer mindestens K Punkte in P geben.
- Sie können die Cluster an ausgeben
STDOUT
, sie von einer Funktion zurückgeben usw. - Die Reihenfolge der Cluster und die Reihenfolge innerhalb der Cluster ist unwichtig. - Sie können entweder Punktgruppen zurückgeben, um Cluster darzustellen, oder jeden Punkt mit einer Kennung für den Cluster (z. B. einer Ganzzahl) kennzeichnen.
Testfälle
Da die resultierenden Cluster davon abhängen, welche Punkte ursprünglich ausgewählt wurden, erhalten Sie möglicherweise nicht alle dieselben Ergebnisse (oder jedes Mal dasselbe Ergebnis, wenn Sie Ihren Code ausführen).
Nehmen Sie daher nur die Ausgabe als Beispielausgabe.
Input:
K = 1
P = [[1,2.5]]
Output:
[[[1,2.5]]]
Input:
K = 3
P = [[4,8], [15,16], [23,42], [-13.37,-12.1], [666,-666]]
Output:
[[[666,-666]],[[-13.37,-12.1],[4,8]],[[15,16],[23,42]]]
Input:
K = 2
P = [[1,1], [1,1], [1,1]]
Output:
[[[1,1]],[[1,1],[1,1]]]
Wertung
Dies ist Code-Golf , daher gewinnt die kürzeste Antwort in Bytes.
1
, alle Punkte des zweiten Clusters haben Beschriftung 2
usw.)
K=2, P = [[1,1], [1,1], [1,1]]
.