K-mean è un algoritmo di clustering standard non supervisionato, che, dato un insieme di "punti" e un numero di cluster K, assegnerà ciascun "punto" a uno dei cluster K.
Pseudo-codice di K-significa
Nota che ci sono molte varianti di K-medie. Devi implementare l'algoritmo che sto descrivendo di seguito. Potresti avere qualche variazione sull'algoritmo o utilizzare gli incorporati purché otterrai lo stesso risultato di questo algoritmo, dato gli stessi punti iniziali.
In questa sfida, tutti gli input saranno punti sul piano 2D (ogni punto è rappresentato dalle sue coordinate in xey).
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
Ingressi e uscite
- Puoi prendere K e P attraverso
STDIN
, o come argomento di funzione, ecc. - P e i punti in P possono essere rappresentati utilizzando qualsiasi struttura naturale per set / elenchi nella lingua prescelta.
- K è un numero intero strettamente positivo.
- Si può presumere che gli input siano validi.
- Ci saranno sempre almeno K punti in P.
- È possibile generare i cluster in
STDOUT
, restituirli da una funzione, ecc. - L'ordinamento dei cluster e l'ordinamento all'interno dei cluster non è importante. -Puoi restituire gruppi di punti per rappresentare i cluster o ogni punto etichettato con un identificatore per il cluster (ad esempio un numero intero).
Casi test
Poiché i cluster risultanti dipendono da quali punti sono stati inizialmente scelti, potresti non ottenere tutti gli stessi risultati (o lo stesso risultato ogni volta che esegui il codice).
Pertanto, prendi l'output solo come output di esempio.
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]]]
punteggio
Questo è code-golf , quindi vince la risposta più breve in byte.
1
, tutti i punti del secondo hanno un'etichetta, 2
ecc.)
K=2, P = [[1,1], [1,1], [1,1]]
.