Algoritm de clustere ierarhic Python!

Nodul sursă: 1055669

Acest articol a fost publicat ca parte a Blogathon Data Science

Introducere

În acest articol, vom analiza o abordare diferită a grupării K Means numită Clustering ierarhic. În comparație cu K Means sau K Mode, Clusteringul ierarhic are un algoritm de bază diferit pentru modul în care funcționează mecanismul de clustering. Agruparea ierarhică folosește tehnici de aglomerare sau divizare, în timp ce K Means utilizează o combinație de distanță centroid și euclidiană pentru a forma clustere. Dendrogramele pot fi folosite pentru a vizualiza clustere în clustering ierarhic, ceea ce poate ajuta la o mai bună interpretare a rezultatelor prin taxonomii semnificative. Nu trebuie să specificăm numărul de clustere atunci când facem o dendrogramă.

Aici folosim Python pentru a explica modelul de grupare ierarhică. Avem 200 de date despre clienții mall-urilor în setul nostru de date. ID-ul clientului, genul, vârsta, venitul anual și scorul de cheltuieli ale fiecărui client sunt toate incluse în cadrul de date. Suma calculată pentru fiecare dintre scorurile de cheltuieli ale clienților lor se bazează pe mai multe criterii, cum ar fi venitul lor, numărul de ori pe săptămână în care vizitează mall-ul și suma de bani pe care au cheltuit-o într-un an. Acest scor variază de la 1 la 100. Deoarece nu știm răspunsurile, o problemă de afaceri devine o problemă de clustering. Categoriile finale ale datelor ne sunt necunoscute. Drept urmare, scopul nostru este să descoperim câteva grupuri de clienți necunoscute anterior.

Dar mai întâi, ne uităm la câțiva termeni importanți ai grupării ierarhice.

Termeni importanți în clusterizarea ierarhică

Metode de conectare

Dacă există (a) observații originale a[0],…,a[|a|1] în cluster (a) și (b) obiecte originale b[0],…,b[|b|1] în cluster ( b), atunci trebuie să calculăm distanța dintre două clustere (a) și (b) pentru a le combina (b). Să presupunem că există un punct (d) care nu a fost atribuit niciunui cluster. Va trebui să ne dăm seama cât de departe este clusterul (a) de cluster (d) și clusterul (b) de cluster (d).

Clusterele conțin acum de obicei mai multe puncte, necesitând o metodă diferită pentru calcularea matricei distanțelor. Metoda prin care se calculează distanța dintre clustere sau distanța punct la cluster este determinată de legătură. Următoarele sunt câteva dintre cele mai frecvent utilizate mecanisme de legătură:

Legătura unică — Distanțele dintre cei mai asemănători membri sunt calculate pentru fiecare pereche de clustere, iar clusterele sunt apoi îmbinate pe baza celei mai scurte distanțe.

Legătura medie — Se calculează distanța dintre toți membrii unui cluster și toți membrii altui cluster. După aceea, media acestor distanțe este utilizată pentru a determina ce clustere vor fuziona.

Legătura completă — Pentru fiecare pereche de clustere, se calculează distanțele dintre cei mai diferiți membri, iar clusterele sunt apoi îmbinate pe baza distanței cele mai scurte.

Legătura mediană — Folosim distanța medie în loc de distanța medie într-un mod similar cu legătura medie.

Legătura secției — Determină distanța dintre clustere folosind metoda analizei varianței.

Legătura centroidă — Centroidul fiecărui cluster este calculat prin media tuturor punctelor alocate clusterului, iar distanța dintre clustere este apoi calculată folosind acest centroid.

Calculul distantei

Există mai multe abordări pentru calcularea distanței dintre două sau mai multe clustere, distanța euclidiană fiind cea mai populară. Alte valori ale distanței, cum ar fi Minkowski, City Block, Hamming, Jaccard și Chebyshev, pot fi utilizate și cu gruparea ierarhică. Diferitele metrici ale distanței au un impact asupra grupării ierarhice, așa cum se arată în Figura 2.

calculul distanței

Dendrograma

Relația dintre obiectele dintr-un spațiu caracteristic este reprezentată de o dendrogramă. Într-un spațiu de caracteristici, este folosit pentru a afișa distanța dintre fiecare pereche de obiecte îmbinate secvenţial. Dendrogramele sunt frecvent utilizate pentru a examina clusterele ierarhice înainte de a decide asupra numărului adecvat de clustere pentru setul de date. Distanța dendrogramei este distanța dintre două grupuri atunci când se combină. Distanța dendrogramei determină dacă două sau mai multe clustere sunt disjunse sau pot fi unite pentru a forma un singur cluster.

Exemplu

Acum ne uităm la exemple folosind Python pentru a demonstra modelul de clusterizare ierarhică. Avem 200 de date despre clienții din mall-ul nostru date CCD. ID-ul clientului, genul, vârsta, venitul anual și scorul de cheltuieli ale fiecărui client sunt toate incluse în cadrul de date. Suma calculată pentru fiecare dintre scorurile de cheltuieli ale clienților lor se bazează pe mai multe criterii, cum ar fi venitul lor, de câte ori pe săptămână vizitează mall-ul și banii pe care i-au cheltuit pentru un an. Acest scor variază de la 1 la 100. Deoarece nu știm răspunsurile, o problemă de afaceri devine o problemă de clustering.

# 1 Importul bibliotecilor
import numpy ca np import matplotlib.pyplot ca plt import panda ca pd
#2 Importul setului de date Mall_Customers de către panda
set de date = pd.read_csv('Mall_Customers.csv') X = set de date.iloc[:, [3,4]].valori

Acest nou pas în gruparea ierarhică implică și determinarea numărului optim de clustere. Nu vom folosi metoda cotului de data aceasta. Vom folosi dendrograma.

#3 Utilizarea dendrogramei pentru a găsi numărul optim de clustere. # Primul lucru pe care îl vom face este să importam biblioteca scipy. scipy este o bibliotecă open source # Python care conține instrumente pentru a face clustering ierarhic și a construi dendrograme. # Importați doar instrumentul necesar. import scipy.cluster.hierarchy ca sch 
#Să creăm o variabilă dendrogramă # linkage este de fapt algoritmul însuși al grupării ierarhice și apoi în #linkage trebuie să specificăm pe ce date aplicăm și angajăm. Acesta este un set de date X dendrogram = sch.dendrogram(sch.linkage(X, method = "ward")) plt.title('Dendrogram') plt.xlabel('Customers') plt.ylabel('Euclidean distances') plt. spectacol()

Metoda Ward este o metodă care încearcă să reducă varianța în cadrul fiecărui cluster. Este aproape la fel ca atunci când am folosit K-means pentru a minimiza wcss pentru a reprezenta graficul nostru cu metoda cotului; singura diferență este că, în loc de wcss, minimizăm variantele din cadrul clusterului. În cadrul fiecărui grup, aceasta este varianța. Dendrograma este prezentată mai jos.

dendogramă

Clienții sunt reprezentați pe axa x, iar distanța euclidiană dintre clustere este reprezentată pe axa y. Cum ne dăm seama cel mai bun număr de clustere pe baza acestei diagrame? Vrem să găsim cea mai mare distanță verticală pe care o putem fără să traversăm nicio linie orizontală, care este linia cu cadru roșu din diagrama de mai sus. Să numărăm liniile din diagramă și să ne dăm seama câte grupuri sunt cele mai bune. Pentru acest set de date, numărul clusterului va fi 5.

#4 Potrivirea grupării ierarhice la setul de date Mall_Customes # Există doi algoritmi pentru gruparea ierarhică: Clustering ierarhic aglomerativ și # Clustering ierarhic diviziv. Alegem metoda euclidiană de distanță și ward pentru # clasa noastră de algoritm din sklearn.cluster import AgglomerativeClustering hc = AgglomerativeClustering(n_clusters = 5, affinity = 'euclidean', linkage ='ward') # Să încercăm să potrivim algoritmul de grupare ierarhică la setul de date X în timp ce se creează vectorul # clustere care spune pentru fiecare client cărui cluster îi aparține clientul. y_hc=hc.fit_predict(X)
# 5 Vizualizarea clusterelor. Acest cod este similar cu codul de vizualizare k-means. #Înlocuim doar numele vectorului y_kmeans cu y_hc pentru gruparea ierarhică 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='cyan', 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 (Hierarhical Clustering Model)') plt.xlabel('Annual Venit(k$)') plt.ylabel („Scor de cheltuieli(1-100”) plt.show()
clustere | Clustering ierarhic
Cluster1 (Roșu), Cluster2 (Albastru), Cluster3 (Verde), Cluster4 (Cyan), Cluster5 (Magenta)

Aceste grupuri pot fi considerate ca segmentul de clienți al mall-ului.

Asta este tot ce există într-un model standard de clusterizare ierarhică. Setul de date, precum și toate codurile sunt disponibile în secțiunea Github.

Concluzie

În orice exercițiu de grupare, determinarea numărului de clustere este un proces care necesită timp. Deoarece partea comercială a afacerii este mai preocupată de extragerea sensului din aceste grupuri, este crucial să vizualizați clusterele în două dimensiuni și să vedeți dacă sunt distincte. PCA sau analiza factorială poate fi utilizată pentru a atinge acest obiectiv. Aceasta este o metodă obișnuită de prezentare a rezultatelor finale către diferite părți interesate, ceea ce face mai ușor pentru toată lumea să consume rezultatul.

EndNote

Mulțumesc că ați citit!
Sper că ți-a plăcut articolul și ți-a crescut cunoștințele.
Vă rugăm să nu ezitați să mă contactați on E-mail
Ceva care nu a fost menționat sau doriți să vă împărtășiți gândurile? Simțiți-vă liber să comentați mai jos și vă voi contacta.

Despre autor

Hardikkumar M. Dhaduk
Analist de date | Specialist în analiza datelor digitale | Student în știința datelor
Conectează-mă cu mine LinkedIn
Conectează-mă cu mine Github

Mediile prezentate în acest articol nu sunt deținute de Analytics Vidhya și sunt utilizate la discreția autorului.

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

Timestamp-ul:

Mai mult de la Analize Vidhya