logo

Clustering ierarhic în Machine Learning

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:

    Aglomerativ:Aglomerativ este a de jos în sus abordare, în care algoritmul începe cu luarea tuturor punctelor de date ca clustere unice și fuzionarea lor până când rămâne un cluster.Divizor:Algoritmul divizibil este inversul algoritmului aglomerativ, deoarece este a abordare de sus în jos.

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
    Pasul 1:Creați fiecare punct de date ca un singur cluster. Să presupunem că există N puncte de date, deci și numărul de clustere va fi N.
    Clustering ierarhic în Machine Learning Pasul 2:Luați două puncte de date sau clustere cele mai apropiate și îmbinați-le pentru a forma un singur cluster. Deci, vor exista acum clustere N-1.
    Clustering ierarhic în Machine Learning Pasul 3: Din nou, luați cele mai apropiate două grupuri și îmbinați-le împreună pentru a forma un singur grup. Vor fi N-2 clustere.
    Clustering ierarhic în Machine Learning Pasul-4:Repetați pasul 3 până când a rămas doar un grup. Deci, vom obține următoarele clustere. Luați în considerare imaginile de mai jos:
    Clustering ierarhic în Machine Learning
    Clustering ierarhic în Machine Learning
    Clustering ierarhic în Machine Learning Pasul-5:Odată ce toate clusterele sunt combinate într-un singur cluster mare, dezvoltați dendrograma pentru a împărți clusterele conform problemei.

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:

    Legătura unică:Este cea mai scurtă distanță dintre cele mai apropiate puncte ale clusterelor. Luați în considerare imaginea de mai jos:
    Clustering ierarhic în Machine Learning Legătura completă:Este cea mai îndepărtată distanță dintre cele două puncte ale două grupuri diferite. Este una dintre metodele populare de legătură, deoarece formează grupuri mai strânse decât o singură legătură.
    Clustering ierarhic în Machine Learning Legătura medie:Este metoda de conectare în care distanța dintre fiecare pereche de seturi de date este adunată și apoi împărțită la numărul total de seturi de date pentru a calcula distanța medie dintre două grupuri. Este, de asemenea, una dintre cele mai populare metode de conectare.Legătura centroidă:Este metoda de legătură în care se calculează distanța dintre centroidul clusterelor. Luați în considerare imaginea de mai jos:
    Clustering ierarhic în Machine Learning

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:

Clustering ierarhic în Machine Learning

Î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:

    Preprocesarea datelor Găsirea numărului optim de clustere folosind Dendrogram Antrenarea modelului de clustering ierarhic Vizualizarea clusterelor

Etape de preprocesare a datelor:

În acest pas, vom importa bibliotecile și seturile de date pentru modelul nostru.

    Importul bibliotecilor
 # 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
    Importul setului de date
 # 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
Clustering ierarhic în Machine Learning
    Extragerea matricei de caracteristici

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 :

Clustering ierarhic în Machine Learning

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:

Clustering ierarhic în Machine Learning

Î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_clusters=5: Definește numărul de clustere și am luat aici 5 pentru că este numărul optim de clustere.afinitate='euclidian': este o măsurătoare utilizată pentru a calcula legătura.linkage='ward': Definește criteriile de legătură, aici am folosit legătura „secție”. Această metodă este metoda populară de legătură pe care am folosit-o deja pentru crearea Dendrogramei. Reduce varianța în fiecare cluster.

Î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:

Clustering ierarhic în Machine Learning

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
Clustering ierarhic în Machine Learning