logo

Hijerarhijsko grupiranje u strojno učenje

Hijerarhijsko grupiranje još je jedan nenadzirani algoritam strojnog učenja koji se koristi za grupiranje neoznačenih skupova podataka u klaster, a poznat je i kao hijerarhijska analiza klastera ili HCA.

U ovom algoritmu razvijamo hijerarhiju klastera u obliku stabla, a ta struktura u obliku stabla poznata je kao dendrogram .

Ponekad rezultati klasteriranja K-srednjih vrijednosti i hijerarhijskog grupiranja mogu izgledati slično, ali se oba razlikuju ovisno o tome kako rade. Budući da ne postoji zahtjev za unaprijed određivanjem broja klastera kao što smo to učinili u algoritmu K-Means.

Tehnika hijerarhijskog klasteriranja ima dva pristupa:

    Aglomerativni:Aglomeracija je a odozdo prema gore pristup, u kojem algoritam počinje uzimanjem svih podatkovnih točaka kao pojedinačnih klastera i njihovim spajanjem dok ne ostane jedan klaster.Razdvojni:Razdjelni algoritam je obrnut od aglomerativnog algoritma jer je a pristup odozgo prema dolje.

Zašto hijerarhijsko grupiranje?

Kao što već imamo druge grupiranje algoritmi kao što su K-znači grupiranje , zašto nam je onda potrebno hijerarhijsko grupiranje? Dakle, kao što smo vidjeli u klasteriranju K-srednjih vrijednosti, postoje neki izazovi s ovim algoritmom, a to su unaprijed određeni broj klastera, a on uvijek pokušava stvoriti klastere iste veličine. Kako bismo riješili ova dva izazova, možemo se odlučiti za algoritam hijerarhijskog klasteriranja jer u ovom algoritmu ne moramo imati znanje o unaprijed definiranom broju klastera.

U ovoj temi raspravljat ćemo o aglomerativnom hijerarhijskom algoritmu klasteriranja.

Aglomerativno hijerarhijsko grupiranje

Algoritam aglomerativnog hijerarhijskog klasteriranja popularan je primjer HCA. Za grupiranje skupova podataka u klastere, slijedi pristup odozdo prema gore . To znači da ovaj algoritam svaki skup podataka na početku smatra jednim klasterom, a zatim počinje kombinirati najbliži par klastera. To čini sve dok se svi klasteri ne spoje u jedan klaster koji sadrži sve skupove podataka.

Ova hijerarhija klastera predstavljena je u obliku dendrograma.

Kako funkcionira aglomerativno hijerarhijsko grupiranje?

Rad AHC algoritma može se objasniti pomoću sljedećih koraka:

    Korak 1:Stvorite svaku podatkovnu točku kao jedan klaster. Recimo da postoji N točaka podataka, tako da će broj klastera također biti N.
    Hijerarhijsko grupiranje u strojno učenje Korak 2:Uzmite dvije najbliže podatkovne točke ili klastere i spojite ih u jedan klaster. Dakle, sada će biti N-1 klastera.
    Hijerarhijsko grupiranje u strojno učenje Korak-3: Opet, uzmite dva najbliža skupa i spojite ih u jedan klaster. Bit će N-2 klastera.
    Hijerarhijsko grupiranje u strojno učenje Korak-4:Ponavljajte korak 3 dok ne ostane samo jedan klaster. Dakle, dobit ćemo sljedeće klastere. Razmotrite slike u nastavku:
    Hijerarhijsko grupiranje u strojno učenje
    Hijerarhijsko grupiranje u strojno učenje
    Hijerarhijsko grupiranje u strojno učenje Korak-5:Nakon što se svi klasteri spoje u jedan veliki klaster, razvijte dendrogram da biste podijelili klastere prema problemu.

Napomena: za bolje razumijevanje hijerarhijskog klasteriranja, savjetuje se da pogledate k-srednje klasteriranje

Izmjerite udaljenost između dva grozda

Kao što smo vidjeli, najbliža udaljenost između dva klastera ključna je za hijerarhijsko grupiranje. Postoje različiti načini za izračunavanje udaljenosti između dva klastera, a ti načini određuju pravilo za klasteriranje. Ove mjere su tzv Metode povezivanja . Neke od popularnih metoda povezivanja navedene su u nastavku:

    Jednostruka veza:To je najkraća udaljenost između najbližih točaka klastera. Razmotrite sliku u nastavku:
    Hijerarhijsko grupiranje u strojno učenje Kompletno povezivanje:To je najveća udaljenost između dviju točaka dva različita skupa. To je jedna od popularnih metoda povezivanja jer stvara čvršće klastere nego jednostruko povezivanje.
    Hijerarhijsko grupiranje u strojno učenje Prosječna veza:To je metoda povezivanja u kojoj se udaljenost između svakog para skupova podataka zbraja i zatim dijeli s ukupnim brojem skupova podataka kako bi se izračunala prosječna udaljenost između dva klastera. To je također jedna od najpopularnijih metoda povezivanja.Centroidna veza:To je metoda povezivanja u kojoj se izračunava udaljenost između težišta klastera. Razmotrite sliku u nastavku:
    Hijerarhijsko grupiranje u strojno učenje

Od gore navedenih pristupa, možemo primijeniti bilo koji od njih prema vrsti problema ili poslovnom zahtjevu.

Rad na dendrogramu u hijerarhijskom grupiranju

Dendrogram je struktura nalik stablu koja se uglavnom koristi za pohranjivanje svakog koraka kao memorije koju izvodi HC algoritam. Na dijagramu dendrograma, Y-os prikazuje euklidske udaljenosti između podatkovnih točaka, a x-os prikazuje sve podatkovne točke zadanog skupa podataka.

Rad dendrograma može se objasniti pomoću dijagrama u nastavku:

python ili
Hijerarhijsko grupiranje u strojno učenje

Na gornjem dijagramu lijevi dio prikazuje kako nastaju klasteri u aglomerativnom klasteriranju, a desni dio prikazuje odgovarajući dendrogram.

  • Kao što smo gore spomenuli, prvo se podatkovne točke P2 i P3 kombiniraju i tvore klaster, sukladno tome nastaje dendrogram koji povezuje P2 i P3 s pravokutnim oblikom. Visina se određuje prema euklidskoj udaljenosti između podatkovnih točaka.
  • U sljedećem koraku, P5 i P6 formiraju klaster, te se kreira odgovarajući dendrogram. Veći je od prethodnog, jer je euklidska udaljenost između P5 i P6 malo veća od P2 i P3.
  • Ponovno se stvaraju dva nova dendrograma koji kombiniraju P1, P2 i P3 u jednom dendrogramu, te P4, P5 i P6 u drugom dendrogramu.
  • Na kraju se stvara konačni dendrogram koji kombinira sve podatkovne točke.

Možemo rezati strukturu stabla dendrograma na bilo kojoj razini prema našim zahtjevima.

Python implementacija aglomerativnog hijerarhijskog klasteriranja

Sada ćemo vidjeti praktičnu implementaciju algoritma aglomerativnog hijerarhijskog klasteriranja pomoću Pythona. Da bismo to implementirali, koristit ćemo isti problem sa skupom podataka koji smo koristili u prethodnoj temi klasteriranja K-srednjih vrijednosti tako da možemo lako usporediti oba koncepta.

Skup podataka sadrži informacije o kupcima koji su posjetili trgovački centar radi kupovine. Dakle, vlasnik trgovačkog centra želi pronaći neke obrasce ili neko određeno ponašanje svojih kupaca koristeći informacije skupa podataka.

algoritmi sortiranja merge sort

Koraci za implementaciju AHC-a pomoću Pythona:

Koraci za implementaciju bit će isti kao i klasteriranje k-srednjih vrijednosti, osim nekih promjena kao što je metoda za pronalaženje broja klastera. U nastavku su navedeni koraci:

    Predobrada podataka Određivanje optimalnog broja klastera pomoću Dendrograma Obuka hijerarhijskog modela klasteriranja Vizualizacija klastera

Koraci prethodne obrade podataka:

U ovom koraku uvest ćemo biblioteke i skupove podataka za naš model.

    Uvoz knjižnica
 # Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 

Gornje linije koda koriste se za uvoz biblioteka za obavljanje specifičnih zadataka, kao što su numpy za matematičke operacije, matplotlib za crtanje grafikona ili raspršenog dijagrama, i pande za uvoz skupa podataka.

    Uvoz skupa podataka
 # Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv') 

Kao što je gore navedeno, uvezli smo isti skup podataka od Mall_Customers_data.csv, kao što smo učinili u klasteriranju k-značenja. Razmotrite donji izlaz:

Hijerarhijsko grupiranje u strojno učenje
    Izdvajanje matrice značajki

Ovdje ćemo izdvojiti samo matricu značajki budući da nemamo dodatnih informacija o ovisnoj varijabli. Kod je dan u nastavku:

 x = dataset.iloc[:, [3, 4]].values 

Ovdje smo izdvojili samo 3 i 4 stupca jer ćemo koristiti 2D dijagram da vidimo klastere. Dakle, razmatramo godišnji rezultat prihoda i potrošnje kao matricu značajki.

Korak 2: Pronalaženje optimalnog broja klastera pomoću Dendrograma

Sada ćemo pronaći optimalan broj klastera koristeći Dendrogram za naš model. Za ovo ćemo koristiti scipy jer pruža funkciju koja će izravno vratiti dendrogram za naš kod. Razmotrite donje retke koda:

 #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() 

U gornjim redcima koda uvezli smo hijerarhija modul scipy knjižnice. Ovaj modul nam daje metodu shc.denrogram(), koji uzima veza() kao parametar. Funkcija povezivanja koristi se za definiranje udaljenosti između dva klastera, tako da smo ovdje proslijedili x (matricu značajki) i metodu ' odjeljenje ,' popularna metoda povezivanja u hijerarhijskom klasteriranju.

Preostale linije koda trebaju opisati oznake za dijagram dendrograma.

Izlaz:

Izvršavanjem gornjih redaka koda, dobit ćemo donji izlaz :

Hijerarhijsko grupiranje u strojno učenje

Koristeći ovaj dendrogram, sada ćemo odrediti optimalan broj klastera za naš model. Za ovo ćemo pronaći najveća okomita udaljenost koji ne siječe vodoravnu šipku. Razmotrite dijagram u nastavku:

Hijerarhijsko grupiranje u strojno učenje

U gornjem dijagramu prikazali smo okomite udaljenosti koje ne sijeku njihove vodoravne šipke. Kao što možemo zamisliti, 4thudaljenost izgleda kao maksimalna, pa prema ovome, broj klastera će biti 5 (okomite crte u ovom rasponu). Također možemo uzeti 2ndbroj jer je približno jednak 4thudaljenost, ali ćemo razmotriti 5 klastera jer smo iste izračunali u algoritmu K-srednjih vrijednosti.

sivi kod

Dakle, optimalan broj klastera bit će 5 , a mi ćemo trenirati model u sljedećem koraku, koristeći isti.

Korak 3: Obuka hijerarhijskog modela klasteriranja

Kako znamo potreban optimalan broj klastera, sada možemo trenirati naš model. Kod je naveden u nastavku:

 #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) 

U gornjem kodu uvezli smo AglomerativeClustering klasa modula klastera knjižnice učenja scikit.

Zatim smo kreirali objekt ove klase pod nazivom as hc. Klasa AgglomerativeClustering uzima sljedeće parametre:

    n_klastera=5: Definira broj klastera, a mi smo ovdje uzeli 5 jer je to optimalan broj klastera.afinitet='euklidski': To je metrika koja se koristi za izračunavanje veze.linkage='ward': Definira kriterije povezivanja, ovdje smo upotrijebili vezu 'štićenika'. Ova metoda je popularna metoda povezivanja koju smo već koristili za izradu Dendrograma. Smanjuje varijancu u svakom klasteru.

U posljednjem smo retku kreirali zavisnu varijablu y_pred za prilagođavanje ili treniranje modela. Ne obučava samo model, već vraća i klastere kojima svaka podatkovna točka pripada.

Nakon izvršavanja gornjih redaka koda, ako prođemo kroz opciju istraživača varijabli u našem Sypder IDE-u, možemo provjeriti varijablu y_pred. Izvorni skup podataka možemo usporediti s varijablom y_pred. Razmotrite sliku u nastavku:

Hijerarhijsko grupiranje u strojno učenje

Kao što možemo vidjeti na gornjoj slici, y_pred pokazuje vrijednost klastera, što znači da ID kupca 1 pripada 5thklaster (kako indeksiranje počinje od 0, tako da 4 znači 5thklaster), ID kupca 2 pripada 4thklaster, i tako dalje.

Korak 4: Vizualizacija klastera

Kako smo uspješno uvježbali naš model, sada možemo vizualizirati klastere koji odgovaraju skupu podataka.

Ovdje ćemo koristiti iste retke koda kao što smo koristili u k-means klasteriranju, osim jedne promjene. Ovdje nećemo iscrtavati centroid koji smo radili u k-srednjim vrijednostima, jer smo ovdje koristili dendrogram za određivanje optimalnog broja klastera. Kod je naveden u nastavku:

 #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() 

Izlaz: Izvođenjem gornjih redaka koda, dobit ćemo donji izlaz:

Hijerarhijsko grupiranje u strojno učenje