Algoritmo di clustering gerarchico Python!

Nodo di origine: 1055669

Questo articolo è stato pubblicato come parte di Blogathon sulla scienza dei dati

Introduzione

In questo articolo, esamineremo un approccio diverso al clustering K Means chiamato Clustering gerarchico. Rispetto a K Means o K Mode, il clustering gerarchico ha un algoritmo sottostante diverso per il funzionamento del meccanismo di clustering. Il clustering gerarchico utilizza tecniche agglomerative o di divisione, mentre K Means utilizza una combinazione di centroide e distanza euclidea per formare cluster. I dendrogrammi possono essere utilizzati per visualizzare i cluster nel clustering gerarchico, il che può aiutare con una migliore interpretazione dei risultati attraverso tassonomie significative. Non è necessario specificare il numero di cluster quando si crea un dendrogramma.

Qui usiamo Python per spiegare il modello di clustering gerarchico. Abbiamo 200 dati di clienti del centro commerciale nel nostro set di dati. L'ID cliente, il genere, l'età, il reddito annuo e il punteggio di spesa di ciascun cliente sono tutti inclusi nel frame di dati. L'importo calcolato per i punteggi di spesa di ciascuno dei suoi clienti si basa su diversi criteri, come il loro reddito, il numero di volte alla settimana che visitano il centro commerciale e la quantità di denaro che hanno speso in un anno. Questo punteggio varia da 1 a 100. Poiché non conosciamo le risposte, un problema aziendale diventa un problema di clustering. Le categorie finali dei dati ci sono sconosciute. Di conseguenza, il nostro obiettivo è scoprire alcuni cluster di clienti precedentemente sconosciuti.

Ma prima, esaminiamo alcuni termini importanti nel clustering gerarchico.

Termini importanti nel clustering gerarchico

Metodi di collegamento

Se ci sono (a) osservazioni originali a[0],…,a[|a|1] nel cluster (a) e (b) oggetti originali b[0],…,b[|b|1] nel cluster ( b), quindi dobbiamo calcolare la distanza tra due cluster (a) e (b) per combinarli (b). Diciamo che c'è un punto (d) che non è stato assegnato a nessuno dei cluster. Dovremo capire quanto dista il cluster (a) dal cluster (d) e il cluster (b) dal cluster (d).

I cluster ora contengono tipicamente più punti, rendendo necessario un metodo diverso per calcolare la matrice della distanza. Il metodo con cui viene calcolata la distanza tra i cluster, o la distanza da punto a cluster, è determinato dal collegamento. Di seguito sono riportati alcuni dei meccanismi di collegamento più comunemente utilizzati:

Collegamento unico — Le distanze tra i membri più simili vengono calcolate per ciascuna coppia di cluster e i cluster vengono quindi uniti in base alla distanza più breve.

Collegamento medio — Viene calcolata la distanza tra tutti i membri di un cluster e tutti i membri di un altro cluster. Successivamente, la media di queste distanze viene utilizzata per determinare quali cluster verranno uniti.

Collegamento completo — Per ogni coppia di cluster, vengono calcolate le distanze tra i membri più dissimili e i cluster vengono quindi uniti in base alla distanza più breve.

Collegamento mediano — Usiamo la distanza mediana invece della distanza media in modo simile al collegamento medio.

Collegamento di reparto — Determina la distanza tra i cluster utilizzando il metodo dell'analisi della varianza.

Collegamento centroide — Il baricentro di ciascun cluster viene calcolato calcolando la media di tutti i punti assegnati al cluster e la distanza tra i cluster viene quindi calcolata utilizzando questo centroide.

Calcolo di distanza

Esistono più approcci per calcolare la distanza tra due o più cluster, con la distanza euclidea che è il più popolare. Anche altre metriche di distanza, come Minkowski, City Block, Hamming, Jaccard e Chebyshev, possono essere utilizzate con il clustering gerarchico. Diverse metriche di distanza hanno un impatto sul clustering gerarchico, come mostrato nella Figura 2.

calcolo della distanza

Dendrogramma

La relazione tra gli oggetti in uno spazio delle caratteristiche è rappresentata da un dendrogramma. In uno spazio delle caratteristiche, viene utilizzato per mostrare la distanza tra ciascuna coppia di oggetti uniti in sequenza. I dendrogrammi vengono spesso utilizzati per esaminare i cluster gerarchici prima di decidere il numero appropriato di cluster per il set di dati. La distanza del dendrogramma è la distanza tra due cluster quando si combinano. La distanza del dendrogramma determina se due o più cluster sono disgiunti o possono essere uniti per formare un unico cluster.

Esempio

Ora esaminiamo esempi che utilizzano Python per dimostrare il modello di clustering gerarchico. Abbiamo 200 dati dei clienti del centro commerciale nel nostro dataset. L'ID cliente, il genere, l'età, il reddito annuo e il punteggio di spesa di ciascun cliente sono tutti inclusi nel frame di dati. L'importo calcolato per i punteggi di spesa di ciascuno dei suoi clienti si basa su diversi criteri, come il loro reddito, il numero di volte alla settimana che visitano il centro commerciale e il denaro speso per un anno. Questo punteggio varia da 1 a 100. Poiché non conosciamo le risposte, un problema aziendale diventa un problema di clustering.

#1 Importazione delle librerie
importa numpy come np importa matplotlib.pyplot come plt importa panda come pd
#2 Importazione del set di dati Mall_Customers da parte dei panda
dataset = pd.read_csv('Mall_Customers.csv') X = dataset.iloc[:, [3,4]].values

Questo nuovo passaggio nel clustering gerarchico comporta anche la determinazione del numero ottimale di cluster. Questa volta non useremo il metodo del gomito. Useremo il dendrogramma.

#3 Utilizzo del dendrogramma per trovare il numero ottimale di cluster. # La prima cosa che faremo è importare la libreria scipy. scipy è una libreria # Python open source che contiene strumenti per eseguire il clustering gerarchico e la creazione di dendrogrammi. # Importa solo lo strumento necessario. import scipy.cluster.hierarchy come sch 
#Creiamo una variabile dendrogramma # linkage è in realtà l'algoritmo stesso del clustering gerarchico e quindi in #linkage dobbiamo specificare su quali dati applichiamo e ci impegniamo. Questo è il set di dati X dendrogram = sch.dendrogram(sch.linkage(X, method = "ward")) plt.title('Dendrogram') plt.xlabel('Customers') plt.ylabel('Euclidean distances') plt. mostrare()

Il metodo Ward è un metodo che tenta di ridurre la varianza all'interno di ciascun cluster. È quasi lo stesso di quando abbiamo usato K-mean per ridurre al minimo il wcss per tracciare il nostro grafico del metodo del gomito; l'unica differenza è che invece di wcss, stiamo riducendo al minimo le varianti all'interno del cluster. All'interno di ogni cluster, questa è la varianza. Il dendrogramma è mostrato di seguito.

dendogramma

I clienti sono rappresentati sull'asse x e la distanza euclidea tra i cluster è rappresentata sull'asse y. Come facciamo a capire il miglior numero di cluster in base a questo diagramma? Vogliamo trovare la distanza verticale più lunga possibile senza attraversare linee orizzontali, che è la linea incorniciata di rosso nel diagramma sopra. Contiamo le linee sul diagramma e scopriamo quanti cluster sono i migliori. Per questo set di dati, il numero del cluster sarà 5.

#4 Adattamento del clustering gerarchico al dataset Mall_Customes # Esistono due algoritmi per il clustering gerarchico: Clustering gerarchico agglomerato e # Clustering gerarchico divisivo. Scegliamo la distanza euclidea e il metodo ward per la nostra # classe di algoritmi da sklearn.cluster import AgglomerativeClustering hc = AgglomerativeClustering(n_clusters = 5, affinity = 'euclidean', linkage ='ward') # Proviamo ad adattare l'algoritmo di clustering gerarchico al set di dati X durante la creazione del vettore # clusters che dice per ogni cliente a quale cluster appartiene il cliente. y_hc=hc.fit_predict(X)
# 5 Visualizzazione dei cluster. Questo codice è simile al codice di visualizzazione k-means. #Sostituiamo solo il nome del vettore y_kmeans con y_hc per il clustering gerarchico plt.scatter(X[y_hc==0, 0], X[y_hc==0, 1], s=100, c='red', label = 'Cluster 1') plt.scatter(X[y_hc==1, 0], X[y_hc==1, 1], s=100, c='blue', label ='Cluster 2') plt.scatter( X[y_hc==2, 0], X[y_hc==2, 1], s=100, c='verde', label ='Cluster 3') plt.scatter(X[y_hc==3, 0] , X[y_hc==3, 1], s=100, c='ciano', label ='Cluster 4') plt.scatter(X[y_hc==4, 0], X[y_hc==4, 1 ], s=100, c='magenta', label ='Cluster 5') plt.title('Clusters of Customers (Hierarchical Clustering Model)') plt.xlabel('Annual Income(k$)') plt.ylabel ('Punteggio spesa(1-100') plt.show()
grappoli | Raggruppamento gerarchico
Cluster1 (rosso), Cluster2 (blu), Cluster3 (verde), Cluster4 (ciano), Cluster5 (magenta)

Questi cluster possono essere considerati il ​​segmento di clientela del centro commerciale.

Questo è tutto ciò che c'è da fare per un modello di clustering gerarchico standard. Il set di dati e tutti i codici sono disponibili nella sezione Github.

Conclusione

In qualsiasi esercizio di clustering, determinare il numero di cluster è un processo che richiede tempo. Poiché il lato commerciale dell'attività è più interessato all'estrazione di significato da questi gruppi, è fondamentale visualizzare i cluster in due dimensioni e vedere se sono distinti. PCA o Analisi fattoriale possono essere utilizzati per raggiungere questo obiettivo. Questo è un metodo comune per presentare i risultati finali ai vari stakeholder, rendendo più facile per tutti consumare l'output.

EndNote

Grazie per aver letto!
Spero che l'articolo ti sia piaciuto e che tu abbia aumentato le tue conoscenze.
Per favore sentiti libero di contattarmi on E-mail
Qualcosa non menzionato o vuoi condividere i tuoi pensieri? Sentiti libero di commentare qui sotto e ti risponderò.

L'autore

Hardikkumar M. Dhaduk
Analista dei dati | Specialista in analisi dei dati digitali | Studente di scienza dei dati
Connettiti con me su LinkedIn
Connettiti con me su Github

I media mostrati in questo articolo non sono di proprietà di Analytics Vidhya e vengono utilizzati a discrezione dell'autore.

Fonte: https://www.analyticsvidhya.com/blog/2021/08/hierarchical-clustering-algorithm-python/

Timestamp:

Di più da Analisi Vidhya