Machine Learning · Clustering k-means

Clustering con k-means e Distanze

Torna all'indice generale

Come raggruppare automaticamente i dati usando la distanza tra punti.

1. Idea di base del clustering

Il clustering è una tecnica di apprendimento non supervisionato che raggruppa i dati in base alla loro somiglianza. Nel caso di k-means assumiamo di voler trovare k gruppi (cluster) nei dati.

Ogni cluster è rappresentato da un centroide, cioè un punto medio. L'obiettivo è minimizzare la distanza complessiva dei punti dal centroide del cluster a cui appartengono.

2. Ruolo delle distanze

Il cuore di k-means è la distanza tra punti. Di solito si usa la distanza euclidea, ma non è l'unica possibile.

  • Distanza euclidea: classica distanza geometrica.
  • Distanza Manhattan: somma delle differenze assolute.
  • Altre metriche: Minkowski, cosine, ecc.

La scelta della distanza influisce profondamente sulla forma dei cluster. È collegata ai concetti introdotti nella pagina su Distanze e metriche.

3. L'algoritmo k-means in breve

  1. Scegliere il numero di cluster k.
  2. Inizializzare casualmente k centroidi.
  3. Assegnare ogni punto al centroide più vicino (fase di assegnazione).
  4. Ricalcolare i centroidi come media dei punti assegnati (fase di aggiornamento).
  5. Ripetere assegnazione/aggiornamento finché i centroidi non cambiano quasi più.

Il risultato è una partizione dei dati in k cluster, ognuno con il proprio centroide.

4. Esempio in Python con scikit-learn

Usiamo scikit-learn per applicare k-means a dati sintetici bidimensionali.


import numpy as np
from sklearn.cluster import KMeans

# Dati di esempio: tre "nuvole" di punti
rng = np.random.default_rng(42)
X1 = rng.normal(loc=[0, 0], scale=0.5, size=(50, 2))
X2 = rng.normal(loc=[3, 3], scale=0.5, size=(50, 2))
X3 = rng.normal(loc=[0, 4], scale=0.5, size=(50, 2))
X = np.vstack([X1, X2, X3])

# Applichiamo k-means con k=3
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)
labels = kmeans.labels_
centroids = kmeans.cluster_centers_

print("Centroidi:")
print(centroids)
          

In un notebook puoi visualizzare i punti colorati in base a labels e i centroidi come marker distinti, per capire visivamente il risultato.

5. Limiti e varianti di k-means

  • Forma dei cluster: k-means lavora bene con cluster "a nuvola" (convessi).
  • Sensibilità agli outlier: punti molto lontani possono spostare i centroidi.
  • Scelta di k: non sempre è ovvio; si usano metodi come il "gomito".

Varianti come k-medoids o metodi basati sulla densità (es. DBSCAN) possono essere più adatti quando i cluster hanno forme complesse o ci sono molti outlier.