K-Means Clustering

K-Means Clustering
K-Means Clustering è un algoritmo di apprendimento automatico senza supervisione. Se confrontiamo l'algoritmo di clustering non supervisionato con i media con l'algoritmo supervisionato, non è necessario addestrare il modello con i dati etichettati. L'algoritmo K-Means viene utilizzato per classificare o raggruppare oggetti diversi in base ai loro attributi o caratteristiche in un numero K di gruppi. Qui, K è un numero intero. I K-Means calcolano la distanza (usando la formula della distanza) e quindi trova la distanza minima tra i punti dati e il cluster del centroide per classificare i dati.

Comprendiamo i k-mean usando il piccolo esempio usando i 4 oggetti e ogni oggetto ha 2 attributi.

ObjectsName Attributo_x Attributo_y
M1 1 1
M2 2 1
M3 4 3
M4 5 4

K-mean per risolvere l'esempio numerico:

Per risolvere il problema numerico di cui sopra attraverso K-Means, dobbiamo seguire i seguenti passaggi:

L'algoritmo K-Means è molto semplice. Innanzitutto, dobbiamo scegliere qualsiasi numero casuale di K e quindi scegliere i centroidi o il centro dei cluster. Per scegliere i centroidi, possiamo scegliere qualsiasi numero casuale di oggetti per l'inizializzazione (dipende dal valore di k).

Gli algoritmo K-Means Passaggi sono i seguenti:

  1. Continua a correre fino a quando nessun oggetto si sposta dai loro centroidi (stabile).
  2. Per prima cosa scegliamo alcuni centroidi in modo casuale.
  3. Quindi, determiniamo la distanza tra ciascun oggetto e i centroidi.
  4. Raggruppare gli oggetti in base alla distanza minima.

Quindi, ogni oggetto ha due punti come X e Y e rappresentano nello spazio grafico come segue:

Quindi inizialmente scegliamo il valore di k = 2 come casuale per risolvere il nostro problema sopra.

Passaggio 1: inizialmente, scegliamo i primi due oggetti (1, 1) e (2, 1) come i nostri centroidi. Il grafico seguente mostra lo stesso. Chiamiamo questi centroidi C1 (1, 1) e C2 (2,1). Qui, possiamo dire che C1 è Group_1 e C2 è gruppo_2.

Passaggio 2: ora calcoleremo ogni punto dati dell'oggetto ai centroidi usando la formula della distanza euclidea.

Per calcolare la distanza, utilizziamo la seguente formula.

Calcoliamo la distanza dagli oggetti ai centroidi, come mostrato nell'immagine seguente.

Quindi, abbiamo calcolato ogni distanza del punto dati dell'oggetto attraverso il metodo di distanza sopra, ha finalmente ottenuto la matrice di distanza come indicato di seguito:

Dm_0 =

0 1 3.61 5 C1 = (1,1)

Cluster1

gruppo 1
1 0 2.83 4.24 C2 = (2,1)

Cluster2

gruppo_2
UN B C D
1 2 4 5 X
1 1 3 4 Y

Ora abbiamo calcolato il valore della distanza di ciascun oggetto per ogni centroide. Ad esempio, i punti oggetto (1,1) hanno un valore di distanza a C1 è 0 e C2 è 1.

Poiché, dalla matrice di distanza sopra, scopriamo che l'oggetto (1, 1) ha una distanza da Cluster1 (C1) è 0 e da Cluster2 (C2) è 1. Quindi l'oggetto è vicino a Cluster1 stesso.

Allo stesso modo, se controlliamo l'oggetto (4, 3), la distanza da cluster1 è 3.61 e a cluster2 è 2.83. Quindi, l'oggetto (4, 3) si sposterà su Cluster2.

Allo stesso modo, se si verifica l'oggetto (2, 1), la distanza da cluster1 è 1 e su cluster2 è 0. Quindi, questo oggetto si sposterà su Cluster2.

Ora, secondo il loro valore di distanza, raggruppiamo i punti (clustering di oggetti).

G_0 =

UN B C D
1 0 0 0 gruppo 1
0 1 1 1 gruppo_2

Ora, secondo il loro valore di distanza, raggruppiamo i punti (clustering di oggetti).

E infine, il grafico apparirà di seguito dopo aver fatto il clustering (G_0).

Iterazione_1: Ora calcoleremo nuovi centroidi quando i gruppi iniziali sono cambiati a causa della formula di distanza come mostrato nel G_0. Quindi, il gruppo_1 ha un solo oggetto, quindi il suo valore è ancora C1 (1,1), ma il gruppo_2 ha 3 oggetti, quindi il suo nuovo valore di centroide è

Quindi, nuovo C1 (1,1) e C2 (3.66, 2.66)

Ora, dobbiamo di nuovo calcolare tutta la distanza dai nuovi centroidi come abbiamo calcolato prima.

Dm_1 =

0 1 3.61 5 C1 = (1,1)

Cluster1

gruppo 1
3.14 2.36 0.47 1.89 C2 = (3.66,2.66)

Cluster2

gruppo_2
UN B C D
1 2 4 5 X
1 1 3 4 Y

Iterazione_1 (clustering di oggetti): Ora, a nome del nuovo calcolo della matrice di distanza (DM_1), lo raggruppiamo in base a quello. Quindi, spostiamo l'oggetto M2 da Group_2 a Group_1 come regola della distanza minima ai centroidi e il resto dell'oggetto sarà lo stesso. Quindi il nuovo clustering sarà come di seguito.

G_1 =

UN B C D
1 1 0 0 gruppo 1
0 0 1 1 gruppo_2

Ora, dobbiamo calcolare di nuovo i nuovi centroidi, poiché entrambi gli oggetti hanno due valori.

Quindi, i nuovi centroidi saranno

Quindi, dopo aver ottenuto i nuovi centroidi, il clustering apparirà di seguito:

C1 = (1.5, 1)

c2 = (4.5, 3.5)

Iterazione_2: Ripetiamo il passaggio in cui calcoliamo la nuova distanza di ciascun oggetto a nuovi centroidi calcolati. Quindi, dopo il calcolo, otterremo la seguente matrice di distanza per iterazione_2.

Dm_2 =

0.5 0.5 3.20 4.61 C1 = (1.5, 1)

Cluster1

gruppo 1
4.30 3.54 0.71 0.71 C2 = (4.5, 3.5)

Cluster2

gruppo_2

A b c d

UN B C D
1 2 4 5 X
1 1 3 4 Y

Ancora una volta, eseguiamo gli incarichi di clustering in base alla distanza minima come abbiamo fatto prima. Quindi, dopo averlo fatto, abbiamo ottenuto la matrice di cluster che è uguale a G_1.

G_2 =

UN B C D
1 1 0 0 gruppo 1
0 0 1 1 gruppo_2

Come qui, G_2 == G_1, Quindi non è necessaria ulteriori iterazione e possiamo fermarci qui.

Implementazione K-Means usando Python:

Ora, implementeremo l'algoritmo K-Means in Python. Per implementare i K-Means, useremo il famoso set di dati Iris, che è open-source. Questo set di dati ha tre classi diverse. Questo set di dati ha sostanzialmente quattro funzionalità: Lunghezza sepal, larghezza del sepal, lunghezza del petalo e larghezza del petalo. L'ultima colonna dirà il nome della classe di quella riga come Setosa.

Il set di dati sembra sotto:

Per l'implementazione di Python K-Means, dobbiamo importare le biblioteche richieste. Quindi importa Panda, Numpy, Matplotlib e anche Kmeans da Sklearn.Clutser come indicato di seguito:

Stiamo leggendo l'iride.Set di dati CSV utilizzando il metodo di Panda read_csv e visualizzerà i 10 risultati usando il metodo Head.

Ora stiamo leggendo solo quelle caratteristiche del set di dati che abbiamo richiesto per addestrare il modello. Quindi stiamo leggendo tutte e quattro le funzionalità dei set di dati (lunghezza del sepal, larghezza del sepal, lunghezza del petalo, larghezza del petalo). Per questo, abbiamo superato i quattro valori dell'indice [0, 1, 2, 3] nella funzione ILOoc del frame di dati del panda (DF) come mostrato di seguito:

Ora, scegliamo il numero di cluster in modo casuale (k = 5). Creiamo l'oggetto della classe K-Means e quindi adattiamo il nostro set di dati X in quello per l'allenamento e la previsione come mostrato di seguito:

Ora, visualizzeremo il nostro modello con il valore casuale k = 5. Possiamo vedere chiaramente cinque cluster, ma sembra che non sia accurato, come mostrato di seguito.

Quindi, il nostro prossimo passo è scoprire che il numero dei cluster era accurato o no. E per questo, usiamo il metodo del gomito. Il metodo del gomito viene utilizzato per scoprire il numero ottimale del cluster per un determinato set di dati. Questo metodo verrà utilizzato per scoprire se il valore di k = 5 era corretto o meno in quanto non stiamo ottenendo un clustering chiaro. Quindi, dopodiché andiamo al seguente grafico, che mostra il valore di k = 5 non è corretto perché il valore ottimale è compreso tra 3 o 4.

Ora, eseguiremo di nuovo il codice sopra con il numero di cluster k = 4 come mostrato di seguito:

Ora, visualizzeremo il clustering di nuova build K = 4 sopra. La schermata seguente mostra che ora il clustering viene eseguito tramite K-Means.

Conclusione

Quindi, abbiamo studiato l'algoritmo K-Means in codice numerico e Python. Abbiamo anche visto come possiamo scoprire il numero di cluster per un determinato set di dati. A volte, il metodo del gomito non può fornire il numero corretto di cluster, quindi in quel caso ci sono diversi metodi che possiamo scegliere.

Il codice per questo blog, insieme al set di dati, è disponibile al seguente link https: // github.com/shekharpandey89/k-means