Il clustering gerarchico è un altro algoritmo di apprendimento automatico non supervisionato, utilizzato per raggruppare i set di dati senza etichetta in un cluster e noto anche come analisi dei cluster gerarchici o HCA.
In questo algoritmo sviluppiamo la gerarchia dei cluster sotto forma di albero e questa struttura a forma di albero è nota come dendrogramma .
A volte i risultati del clustering K-means e del clustering gerarchico possono sembrare simili, ma entrambi differiscono a seconda di come funzionano. Poiché non è necessario predeterminare il numero di cluster come abbiamo fatto nell'algoritmo K-Means.
La tecnica del clustering gerarchico prevede due approcci:
Perché il clustering gerarchico?
Come ne abbiamo già altri raggruppamento algoritmi come K-significa clustering , allora perché abbiamo bisogno del clustering gerarchico? Quindi, come abbiamo visto nel clustering K-mean, ci sono alcune sfide con questo algoritmo, che sono un numero predeterminato di cluster, e cerca sempre di creare cluster della stessa dimensione. Per risolvere queste due sfide, possiamo optare per l'algoritmo di clustering gerarchico perché, in questo algoritmo, non è necessario conoscere il numero predefinito di cluster.
In questo argomento discuteremo dell'algoritmo di clustering gerarchico agglomerativo.
Cluster gerarchico agglomerativo
L'algoritmo di clustering gerarchico agglomerativo è un esempio popolare di HCA. Per raggruppare i set di dati in cluster, segue il approccio dal basso verso l’alto . Ciò significa che questo algoritmo considera all'inizio ciascun set di dati come un singolo cluster, quindi inizia a combinare insieme la coppia di cluster più vicina. Lo fa finché tutti i cluster non vengono uniti in un unico cluster che contiene tutti i set di dati.
Questa gerarchia di cluster è rappresentata sotto forma di dendrogramma.
monitor a tubo catodico
Come funziona il clustering gerarchico agglomerativo?
Il funzionamento dell'algoritmo AHC può essere spiegato utilizzando i passaggi seguenti:
Nota: per comprendere meglio il clustering gerarchico, si consiglia di dare un'occhiata al clustering k-means
Misurare la distanza tra due ammassi
Come abbiamo visto, il distanza più vicina tra i due cluster è cruciale per il clustering gerarchico. Esistono vari modi per calcolare la distanza tra due cluster e questi modi determinano la regola per il clustering. Queste misure sono chiamate Metodi di collegamento . Alcuni dei metodi di collegamento più diffusi sono riportati di seguito:
Dagli approcci sopra indicati, possiamo applicarne uno qualsiasi in base al tipo di problema o esigenza aziendale.
Woking del dendrogramma nel clustering gerarchico
Il dendrogramma è una struttura ad albero che viene utilizzata principalmente per archiviare ogni passaggio come memoria eseguita dall'algoritmo HC. Nel grafico del dendrogramma, l'asse Y mostra le distanze euclidee tra i punti dati e l'asse x mostra tutti i punti dati del set di dati specificato.
espressione regolare Java $
Il funzionamento del dendrogramma può essere spiegato utilizzando il diagramma seguente:
Nel diagramma sopra, la parte sinistra mostra come vengono creati i cluster nel clustering agglomerativo e la parte destra mostra il dendrogramma corrispondente.
- Come abbiamo discusso in precedenza, in primo luogo, i punti dati P2 e P3 si combinano insieme e formano un cluster, corrispondentemente viene creato un dendrogramma, che collega P2 e P3 con una forma rettangolare. L'altezza viene decisa in base alla distanza euclidea tra i punti dati.
- Nella fase successiva, P5 e P6 formano un cluster e viene creato il dendrogramma corrispondente. È più alta della precedente, poiché la distanza euclidea tra P5 e P6 è leggermente maggiore di quella tra P2 e P3.
- Ancora una volta, vengono creati due nuovi dendrogrammi che combinano P1, P2 e P3 in un dendrogramma e P4, P5 e P6 in un altro dendrogramma.
- Alla fine, viene creato il dendrogramma finale che combina insieme tutti i punti dati.
Possiamo tagliare la struttura ad albero del dendrogramma a qualsiasi livello secondo le nostre esigenze.
Implementazione Python del clustering gerarchico agglomerativo
Ora vedremo l'implementazione pratica dell'algoritmo di clustering gerarchico agglomerativo utilizzando Python. Per implementare ciò, utilizzeremo lo stesso problema del set di dati che abbiamo utilizzato nell'argomento precedente del clustering K-means in modo da poter confrontare facilmente entrambi i concetti.
Il set di dati contiene le informazioni sui clienti che hanno visitato un centro commerciale per fare acquisti. Pertanto, il proprietario del centro commerciale vuole trovare alcuni modelli o comportamenti particolari dei suoi clienti utilizzando le informazioni del set di dati.
Passaggi per l'implementazione di AHC utilizzando Python:
I passaggi per l'implementazione saranno gli stessi del clustering k-means, ad eccezione di alcune modifiche come il metodo per trovare il numero di cluster. Di seguito sono riportati i passaggi:
Passaggi di pre-elaborazione dei dati:
In questo passaggio importeremo le librerie e i set di dati per il nostro modello.
minimo Massimo
# Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
Le righe di codice sopra riportate vengono utilizzate per importare le librerie per eseguire attività specifiche, ad esempio insensato per le operazioni matematiche, matplotlib per disegnare i grafici o il grafico a dispersione, e panda per importare il set di dati.
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
Come discusso in precedenza, abbiamo importato lo stesso set di dati di Mall_Customers_data.csv, come abbiamo fatto nel clustering k-means. Considera l'output seguente:
Qui estrarremo solo la matrice delle caratteristiche poiché non disponiamo di ulteriori informazioni sulla variabile dipendente. Il codice è riportato di seguito:
x = dataset.iloc[:, [3, 4]].values
Qui abbiamo estratto solo 3 e 4 colonne poiché utilizzeremo un grafico 2D per vedere i cluster. Pertanto, stiamo considerando il punteggio di reddito e spesa annuale come matrice delle caratteristiche.
Passaggio 2: trovare il numero ottimale di cluster utilizzando il dendrogramma
Ora troveremo il numero ottimale di cluster utilizzando il Dendrogramma per il nostro modello. Per questo utilizzeremo scipy libreria in quanto fornisce una funzione che restituirà direttamente il dendrogramma per il nostro codice. Considera le seguenti righe di codice:
#Finding the optimal number of clusters using the dendrogram import scipy.cluster.hierarchy as shc dendro = shc.dendrogram(shc.linkage(x, method='ward')) mtp.title('Dendrogrma Plot') mtp.ylabel('Euclidean Distances') mtp.xlabel('Customers') mtp.show()
Nelle righe di codice sopra, abbiamo importato il file gerarchia modulo della libreria scipy. Questo modulo ci fornisce un metodo shc.denrogramma(), che prende il collegamento() come parametro. La funzione di collegamento viene utilizzata per definire la distanza tra due cluster, quindi qui abbiamo passato x(matrice di caratteristiche) e il metodo ' reparto ,' il popolare metodo di collegamento nel clustering gerarchico.
Le restanti righe di codice servono a descrivere le etichette per il grafico del dendrogramma.
Produzione:
Eseguendo le righe di codice sopra, otterremo l'output seguente :
Utilizzando questo dendrogramma, determineremo ora il numero ottimale di cluster per il nostro modello. Per questo troveremo il distanza verticale massima che non taglia nessuna barra orizzontale. Considera il diagramma seguente:
Nel diagramma sopra, abbiamo mostrato le distanze verticali che non tagliano le barre orizzontali. Come possiamo visualizzare, il 4thla distanza sembra massima, quindi in base a questo, il numero di cluster sarà 5 (le linee verticali in questo intervallo). Possiamo anche prendere il 2ndnumero poiché equivale approssimativamente a 4thdistanza, ma considereremo i 5 cluster perché sono gli stessi che abbiamo calcolato nell'algoritmo K-medie.
stringa in carattere
Quindi, il numero ottimale di cluster sarà 5 e addestreremo il modello nel passaggio successivo, utilizzando lo stesso.
Passaggio 3: addestramento del modello di clustering gerarchico
Poiché conosciamo il numero ottimale di cluster richiesto, ora possiamo addestrare il nostro modello. Il codice è riportato di seguito:
#training the hierarchical model on dataset from sklearn.cluster import AgglomerativeClustering hc= AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward') y_pred= hc.fit_predict(x)
Nel codice sopra, abbiamo importato il file Clustering agglomerativo classe del modulo cluster della libreria scikit learn.
Quindi abbiamo creato l'oggetto di questa classe denominato as h.c. La classe AgglomerativeClustering accetta i seguenti parametri:
Giochi iMessage con Android
Nell'ultima riga abbiamo creato la variabile dipendente y_pred per adattare o addestrare il modello. Non solo addestra il modello, ma restituisce anche i cluster a cui appartiene ciascun punto dati.
Dopo aver eseguito le righe di codice sopra, se utilizziamo l'opzione variabile explorer nel nostro IDE Sypder, possiamo controllare la variabile y_pred. Possiamo confrontare il set di dati originale con la variabile y_pred. Considera l'immagine qui sotto:
Come possiamo vedere nell'immagine sopra, il y_pred mostra il valore dei cluster, il che significa che l'ID cliente 1 appartiene al 5thcluster (poiché l'indicizzazione inizia da 0, quindi 4 significa 5thcluster), l'ID cliente 2 appartiene a 4thgrappolo e così via.
Passaggio 4: visualizzazione dei cluster
Poiché abbiamo addestrato con successo il nostro modello, ora possiamo visualizzare i cluster corrispondenti al set di dati.
Qui utilizzeremo le stesse righe di codice usate nel clustering k-means, tranne una modifica. Qui non tracceremo il centroide come abbiamo fatto in k-mean, perché qui abbiamo utilizzato il dendrogramma per determinare il numero ottimale di cluster. Il codice è riportato di seguito:
#visulaizing the clusters mtp.scatter(x[y_pred == 0, 0], x[y_pred == 0, 1], s = 100, c = 'blue', label = 'Cluster 1') mtp.scatter(x[y_pred == 1, 0], x[y_pred == 1, 1], s = 100, c = 'green', label = 'Cluster 2') mtp.scatter(x[y_pred== 2, 0], x[y_pred == 2, 1], s = 100, c = 'red', label = 'Cluster 3') mtp.scatter(x[y_pred == 3, 0], x[y_pred == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4') mtp.scatter(x[y_pred == 4, 0], x[y_pred == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5') mtp.title('Clusters of customers') mtp.xlabel('Annual Income (k$)') mtp.ylabel('Spending Score (1-100)') mtp.legend() mtp.show()
Output: eseguendo le righe di codice sopra, otterremo l'output seguente: