Comprendere l'algoritmo di clustering K-means nel Machine Learning
Clustering K-means o algoritmo K-means o, algoritmo di clustering K-means—bene, prima di approfondire cosa sono gli algoritmi di clustering, dobbiamo comprendere quanto siano essenziali per le imprese moderne per dare senso ai dati—dati sui prodotti, dati sui clienti, dati sulle transazioni e così via.
In un mondo in cui la tecnologia sta ridefinendo il panorama aziendale, le imprese spendono milioni di dollari nell’analisi dei dati per sviluppare pattern che le aiutino a diventare più efficienti e ad aumentare i profitti. Raggruppare gli oggetti in base agli attributi è uno dei primi compiti coinvolti in questo processo di individuazione di tali pattern.
Raggruppare gli oggetti aiuta le imprese a progettare varie strategie per varie situazioni. Clienti, prodotti e transazioni sono oggetti di interesse centrale in tali processi. Raggruppare i clienti in base al loro comportamento aiuta le aziende a progettare offerte personalizzate. Raggruppare i prodotti le aiuta a offrire scelte alternative ai clienti. E raggruppare le transazioni le aiuta a identificare pattern insoliti che richiedono maggiore attenzione.
È qui che entra in gioco il clustering. Il clustering è un algoritmo di machine learning (ML) non supervisionato che raggruppa gli oggetti in base agli attributi.
Questo articolo completo di Zilliz, un’azienda leader nel settore dei database vettoriali per l’AI pronta per la produzione, ti porterà ad approfondire cos’è l’algoritmo di clustering K-means nel machine learning e come puoi implementarlo usando Python. Esplorerà anche quando utilizzare l’algoritmo di clustering K-means e fornirà un esempio reale di clustering K-means.
Che cos’è il clustering?
Il clustering è il processo di raggruppamento dei punti dati in modo che ogni elemento in un particolare gruppo sia più simile agli elementi di quel gruppo che agli elementi di altri gruppi. Il clustering non si riferisce a un algoritmo specifico. È un compito generico che può essere risolto utilizzando molti algoritmi. Gli algoritmi di clustering generalmente definiscono una metrica per quantificare la similarità in modo sistematico. Il clustering viene utilizzato in molti ambiti, come l’elaborazione delle immagini, il recupero delle informazioni, i motori di raccomandazione e la compressione dei dati.
Il clustering stabilisce la similarità in base agli attributi degli oggetti che raggruppa. Gli attributi differiscono a seconda del dominio. Ad esempio, nel caso di un’immagine, gli attributi sono i valori dei pixel. Nel caso di un profilo utente, gli attributi sono dettagli come età, genere e cronologia degli acquisti. Nel caso di un prodotto, gli attributi sono la categoria, il colore, il prezzo, ecc. Il clustering è chiamato un compito non supervisionato perché non esiste un processo di addestramento monitorato dall’utente che comporti la preparazione di dati etichettati.
Come funzionano gli algoritmi di clustering?
La maggior parte degli algoritmi di clustering funziona calcolando la similarità tra tutte le coppie di campioni. Ogni punto dati viene assegnato al centroide più vicino in base ai calcoli della distanza, che costituisce un passaggio fondamentale nel processo di clustering.
La capacità di scalare rispetto al volume del set di dati è un fattore essenziale da considerare quando si decide quale algoritmo di clustering utilizzare per un problema. Il tempo di esecuzione aumenta con il numero di coppie di elementi. In casi estremi, può variare proporzionalmente al quadrato del volume dei dati.
Quattro approcci al clustering
Esistono quattro approcci comuni al clustering: basato sui centroidi, basato sulla densità, gerarchico e basato sulla distribuzione. Vediamoli uno per uno.
1. Clustering basato sui centroidi
Questo metodo organizza i punti dati in cluster individuali senza alcuna gerarchia, in base al centroide di tutti i punti dati nel cluster. Il centroide è il centro geometrico di un oggetto. In parole semplici, è la media aritmetica di tutti i punti che costituiscono quell’oggetto nello spazio n-dimensionale. Qui, un cluster è una raccolta di punti situati attorno a un centroide. Il clustering basato su centroidi soffre di problemi relativi alle assegnazioni iniziali e agli outlier.
2. Clustering basato sulla densità
Come suggerisce il nome, calcola la densità dei punti in un’area e quindi assegna i punti dati ai cluster ovunque venga riscontrata un’alta densità. In questo caso, i cluster possono assumere qualsiasi forma. Il clustering basato sulla densità incontra problemi quando i dati hanno intrinsecamente un’elevata varianza nella densità. Non funziona bene quando la dimensione dei dati è elevata, poiché può avere difficoltà a distinguere tra cluster e cluster vicini.
3. Clustering gerarchico
Questo metodo fornisce un albero di cluster con la possibilità di cluster situati all’interno di cluster più grandi. Questo metodo si adatta bene quando i dati presentano una gerarchia intrinseca. Il clustering gerarchico consente di scegliere un numero qualsiasi di cluster diversi dopo l’esecuzione, poiché l’analista può interrompere l’albero nel punto richiesto e considerare solo i cluster dopo quel punto.
4. Clustering basato sulla distribuzione
Questo metodo utilizza il concetto di distribuzioni di probabilità per trovare i cluster. Presuppone che la probabilità che un punto si trovi in un cluster diminuisca quando la distanza dal centro del cluster aumenta. Gli sviluppatori dovrebbero conoscere la distribuzione dei propri dati per utilizzare questo metodo in modo efficace.
Che cos’è il clustering K-means?
L’algoritmo di clustering K-means è un algoritmo di clustering basato su centroidi. È un algoritmo di apprendimento non supervisionato poiché non si basa su dati etichettati. La “K” in un algoritmo di clustering K-means rappresenta il numero di cluster.
K-means è un algoritmo iterativo che calcola la media o il centroide molte volte prima di convergere. Il tempo per convergere dipende dall’assegnazione iniziale e dal numero ottimale di cluster utilizzati. Generalmente, la complessità temporale di K-means è
dove d è il numero di dimensioni, k è il numero di cluster e n è il numero di elementi di dati nei k cluster.
L’algoritmo di clustering K-means funziona calcolando la distanza di ciascun elemento di dati dal centro geometrico di un cluster. Quindi riconfigura il cluster se trova un punto appartenente a un cluster specifico più vicino al centroide di un altro cluster. Dopodiché, ricalcola il centroide del cluster e ripete il processo finché non ci sono ulteriori riassegnazioni di cluster.
Vediamo come funziona l’algoritmo.
Come funziona l’algoritmo di clustering K-means?
L’algoritmo di clustering K-means è un processo iterativo che coinvolge quattro passaggi principali. Per comprendere questi passaggi, consideriamo un problema di clustering bidimensionale. Supponiamo che i punti siano (x1,y1),(x2,y2), e così via. Iniziamo con una dimensione del cluster pari a 2.
Assegnazione iniziale
Questo passaggio assegna ciascun punto a un cluster arbitrario. Un’opzione è assegnare punti casuali come centroidi del cluster e calcolare le distanze tra ciascun punto dati e i centroidi.
I punti vengono assegnati al cluster il cui centroide è più vicino a essi. La distanza tra due cluster viene calcolata utilizzando la formula della distanza euclidea. Ad esempio, se x3,y3 è uno dei centroidi assegnati casualmente, si può calcolare la distanza tra x1,y1 e x3,y3 utilizzando questa formula:
Y vs. X
Y vs. X
I punti rossi e verdi indicano le assegnazioni iniziali casuali dei centroidi. Basandosi solo su questi centroidi iniziali dei cluster, l’assegnazione iniziale dei cluster apparirà come mostrato di seguito:
Y vs. X
Y vs. X
Calcolo dei centroidi
Questo passaggio comporta il ricalcolo dei centroidi per ciascun cluster. Il centroide di un cluster viene calcolato utilizzando la media aritmetica di tutti gli elementi in quel cluster. Ad esempio, supponiamo che x1,y1, x2,y2 e x3,y3 appartengano a un cluster. Il centroide di quel cluster viene calcolato come:
I punti a forma di diamante, come mostrato di seguito, diventano i nuovi centroidi.
Y vs. X
Y vs. X
Riassegnazione dei cluster
Una volta trovati i nuovi centroidi per tutti e tre i cluster, la distanza tra ciascun punto e i nuovi centroidi viene ricalcolata. Se uno qualsiasi dei punti si trova più vicino al centroide di un cluster a cui è attualmente assegnato, i punti vengono riassegnati.
Y vs. X
Y vs. X
Convergenza
Dopo la riassegnazione dei cluster, i centroidi vengono calcolati di nuovo e il processo si ripete. Il calcolo dei centroidi e la riassegnazione dei cluster vengono eseguiti finché non ci sono ulteriori nuove riassegnazioni. L’attività di clustering convergente, in questo caso, apparirà come mostrato di seguito:
Y vs. X
Y vs. X
Scelta del numero di cluster
Due metodi comunemente utilizzati per scegliere il numero ideale di cluster sono il metodo del gomito e il metodo silhouette.
Metodo del gomito
Il metodo del gomito calcola una metrica chiamata WCSS (Within Cluster Sum of Squares). WCSS è la somma dei quadrati della distanza di ciascun punto dal centroide del cluster più vicino sopra. Il grafico di WCSS rispetto al numero di cluster viene utilizzato come indicazione per selezionare il numero ottimale di cluster.
Gli sviluppatori eseguono il clustering K-means per conteggi di cluster da 1 a n e quindi calcolano WCSS per ciascuna di queste esecuzioni. WCSS sarà massimo per un’esecuzione con un singolo cluster e diminuisce quando il numero di cluster aumenta. Il punto in cui WCSS mostra una brusca flessione, come il gomito di un braccio, è considerato il numero ideale ottimale di cluster.
Elbow Method
Metodo del gomito
Metodo silhouette
Questo metodo cerca di comprendere il grado di somiglianza di un oggetto con altri membri dello stesso cluster e il grado di separazione degli oggetti dagli altri cluster. Il punteggio silhouette per un punto viene calcolato combinando la distanza media di quel punto dagli altri punti nel cluster (a) e la distanza media di quel punto da tutti i punti che appartengono ad altri cluster (b), inclusi i cluster vicini. Una volta trovati a e b, il punteggio silhouette per un punto viene calcolato come
Il punteggio per ciascun punto viene quindi mediato per trovare il punteggio silhouette. Il punteggio viene calcolato per tutti i candidati al conteggio ottimale e quindi quello con i k punti e il punteggio più alto viene selezionato come conteggio ottimale.
Silhouette Method
Metodo silhouette
Un esempio reale di algoritmo di clustering K-means (Implementazione del clustering K-means con Python)
Questo tutorial dimostra come implementare il clustering K-means utilizzando Python e come trovare la dimensione ottimale del cluster. Per farlo, supponiamo un enunciato di problema comune nel dominio dell’e-commerce. Il clustering dei clienti in base ai loro attributi demografici e alle loro abitudini di spesa è un’attività comune nel dominio dell’e-commerce. Per semplificare l’esempio di clustering K-means, useremo qui due attributi: l’età del cliente e l’importo medio speso al mese.
- Per farlo, utilizziamo una libreria di machine learning Python chiamata scikit-learn e una libreria di plotting chiamata matplotlib. Innanzitutto, inizializza le librerie utilizzando le istruzioni import riportate di seguito:
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette\_score
from sklearn.preprocessing import StandardScaler
- Il passaggio successivo consiste nel definire il frame di dati di input. Qui, il primo attributo è l'età e il secondo attributo è la spesa media mensile in rupie indiane (INR). Per semplicità, inizializziamo l'array direttamente nel codice. Abbiamo 16 punti dati qui:
raw\_features = np.array([[22,200],[24,200],[24,200],[20,800],[24,800],[24,800],[25,200],[54,200],[24,200],[54,200],[50,800],[53,800],[24,800],[55,800],[53,800],[50,800]])
- Quindi normalizzerai i punti dati, in modo che la variazione in un attributo non offuschi le variazioni negli altri attributi.
scaler = StandardScaler()
features = scaler.fit\_transform(raw\_features)
- Implementa un ciclo for per provare il clustering K-means per un numero di cluster che varia da 2 a 6. Calcoleremo quindi la somma dei quadrati e la tracceremo rispetto al numero di cluster per identificare il numero ottimale di cluster.
sse = []
s\_scores=[]
for i in range(2,6):
kmeans = KMeans(init = **"random"** ,n\_clusters = i,n\_init = 10,max\_iter = 300,random\_state = 42)
kmeans.fit(features)
sse.append(kmeans.inertia\_)
s\_scores.append(silhouette\_score(features, kmeans.labels\_))
- Usa la libreria matplotlib per tracciare la somma dei quadrati rispetto al numero di cluster.
plt.style.use( **"fivethirtyeight"** )
plt.plot(range(1, 6), sse)
plt.xticks(range(1, 6))
plt.xlabel( **"Number of Clusters"** )
plt.ylabel( **"SSE"** )
plt.show()
- L'esecuzione del codice sopra produrrà un grafico che possiamo usare per identificare il numero ottimale di cluster.
Clustering K-means
Algoritmo di clustering K-means
Il grafico a dispersione sopra mostra un distinto "gomito" a 4. Quindi il numero ottimale di cluster qui è 4. Con una certa conoscenza del dominio, un data scientist può spiegare questo numero come quattro combinazioni: clienti di bassa età e alta spesa, bassa età e bassa spesa, alta età e alta spesa, e alta età e bassa spesa. Ma tali spiegazioni potrebbero non essere sempre possibili, e il numero ottimale di cluster varia in base alle specifiche del problema.
Questo è tutto ciò che serve per eseguire il clustering K-means in Python. I framework scikit-learn e matplotlib rendono molto facile usare il clustering in Python.
Quando usare l'algoritmo di clustering K-Means
Quindi, come abbiamo imparato, il clustering è un algoritmo di machine learning non supervisionato che aiuta a raggruppare oggetti in base alla somiglianza. È ampiamente utilizzato in molti domini industriali per l'analisi esplorativa dei dati.
È utile in aree come la segmentazione dei clienti, i motori di raccomandazione e la ricerca per similarità. Detto questo, l'algoritmo di clustering K-means non è l'unica tecnica che può essere utilizzata per risolvere questi problemi. Un altro modo per risolvere un problema del genere è generare embedding vettoriali per ciascun oggetto in base ai suoi attributi.
Le reti di addestramento basate sul deep learning possono generare embedding multidimensionali per oggetti con un gran numero di attributi. Questi embedding, insieme a un buon database vettoriale, possono risolvere problemi basati sulla similarità con un controllo molto migliore.
Se stai lavorando su problemi di questo tipo, dai un'occhiata a Zilliz. Offre una soluzione completa per le sfide nella gestione di dati non strutturati, specialmente per le aziende che creano applicazioni AI/ML che sfruttano la ricerca per similarità vettoriale.
Zilliz ha creato Milvus, un popolare database vettoriale open-source ampiamente riconosciuto da oltre mille utenti aziendali in tutto il mondo. L'azienda offre anche un servizio di database vettoriale completamente gestito, Zilliz Cloud, che consente alle imprese di sfruttare tutta la potenza di Milvus senza il problema di creare e gestire l'infrastruttura.
Se vuoi sapere: che cos'è un database vettoriale? - puoi consultare la guida approfondita. Cerchi maggiori informazioni su argomenti correlati? Dai un'occhiata a questa spiegazione della Approximate Nearest Neighbor Search (ANNS). Vuoi saperne di più su come Zilliz può aiutarti? Tutto ciò che devi fare è cliccare qui e chiedere!
Continua a leggere

Introducing Loon: A New Storage Engine for Vector Data That Never Stops Changing
Loon is a new storage engine for Milvus 3.0 and Zilliz Vector Lakebase, built to manage evolving vector datasets with ColumnGroups, row ID alignment, and Manifests.

DeepSeek-OCR Explained: Optical Compression for Scalable Long-Context and RAG Systems
Discover how DeepSeek-OCR uses visual tokens and Contexts Optical Compression to boost long-context LLM efficiency and reshape RAG performance.

The Real Bottlenecks in Autonomous Driving — And How AI Infrastructure Can Solve Them
Autonomous driving faces a data bottleneck. Learn how AI-native vector databases like Zilliz solve scale, cost, and insight challenges across AV pipelines.



