logo

Hierarchinis klasterizavimas mašininiame mokyme

Hierarchinis grupavimas yra dar vienas neprižiūrimas mašininio mokymosi algoritmas, naudojamas nepažymėtiems duomenų rinkiniams grupuoti į klasterį ir dar žinomas kaip hierarchinė klasterių analizė arba HCA.

Šiame algoritme mes sukuriame medžio formos klasterių hierarchiją, o ši medžio formos struktūra yra žinoma kaip dendrograma .

Kartais K-means klasterizacijos ir hierarchinės klasterizacijos rezultatai gali atrodyti panašūs, tačiau jie abu skiriasi priklausomai nuo to, kaip veikia. Kadangi nėra reikalavimo iš anksto nustatyti klasterių skaičių, kaip tai padarėme K-Means algoritme.

Hierarchinis klasterizacijos metodas turi du būdus:

    Aglomeracinis:Aglomeracinis yra a iki dugno metodas, kai algoritmas pradedamas nuo visų duomenų taškų paėmimo į atskiras grupes ir sujungiant juos, kol lieka vienas klasteris.Skirstantis:Skiriamasis algoritmas yra priešingas aglomeracinio algoritmo, koks jis yra a metodas iš viršaus į apačią.

Kodėl hierarchinis klasterizavimas?

Kaip jau turime kitų grupavimas algoritmai, pvz K-Means klasterizavimas , kodėl mums reikia hierarchinės klasterizacijos? Taigi, kaip matėme K-means klasterizavime, šis algoritmas turi tam tikrų iššūkių, kurie yra iš anksto nustatytas klasterių skaičius, ir jis visada bando sukurti tokio paties dydžio grupes. Norėdami išspręsti šiuos du iššūkius, galime pasirinkti hierarchinį klasterizacijos algoritmą, nes taikant šį algoritmą mums nereikia turėti žinių apie iš anksto nustatytą grupių skaičių.

Šioje temoje aptarsime aglomeracinį hierarchinį klasterizacijos algoritmą.

Aglomeracinis hierarchinis klasterizavimas

Aglomeracinis hierarchinis klasterizacijos algoritmas yra populiarus HCA pavyzdys. Norėdami sugrupuoti duomenų rinkinius į grupes, vadovaukitės metodas iš apačios į viršų . Tai reiškia, kad šis algoritmas kiekvieną duomenų rinkinį iš pradžių laiko vienu klasteriu, o tada pradeda derinti artimiausią klasterių porą. Tai daroma tol, kol visos klasteriai yra sujungti į vieną klasterį, kuriame yra visi duomenų rinkiniai.

Ši klasterių hierarchija pavaizduota dendrogramos forma.

Kaip veikia aglomeracinis hierarchinis klasterizavimas?

AHC algoritmo veikimą galima paaiškinti šiais veiksmais:

    1 žingsnis:Sukurkite kiekvieną duomenų tašką kaip vieną grupę. Tarkime, kad yra N duomenų taškų, taigi klasterių skaičius taip pat bus N.
    Hierarchinis klasterizavimas mašininiame mokyme 2 žingsnis:Paimkite du artimiausius duomenų taškus arba grupes ir sujunkite juos, kad sudarytumėte vieną grupę. Taigi dabar bus N-1 klasteriai.
    Hierarchinis klasterizavimas mašininiame mokyme 3 veiksmas: Vėl paimkite dvi artimiausias grupes ir sujunkite jas, kad susidarytumėte viena grupė. Bus N-2 klasteriai.
    Hierarchinis klasterizavimas mašininiame mokyme 4 veiksmas:Kartokite 3 veiksmą, kol liks tik viena grupė. Taigi, gausime šias grupes. Apsvarstykite toliau pateiktus vaizdus:
    Hierarchinis klasterizavimas mašininiame mokyme
    Hierarchinis klasterizavimas mašininiame mokyme
    Hierarchinis klasterizavimas mašininiame mokyme 5 veiksmas:Kai visi klasteriai bus sujungti į vieną didelį klasterį, sukurkite dendrogramą, kad padalintumėte grupes pagal problemą.

Pastaba: norint geriau suprasti hierarchinį grupavimą, patariama pažvelgti į k-means klasterizavimą

Išmatuokite atstumą tarp dviejų grupių

Kaip matėme, artimiausias atstumas tarp dviejų grupių yra labai svarbus hierarchiniam klasterizavimui. Yra įvairių būdų, kaip apskaičiuoti atstumą tarp dviejų grupių, ir šie būdai nustato klasterizacijos taisyklę. Šios priemonės vadinamos Ryšio metodai . Toliau pateikiami kai kurie populiarūs susiejimo būdai:

    Viena jungtis:Tai yra trumpiausias atstumas tarp artimiausių klasterių taškų. Apsvarstykite toliau pateiktą vaizdą:
    Hierarchinis klasterizavimas mašininiame mokyme Pilnas susiejimas:Tai yra tolimiausias atstumas tarp dviejų dviejų skirtingų grupių taškų. Tai vienas iš populiarių sujungimo metodų, nes formuoja griežtesnes grupes nei vienkartinis sujungimas.
    Hierarchinis klasterizavimas mašininiame mokyme Vidutinis ryšys:Tai yra susiejimo metodas, kai atstumas tarp kiekvienos duomenų rinkinių poros sumuojamas ir padalinamas iš bendro duomenų rinkinių skaičiaus, siekiant apskaičiuoti vidutinį atstumą tarp dviejų grupių. Tai taip pat vienas iš populiariausių susiejimo būdų.Centro jungtis:Tai sujungimo metodas, kuriuo apskaičiuojamas atstumas tarp klasterių centroido. Apsvarstykite toliau pateiktą vaizdą:
    Hierarchinis klasterizavimas mašininiame mokyme

Iš aukščiau pateiktų metodų galime pritaikyti bet kurį iš jų pagal problemos tipą ar verslo reikalavimą.

Dendrogramos sužadinimas hierarchinėje klasterizacijoje

Dendrograma yra į medį panaši struktūra, kuri daugiausia naudojama kiekvienam žingsniui saugoti kaip atmintį, kurią atlieka HC algoritmas. Dendrogramos diagramoje Y ašis rodo euklidinius atstumus tarp duomenų taškų, o x ašyje – visus duoto duomenų rinkinio duomenų taškus.

kaip rūšiuoti masyvų sąrašą java

Dendrogramos veikimą galima paaiškinti naudojant toliau pateiktą diagramą:

Hierarchinis klasterizavimas mašininiame mokyme

Aukščiau pateiktoje diagramoje kairioji dalis rodo, kaip sukuriami klasteriai aglomeraciniame klasterizavime, o dešinėje – atitinkama dendrograma.

  • Kaip jau aptarėme aukščiau, pirma, duomenų taškai P2 ir P3 susijungia ir sudaro klasterį, atitinkamai sukuriama dendrograma, jungianti P2 ir P3 stačiakampe forma. Aukštis nustatomas pagal Euklido atstumą tarp duomenų taškų.
  • Kitame žingsnyje P5 ir P6 sudaro klasterį ir sukuriama atitinkama dendrograma. Jis yra didesnis nei ankstesnis, nes Euklido atstumas tarp P5 ir P6 yra šiek tiek didesnis nei P2 ir P3.
  • Vėlgi, sukuriamos dvi naujos dendrogramos, kurios vienoje dendrogramoje sujungia P1, P2 ir P3, o kitoje dendrogramoje – P4, P5 ir P6.
  • Galiausiai sukuriama galutinė dendrograma, kuri sujungia visus duomenų taškus.

Mes galime iškirpti dendrogramos medžio struktūrą bet kokiu lygiu pagal mūsų reikalavimus.

Python aglomeracinio hierarchinio klasterizavimo įgyvendinimas

Dabar pamatysime praktinį aglomeracinio hierarchinio klasterizavimo algoritmo įgyvendinimą naudojant Python. Norėdami tai įgyvendinti, naudosime tą pačią duomenų rinkinio problemą, kurią naudojome ankstesnėje K-means klasterizacijos temoje, kad galėtume lengvai palyginti abi sąvokas.

Duomenų rinkinyje yra informacija apie klientus, kurie apsilankė prekybos centre apsipirkti. Taigi, prekybos centro savininkas, naudodamas duomenų rinkinio informaciją, nori rasti tam tikrus modelius ar tam tikrą savo klientų elgesį.

AHC diegimo naudojant Python žingsniai:

Diegimo veiksmai bus tokie patys kaip k-means klasterizavimas, išskyrus kai kuriuos pakeitimus, pvz., metodą, leidžiantį rasti grupių skaičių. Toliau pateikiami žingsniai:

    Išankstinis duomenų apdorojimas Optimalaus klasterių skaičiaus nustatymas naudojant Dendrogramą Hierarchinio klasterizacijos modelio mokymas Klasterių vizualizavimas

Išankstinio duomenų apdorojimo žingsniai:

Šiame žingsnyje mes importuosime savo modelio bibliotekas ir duomenų rinkinius.

    Bibliotekų importavimas
 # Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 

Aukščiau pateiktos kodo eilutės naudojamos bibliotekoms importuoti konkrečioms užduotims atlikti, pvz., nelygus matematiniams veiksmams, matplotlib grafikus ar sklaidos diagramą braižyti ir pandos duomenų rinkinio importavimui.

    Duomenų rinkinio importavimas
 # Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv') 

Kaip aptarta aukščiau, importavome tą patį duomenų rinkinį Mall_Customers_data.csv, kaip tai padarėme k-means klasterizuojant. Apsvarstykite toliau pateiktą išvestį:

Hierarchinis klasterizavimas mašininiame mokyme
    Požymių matricos ištraukimas

Čia išskirsime tik funkcijų matricą, nes neturime jokios papildomos informacijos apie priklausomą kintamąjį. Kodas pateiktas žemiau:

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

Čia ištraukėme tik 3 ir 4 stulpelius, nes grupes pamatyti naudosime 2D brėžinį. Taigi, metinių pajamų ir išlaidų balą laikome funkcijų matrica.

2 veiksmas: optimalaus klasterių skaičiaus radimas naudojant Dendrogramą

Dabar mes surasime optimalų klasterių skaičių naudodami mūsų modelio Dendrogramą. Tam mes ketiname naudoti scipy biblioteka, nes ji suteikia funkciją, kuri tiesiogiai grąžins mūsų kodo dendrogramą. Apsvarstykite toliau pateiktas kodo eilutes:

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

Aukščiau pateiktose kodo eilutėse importavome hierarchija scipy bibliotekos modulis. Šis modulis suteikia mums metodą shc.denrogram(), kuri paima ryšys () kaip parametras. Susiejimo funkcija naudojama nustatyti atstumą tarp dviejų klasterių, todėl čia mes perdavėme x (ypatybių matricą) ir metodą ' palata Populiarus hierarchinių grupių susiejimo metodas.

Likusios kodo eilutės turi apibūdinti dendrogramos diagramos etiketes.

Išvestis:

Vykdydami aukščiau pateiktas kodo eilutes, gausime žemiau pateiktą išvestį :

Hierarchinis klasterizavimas mašininiame mokyme

Naudodami šią dendrogramą dabar nustatysime optimalų mūsų modelio klasterių skaičių. Tam rasime didžiausias vertikalus atstumas kuri nenupjauna jokios horizontalios juostos. Apsvarstykite toliau pateiktą diagramą:

Hierarchinis klasterizavimas mašininiame mokyme

Aukščiau pateiktoje diagramoje parodėme vertikalius atstumus, kurie nepjauna jų horizontalių juostų. Kaip galime įsivaizduoti, 4thatstumas atrodo didžiausias, todėl pagal tai klasterių skaičius bus 5 (vertikalios linijos šiame diapazone). Taip pat galime pasiimti 2ndskaičių, nes jis apytiksliai lygus 4thatstumą, bet mes atsižvelgsime į 5 grupes, nes tą patį apskaičiavome K vidurkio algoritme.

Taigi, optimalus klasterių skaičius bus 5 , ir mes apmokysime modelį kitame žingsnyje, naudodami tą patį.

3 veiksmas: hierarchinio klasterizacijos modelio mokymas

Kadangi žinome reikiamą optimalų klasterių skaičių, dabar galime mokyti savo modelį. Kodas pateiktas žemiau:

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

Aukščiau pateiktame kode mes importavome Aglomeracinis grupavimas scikit learning bibliotekos klasterio modulio klasė.

Tada sukūrėme šios klasės objektą, pavadintą kaip hc. AgglomerativeClustering klasė apima šiuos parametrus:

    n_clusters=5: Jis apibrėžia klasterių skaičių, o mes čia paėmėme 5, nes tai yra optimalus klasterių skaičius.affinity='euklido': tai metrika, naudojama ryšiui apskaičiuoti.linkage='ward': Jis apibrėžia susiejimo kriterijus, čia mes naudojome „palatos“ ryšį. Šis metodas yra populiarus susiejimo metodas, kurį jau naudojome kurdami Dendrogramą. Tai sumažina dispersiją kiekvienoje klasteryje.

Paskutinėje eilutėje sukūrėme priklausomą kintamąjį y_pred, kad jis atitiktų arba mokytų modelį. Jis apmoko ne tik modelį, bet ir grąžina grupes, kurioms priklauso kiekvienas duomenų taškas.

Įvykdę aukščiau pateiktas kodo eilutes, jei savo Sypder IDE naudosime kintamųjų naršyklės parinktį, galime patikrinti y_pred kintamąjį. Galime palyginti pradinį duomenų rinkinį su y_pred kintamuoju. Apsvarstykite toliau pateiktą vaizdą:

sveikąjį skaičių paverčiant eilute
Hierarchinis klasterizavimas mašininiame mokyme

Kaip matome aukščiau esančiame paveikslėlyje, y_pred rodo grupių reikšmę, o tai reiškia, kad kliento ID 1 priklauso 5thklasteris (kadangi indeksavimas prasideda nuo 0, taigi 4 reiškia 5thklasteris), kliento ID 2 priklauso 4thklasteris ir pan.

4 veiksmas: klasterių vizualizavimas

Kadangi sėkmingai apmokėme savo modelį, dabar galime vizualizuoti duomenų rinkinį atitinkančias grupes.

Čia naudosime tas pačias kodo eilutes, kaip ir k-means klasterizuodami, išskyrus vieną pakeitimą. Čia mes nebraižome centroido, kurį padarėme k-vidurkiais, nes čia mes panaudojome dendrogramą optimaliam klasterių skaičiui nustatyti. Kodas pateiktas žemiau:

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

Išvestis: Vykdydami aukščiau pateiktas kodo eilutes, gausime žemiau pateiktą išvestį:

Hierarchinis klasterizavimas mašininiame mokyme