Algoritmi di clustering - Algoritmo K-means

Introduzione all'algoritmo K-Means

L'algoritmo di clustering K-means calcola i centroidi e itera finché non trova il centroide ottimale. Si presume che il numero di cluster sia già noto. È anche chiamatoflat clusteringalgoritmo. Il numero di cluster identificati dai dati mediante algoritmo è rappresentato da "K" in K-mean.

In questo algoritmo, i punti dati vengono assegnati a un cluster in modo tale che la somma della distanza al quadrato tra i punti dati e il centroide sia minima. È chiaro che una minore variazione all'interno dei cluster porterà a punti dati più simili all'interno dello stesso cluster.

Utilizzo dell'algoritmo K-Means

Possiamo comprendere il funzionamento dell'algoritmo di clustering K-Means con l'aiuto dei seguenti passaggi:

  • Step 1 - Innanzitutto, dobbiamo specificare il numero di cluster, K, che devono essere generati da questo algoritmo.

  • Step 2- Quindi, seleziona casualmente K punti dati e assegna ogni punto dati a un cluster. In parole semplici, classificare i dati in base al numero di punti dati.

  • Step 3 - Ora calcolerà i centroidi del cluster.

  • Step 4 - Successivamente, continua a ripetere quanto segue finché non troviamo il centroide ottimale che è l'assegnazione dei punti dati ai cluster che non cambiano più -

4.1 - In primo luogo, verrà calcolata la somma della distanza al quadrato tra i punti dati e i centroidi.

4.2 - Ora, dobbiamo assegnare ogni punto dati al cluster più vicino di altri cluster (centroide).

4.3 - Infine calcola i centroidi per i cluster prendendo la media di tutti i punti dati di quel cluster.

Segue K-significa Expectation-Maximizationapproccio per risolvere il problema. Il passaggio Expectation viene utilizzato per assegnare i punti dati al cluster più vicino e il passaggio Maximization viene utilizzato per calcolare il centroide di ciascun cluster.

Mentre lavoriamo con l'algoritmo K-means dobbiamo occuparci delle seguenti cose:

  • Mentre si lavora con algoritmi di clustering inclusi K-Means, si consiglia di standardizzare i dati perché tali algoritmi utilizzano la misurazione basata sulla distanza per determinare la somiglianza tra i punti dati.

  • A causa della natura iterativa delle medie K e dell'inizializzazione casuale dei centroidi, le medie K possono rimanere in un ottimo locale e potrebbero non convergere all'ottimo globale. Questo è il motivo per cui si consiglia di utilizzare diverse inizializzazioni dei centroidi.

Implementazione in Python

I seguenti due esempi di implementazione dell'algoritmo di clustering K-Means ci aiuteranno a comprenderlo meglio:

Esempio 1

È un semplice esempio per capire come funziona k-means. In questo esempio, genereremo prima un set di dati 2D contenente 4 diversi blob, dopodiché applicheremo l'algoritmo k-means per vedere il risultato.

Innanzitutto, inizieremo importando i pacchetti necessari:

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans

Il codice seguente genererà il 2D, contenente quattro blob:

from sklearn.datasets.samples_generator import make_blobs
X, y_true = make_blobs(n_samples=400, centers=4, cluster_std=0.60, random_state=0)

Successivamente, il codice seguente ci aiuterà a visualizzare il set di dati:

plt.scatter(X[:, 0], X[:, 1], s=20);
plt.show()

Quindi, crea un oggetto di KMeans oltre a fornire il numero di cluster, addestra il modello ed esegui la previsione come segue:

kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)

Ora, con l'aiuto del codice seguente possiamo tracciare e visualizzare i centri del cluster selezionati dallo stimatore Python k-means -

plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=20, cmap='summer')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='blue', s=100, alpha=0.9);
plt.show()

Esempio 2

Passiamo a un altro esempio in cui applicheremo il clustering K-means su set di dati a cifre semplici. K-means tenterà di identificare cifre simili senza utilizzare le informazioni sull'etichetta originale.

Innanzitutto, inizieremo importando i pacchetti necessari:

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans

Quindi, carica il set di dati delle cifre da sklearn e creane un oggetto. Possiamo anche trovare il numero di righe e colonne in questo set di dati come segue:

from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape

Produzione

(1797, 64)

L'output sopra mostra che questo set di dati ha 1797 campioni con 64 funzionalità.

Possiamo eseguire il raggruppamento come abbiamo fatto nell'esempio 1 sopra -

kmeans = KMeans(n_clusters=10, random_state=0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape

Produzione

(10, 64)

L'output sopra mostra che K-means ha creato 10 cluster con 64 funzionalità.

fig, ax = plt.subplots(2, 5, figsize=(8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
   axi.set(xticks=[], yticks=[])
   axi.imshow(center, interpolation='nearest', cmap=plt.cm.binary)

Produzione

Come output, otterremo la seguente immagine che mostra i centri dei cluster appresi con k-means.

Le seguenti righe di codice faranno corrispondere le etichette del cluster apprese con le vere etichette trovate in esse -

from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
   mask = (clusters == i)
   labels[mask] = mode(digits.target[mask])[0]

Successivamente, possiamo verificare l'accuratezza come segue:

from sklearn.metrics import accuracy_score
accuracy_score(digits.target, labels)

Produzione

0.7935447968836951

L'output sopra mostra che la precisione è di circa l'80%.

Vantaggi e svantaggi

Vantaggi

Di seguito sono riportati alcuni vantaggi degli algoritmi di clustering K-Means:

  • È molto facile da capire e implementare.

  • Se disponiamo di un numero elevato di variabili, K-means sarebbe più veloce del clustering gerarchico.

  • Durante il ricalcolo dei centroidi, un'istanza può modificare il cluster.

  • I cluster più stretti sono formati con K-means rispetto al clustering gerarchico.

Svantaggi

Di seguito sono riportati alcuni svantaggi degli algoritmi di clustering K-Means:

  • È un po 'difficile prevedere il numero di cluster, ovvero il valore di k.

  • L'output è fortemente influenzato dagli input iniziali come il numero di cluster (valore di k).

  • L'ordine dei dati avrà un forte impatto sull'output finale.

  • È molto sensibile al riscalaggio. Se riscaleremo i nostri dati mediante normalizzazione o standardizzazione, l'output cambierà completamente.

  • Non è utile eseguire un lavoro di raggruppamento se i cluster hanno una forma geometrica complicata.

Applicazioni dell'algoritmo di clustering K-Means

Gli obiettivi principali dell'analisi dei cluster sono:

  • Per ottenere un'intuizione significativa dai dati con cui stiamo lavorando.

  • Cluster-then-prevede dove verranno costruiti modelli diversi per sottogruppi diversi.

Per soddisfare gli obiettivi sopra menzionati, il clustering K-means sta funzionando abbastanza bene. Può essere utilizzato nelle seguenti applicazioni:

  • Segmentazione del mercato

  • Clustering dei documenti

  • Segmentazione delle immagini

  • Compressione dell'immagine

  • Segmentazione della clientela

  • Analisi dell'andamento sui dati dinamici