Gruparea ierarhică este un alt algoritm de învățare automată nesupravegheat, care este utilizat pentru a grupa seturile de date neetichetate într-un cluster și este cunoscut și ca analiza clusterului ierarhic sau HCA.
În acest algoritm, dezvoltăm ierarhia clusterelor sub forma unui arbore, iar această structură în formă de arbore este cunoscută sub numele de dendrograma .
Uneori, rezultatele grupării K-means și ale grupării ierarhice pot arăta similare, dar ambele diferă în funcție de modul în care funcționează. Deoarece nu există nicio cerință de a predetermina numărul de clustere așa cum am făcut în algoritmul K-Means.
Tehnica grupării ierarhice are două abordări:
De ce clustering ierarhic?
Cum avem deja altele gruparea algoritmi precum K-Means Clustering , atunci de ce avem nevoie de clustering ierarhic? Deci, așa cum am văzut în gruparea K-means, există unele provocări cu acest algoritm, care sunt un număr predeterminat de clustere și încearcă întotdeauna să creeze clustere de aceeași dimensiune. Pentru a rezolva aceste două provocări, putem opta pentru algoritmul de clustering ierarhic deoarece, în acest algoritm, nu este nevoie să avem cunoștințe despre numărul predefinit de clustere.
În acest subiect, vom discuta despre algoritmul de clustering ierarhic aglomerativ.
Gruparea ierarhică aglomerativă
Algoritmul de clustering ierarhic aglomerativ este un exemplu popular de HCA. Pentru a grupa seturile de date în clustere, urmează Abordarea de jos în sus . Înseamnă, acest algoritm consideră fiecare set de date ca un singur cluster la început și apoi începe să combine cea mai apropiată pereche de clustere. Face acest lucru până când toate clusterele sunt îmbinate într-un singur cluster care conține toate seturile de date.
Această ierarhie de clustere este reprezentată sub forma dendrogramei.
Cum funcționează clusteringul ierarhic aglomerativ?
Funcționarea algoritmului AHC poate fi explicată folosind pașii de mai jos:
charat java
Notă: Pentru a înțelege mai bine gruparea ierarhică, se recomandă să aruncați o privire asupra grupării k-means
Măsurați distanța dintre două grupuri
După cum am văzut, cel distanta cea mai apropiata între cele două clustere este crucială pentru gruparea ierarhică. Există diferite moduri de a calcula distanța dintre două clustere, iar aceste moduri decid regula pentru grupare. Aceste măsuri sunt numite Metode de legare . Unele dintre metodele populare de conectare sunt prezentate mai jos:
Din abordările de mai sus, putem aplica oricare dintre ele în funcție de tipul de problemă sau de cerința afacerii.
Activarea dendrogramei în clustering ierarhic
Dendrograma este o structură arborescentă care este utilizată în principal pentru a stoca fiecare pas ca memorie pe care o realizează algoritmul HC. În graficul dendrogramei, axa Y arată distanțele euclidiene dintre punctele de date, iar axa x arată toate punctele de date ale setului de date dat.
Funcționarea dendrogramei poate fi explicată folosind diagrama de mai jos:
În diagrama de mai sus, partea din stânga arată cum sunt create clusterele în gruparea aglomerativă, iar partea din dreapta arată dendrograma corespunzătoare.
- După cum am discutat mai sus, în primul rând, punctele de date P2 și P3 se combină împreună și formează un cluster, în mod corespunzător este creată o dendrogramă, care conectează P2 și P3 cu o formă dreptunghiulară. Înălțimea este decisă în funcție de distanța euclidiană dintre punctele de date.
- În pasul următor, P5 și P6 formează un cluster și este creată dendrograma corespunzătoare. Este mai mare decât cea precedentă, deoarece distanța euclidiană dintre P5 și P6 este puțin mai mare decât P2 și P3.
- Din nou, sunt create două dendrograme noi care combină P1, P2 și P3 într-o dendrogramă și P4, P5 și P6, într-o altă dendrogramă.
- În cele din urmă, este creată dendrograma finală care combină toate punctele de date împreună.
Putem tăia structura arborelui dendrogramei la orice nivel, conform cerințelor noastre.
Implementarea Python a grupării ierarhice aglomerative
Acum vom vedea implementarea practică a algoritmului de clustering ierarhic aglomerativ folosind Python. Pentru a implementa acest lucru, vom folosi aceeași problemă de set de date pe care am folosit-o în subiectul anterior al grupării K-means, astfel încât să putem compara cu ușurință ambele concepte.
Setul de date conține informațiile clienților care au vizitat un mall pentru cumpărături. Deci, proprietarul mall-ului dorește să găsească anumite modele sau un anumit comportament al clienților săi folosind informațiile setului de date.
Pași pentru implementarea AHC folosind Python:
Pașii de implementare vor fi aceiași ca și gruparea k-means, cu excepția unor modificări, cum ar fi metoda de a găsi numărul de clustere. Mai jos sunt pașii:
Etape de preprocesare a datelor:
În acest pas, vom importa bibliotecile și seturile de date pentru modelul nostru.
# Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
Liniile de cod de mai sus sunt folosite pentru a importa bibliotecile pentru a efectua sarcini specifice, cum ar fi numpy pentru operatiile matematice, matplotlib pentru desenarea graficelor sau a diagramei de dispersie și panda pentru importarea setului de date.
10 din 100
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
După cum sa discutat mai sus, am importat același set de date de Mall_Customers_data.csv, așa cum am făcut în gruparea k-means. Luați în considerare rezultatul de mai jos:
extragerea datelor
Aici vom extrage doar matricea caracteristicilor deoarece nu avem alte informații despre variabila dependentă. Codul este dat mai jos:
x = dataset.iloc[:, [3, 4]].values
Aici am extras doar 3 și 4 coloane, deoarece vom folosi o diagramă 2D pentru a vedea clusterele. Deci, luăm în considerare scorul anual al veniturilor și cheltuielilor ca matrice de caracteristici.
Pasul 2: Găsirea numărului optim de clustere folosind Dendrogram
Acum vom găsi numărul optim de clustere folosind Dendrograma pentru modelul nostru. Pentru aceasta, vom folosi scipy bibliotecă deoarece oferă o funcție care va returna direct dendrograma pentru codul nostru. Luați în considerare rândurile de cod de mai jos:
#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()
În liniile de cod de mai sus, am importat ierarhie modulul bibliotecii scipy. Acest modul ne oferă o metodă shc.denrogram(), care ia legătură () ca parametru. Funcția de legătură este folosită pentru a defini distanța dintre două grupuri, așa că aici am trecut x (matricea caracteristicilor) și metoda ' secție ,' metoda populară de legătură în clustering ierarhic.
Liniile de cod rămase sunt pentru a descrie etichetele pentru diagrama dendrogramei.
Ieșire:
Prin executarea liniilor de cod de mai sus, vom obține rezultatul de mai jos :
Folosind această Dendrogramă, vom determina acum numărul optim de clustere pentru modelul nostru. Pentru aceasta, vom găsi distanta verticala maxima care nu taie nicio bară orizontală. Luați în considerare diagrama de mai jos:
În diagrama de mai sus, am arătat distanțele verticale care nu își taie barele orizontale. După cum putem vizualiza, 4thdistanța este cea mai mare, așa că în funcție de aceasta, numărul de clustere va fi 5 (liniile verticale din acest interval). Putem lua și 2ndnumăr, deoarece este aproximativ egal cu 4thdistanță, dar vom lua în considerare cele 5 clustere pentru că la fel am calculat în algoritmul K-means.
Deci, numărul optim de clustere va fi 5 , și vom antrena modelul în pasul următor, folosind același.
Pasul 3: Antrenarea modelului de clustering ierarhic
Deoarece știm numărul optim necesar de clustere, acum ne putem antrena modelul. Codul este dat mai jos:
#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)
În codul de mai sus, am importat AgglomerativeClustering clasa de modul cluster al bibliotecii scikit Learn.
Apoi am creat obiectul acestei clase numit ca hc. Clasa AgglomerativeClustering ia următorii parametri:
În ultima linie, am creat variabila dependentă y_pred pentru a se potrivi sau a antrena modelul. Antrenează nu numai modelul, ci returnează și clusterele cărora le aparține fiecare punct de date.
După executarea liniilor de cod de mai sus, dacă trecem prin opțiunea de explorare a variabilelor din IDE-ul nostru Sypder, putem verifica variabila y_pred. Putem compara setul de date original cu variabila y_pred. Luați în considerare imaginea de mai jos:
După cum putem vedea în imaginea de mai sus, y_pred arată valoarea clusterelor, ceea ce înseamnă că id-ul clientului 1 aparține celui 5thcluster (deoarece indexarea începe de la 0, deci 4 înseamnă 5thcluster), id-ul clientului 2 aparține lui 4thcluster și așa mai departe.
Pasul 4: Vizualizarea clusterelor
Pe măsură ce ne-am antrenat modelul cu succes, acum putem vizualiza clusterele corespunzătoare setului de date.
Aici vom folosi aceleași linii de cod ca și în gruparea k-means, cu excepția unei modificări. Aici nu vom reprezenta un grafic centroidul pe care l-am făcut în k-means, deoarece aici am folosit dendrograma pentru a determina numărul optim de clustere. Codul este dat mai jos:
#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()
Ieșire: prin executarea liniilor de cod de mai sus, vom obține rezultatul de mai jos:
șir la char