logo

Hierarkkinen klusterointi koneoppimisessa

Hierarkkinen klusterointi on toinen valvomaton koneoppimisalgoritmi, jota käytetään ryhmittelemään merkitsemättömät tietojoukot klusteriksi ja joka tunnetaan myös nimellä hierarkkinen klusterianalyysi tai HCA.

Tässä algoritmissa kehitämme klustereiden hierarkiaa puun muodossa, ja tämä puun muotoinen rakenne tunnetaan nimellä dendrogrammi .

Joskus K-mean-klusteroinnin ja hierarkkisen klusteroinnin tulokset voivat näyttää samanlaisilta, mutta ne molemmat vaihtelevat riippuen siitä, miten ne toimivat. Koska klusterien lukumäärää ei tarvitse määrittää ennalta, kuten teimme K-Means-algoritmissa.

Hierarkkisella klusterointitekniikalla on kaksi lähestymistapaa:

    Agglomeratiivinen:Agglomeratiivinen on a alhaalta ylöspäin lähestymistapa, jossa algoritmi aloittaa ottamalla kaikki datapisteet yksittäisinä klustereina ja yhdistämällä niitä, kunnes yksi klusteri on jäljellä.Erottava:Jakoalgoritmi on agglomeratiivisen algoritmin käänteinen ylhäältä alas -lähestymistapa.

Miksi hierarkkinen klusterointi?

Kuten meillä on jo muitakin klusterointi algoritmeja, kuten K-Means Clustering , miksi tarvitsemme hierarkkista klusterointia? Joten kuten olemme nähneet K-keinojen klusteroinnissa, että tässä algoritmissa on joitain haasteita, jotka ovat ennalta määrätty määrä klustereita, ja se yrittää aina luoda samankokoisia klustereita. Näiden kahden haasteen ratkaisemiseksi voimme valita hierarkkisen klusterointialgoritmin, koska tässä algoritmissa meillä ei tarvitse olla tietoa ennalta määrätystä klustereiden määrästä.

Tässä aiheessa käsittelemme agglomeratiivista hierarkkista klusterointialgoritmia.

Agglomeratiivinen hierarkkinen klusterointi

Agglomeratiivinen hierarkkinen klusterointialgoritmi on suosittu esimerkki HCA:sta. Tietojoukkojen ryhmittelemiseksi klustereihin seuraa seuraavaa alhaalta ylös -lähestymistapa . Tämä tarkoittaa, että tämä algoritmi pitää jokaisen tietojoukon alussa yhtenä klusterina ja alkaa sitten yhdistää lähintä klusteriparia. Se tekee tämän, kunnes kaikki klusterit on yhdistetty yhdeksi klusteriksi, joka sisältää kaikki tietojoukot.

Tämä klusterihierarkia esitetään dendrogrammin muodossa.

kyselyvalitsin

Kuinka agglomeratiivinen hierarkkinen klusteri toimii?

AHC-algoritmin toiminta voidaan selittää seuraavilla vaiheilla:

    Vaihe 1:Luo jokainen tietopiste yhdeksi klusteriksi. Oletetaan, että datapistettä on N, joten klusterien lukumäärä on myös N.
    Hierarkkinen klusterointi koneoppimisessa Vaihe 2:Ota kaksi lähintä datapistettä tai klusteria ja yhdistä ne yhdeksi klusteriksi. Joten nyt tulee N-1 klustereita.
    Hierarkkinen klusterointi koneoppimisessa Vaihe-3: Ota jälleen kaksi lähintä klusteria ja yhdistä ne yhdeksi klusteriksi. Tulee N-2 klustereita.
    Hierarkkinen klusterointi koneoppimisessa Vaihe 4:Toista vaihe 3, kunnes jäljellä on vain yksi klusteri. Joten saamme seuraavat klusterit. Harkitse alla olevia kuvia:
    Hierarkkinen klusterointi koneoppimisessa
    Hierarkkinen klusterointi koneoppimisessa
    Hierarkkinen klusterointi koneoppimisessa Vaihe 5:Kun kaikki klusterit on yhdistetty yhdeksi suureksi klusteriksi, kehitä dendrogrammi jakaaksesi klusterit ongelman mukaan.

Huomautus: Hierarkkisen klusteroinnin ymmärtämiseksi on suositeltavaa tarkastella k-keskiarvoklusterointia

Mittaa kahden klusterin välinen etäisyys

Kuten olemme nähneet, lähin etäisyys kahden klusterin välillä on ratkaiseva hierarkkisen klusteroinnin kannalta. Kahden klusterin välisen etäisyyden laskemiseen on useita tapoja, ja nämä menetelmät ratkaisevat klusteroinnin säännön. Näitä toimenpiteitä kutsutaan Kytkentämenetelmät . Alla on joitain suosittuja linkitystapoja:

    Yksittäinen linkki:Se on lyhin etäisyys klusterien lähimpien pisteiden välillä. Harkitse alla olevaa kuvaa:
    Hierarkkinen klusterointi koneoppimisessa Täydellinen linkitys:Se on kauimpana etäisyys kahden eri klusterin kahden pisteen välillä. Se on yksi suosituimmista kytkentämenetelmistä, koska se muodostaa tiukempia klustereita kuin yksilinkki.
    Hierarkkinen klusterointi koneoppimisessa Keskimääräinen yhteys:Se on linkitysmenetelmä, jossa kunkin tietojoukkoparin välinen etäisyys lasketaan yhteen ja jaetaan sitten tietojoukkojen kokonaismäärällä kahden klusterin välisen keskimääräisen etäisyyden laskemiseksi. Se on myös yksi suosituimmista kytkentämenetelmistä.Keskusliitos:Se on linkitysmenetelmä, jolla lasketaan klustereiden painopisteiden välinen etäisyys. Harkitse alla olevaa kuvaa:
    Hierarkkinen klusterointi koneoppimisessa

Yllä annetuista lähestymistavoista voimme soveltaa mitä tahansa niistä ongelman tyypin tai liiketoiminnan vaatimuksen mukaan.

Dendrogrammin herättäminen hierarkkiseen klusterointiin

Dendrogrammi on puumainen rakenne, jota käytetään pääasiassa jokaisen askeleen tallentamiseen muistiksi, jonka HC-algoritmi suorittaa. Dendrogrammikaaviossa Y-akseli näyttää datapisteiden väliset euklidiset etäisyydet ja x-akselilla kaikki tietyn tietojoukon datapisteet.

Dendrogrammin toiminta voidaan selittää alla olevan kaavion avulla:

Hierarkkinen klusterointi koneoppimisessa

Yllä olevassa kaaviossa vasen osa näyttää kuinka klustereita syntyy agglomeratiivisessa klusteroinnissa ja oikea osa vastaavaa dendrogrammia.

  • Kuten edellä on käsitelty, ensinnäkin datapisteet P2 ja P3 yhdistyvät yhteen ja muodostavat klusterin, vastaavasti syntyy dendrogrammi, joka yhdistää P2:n ja P3:n suorakaiteen muotoon. Korkeus määräytyy datapisteiden välisen euklidisen etäisyyden mukaan.
  • Seuraavassa vaiheessa P5 ja P6 muodostavat klusterin ja vastaava dendrogrammi luodaan. Se on korkeampi kuin edellisessä, koska euklidinen etäisyys P5:n ja P6:n välillä on hieman suurempi kuin P2:n ja P3:n.
  • Jälleen luodaan kaksi uutta dendrogrammia, jotka yhdistävät P1, P2 ja P3 yhdessä dendrogrammissa ja P4, P5 ja P6 toisessa dendrogrammissa.
  • Lopulta luodaan lopullinen dendrogrammi, joka yhdistää kaikki datapisteet yhteen.

Voimme leikata dendrogrammipuun rakenteen miltä tahansa tasolta tarpeidemme mukaan.

Agglomeratiivisen hierarkkisen klusteroinnin Python-toteutus

Nyt näemme agglomeratiivisen hierarkkisen klusterointialgoritmin käytännön toteutuksen Pythonilla. Tämän toteuttamiseksi käytämme samaa tietojoukkoongelmaa, jota käytimme edellisessä K-keinojen klusteroinnin aiheessa, jotta voimme verrata molempia käsitteitä helposti.

Tietojoukko sisältää tiedot asiakkaista, jotka ovat käyneet ostoskeskuksessa ostoksilla. Joten ostoskeskuksen omistaja haluaa löytää asiakkaidensa malleja tai tiettyjä käyttäytymismalleja tietojoukon tietojen avulla.

Vaiheet AHC:n toteuttamiseksi Pythonilla:

Toteutusvaiheet ovat samat kuin k-means-klusterointi, lukuun ottamatta joitain muutoksia, kuten menetelmää klustereiden lukumäärän löytämiseksi. Alla on vaiheet:

    Tietojen esikäsittely Optimaalisen klusterimäärän löytäminen Dendrogramin avulla Hierarkkisen klusterointimallin koulutus Klusterien visualisointi

Tietojen esikäsittelyn vaiheet:

Tässä vaiheessa tuomme mallimme kirjastot ja tietojoukot.

    Kirjastojen tuonti
 # Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 

Yllä olevia koodirivejä käytetään tuomaan kirjastoja suorittamaan tiettyjä tehtäviä, kuten nuhjuinen matemaattisia operaatioita varten, matplotlib kaavioiden tai sirontakuvaajan piirtämiseen ja pandat tietojoukon tuontia varten.

java-merkkijonon vaihto
    Tietojoukon tuonti
 # Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv') 

Kuten edellä mainittiin, olemme tuoneet saman tietojoukon Mall_Customers_data.csv, kuten teimme k-kean klusteroinnissa. Harkitse alla olevaa tulosta:

Hierarkkinen klusterointi koneoppimisessa
    Ominaisuuksien matriisin purkaminen

Tässä poimimme vain ominaisuuksien matriisin, koska meillä ei ole lisätietoa riippuvaisesta muuttujasta. Koodi annetaan alla:

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

Tässä olemme poimineet vain 3 ja 4 saraketta, koska käytämme 2D-kaaviota nähdäksemme klusterit. Joten harkitsemme vuosituloja ja menoja ominaisuuksien matriisina.

Vaihe 2: Optimaalisen klusterimäärän löytäminen Dendrogramin avulla

Nyt löydämme mallillemme Dendrogramin avulla optimaalisen määrän klustereita. Tätä varten aiomme käyttää scipy kirjasto, koska se tarjoaa toiminnon, joka palauttaa suoraan koodimme dendrogrammin. Harkitse alla olevia koodirivejä:

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

Yllä olevilla koodiriveillä olemme tuoneet hierarkia scipy-kirjaston moduuli. Tämä moduuli tarjoaa meille menetelmän shc.denrogram(), joka vie linkki () parametrina. Linkitysfunktiota käytetään määrittämään kahden klusterin välinen etäisyys, joten tässä on ohitettu x(ominaisuuksien matriisi) ja menetelmä ' osastolla ' suosittu linkitysmenetelmä hierarkkisessa klusteroinnissa.

Jäljellä olevat koodirivit kuvaavat dendrogrammikaavion nimikkeitä.

Lähtö:

Suorittamalla yllä olevat koodirivit, saamme alla olevan tulosteen :

Hierarkkinen klusterointi koneoppimisessa

Tämän dendrogrammin avulla määritämme nyt mallillemme optimaalisen klusterien määrän. Tätä varten löydämme suurin pystysuora etäisyys joka ei leikkaa vaakasuoraa palkkia. Harkitse alla olevaa kaaviota:

Hierarkkinen klusterointi koneoppimisessa

Yllä olevassa kaaviossa olemme näyttäneet pystysuorat etäisyydet, jotka eivät leikkaa vaakapalkkiaan. Kuten voimme kuvitella, 4thetäisyys näyttää suurimmalta, joten tämän mukaan klustereiden lukumäärä tulee olemaan 5 (pystysuorat viivat tällä alueella). Voimme ottaa myös 2ndnumero, koska se on suunnilleen yhtä suuri kuin 4thetäisyys, mutta otamme huomioon 5 klusteria, koska samat laskemme K-keskiarvoalgoritmissa.

Optimaalinen klusterien lukumäärä on siis 5 , ja koulutamme mallin seuraavassa vaiheessa käyttäen samaa.

Vaihe 3: Hierarkkisen klusterointimallin koulutus

Koska tiedämme tarvittavan optimaalisen määrän klustereita, voimme nyt kouluttaa malliamme. Koodi annetaan alla:

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

Yllä olevassa koodissa olemme tuoneet AgglomerativeClustering scikit learning -kirjaston klusterimoduulin luokka.

kuinka monta hedelmää siellä on

Sitten olemme luoneet tämän luokan objektin nimeltä as hc. AgglomerativeClustering-luokka ottaa seuraavat parametrit:

    n_klusterit=5: Se määrittelee klusterien määrän, ja olemme ottaneet tähän 5, koska se on optimaalinen klusterien lukumäärä.affinity='euklidinen': Se on mittari, jota käytetään kytkennän laskemiseen.linkage='ward': Se määrittelee linkityskriteerit, tässä olemme käyttäneet 'osaston' yhteyttä. Tämä menetelmä on suosittu linkitysmenetelmä, jota olemme jo käyttäneet Dendrogramin luomiseen. Se vähentää varianssia kussakin klusterissa.

Viimeisellä rivillä olemme luoneet riippuvaisen muuttujan y_pred mallin sovittamiseksi tai kouluttamiseksi. Se ei kouluta vain mallia, vaan myös palauttaa klusterit, joihin kukin datapiste kuuluu.

Yllä olevien koodirivien suorittamisen jälkeen, jos käymme läpi Sypder IDE:n variable explorer -vaihtoehdon, voimme tarkistaa y_pred-muuttujan. Voimme verrata alkuperäistä tietojoukkoa y_pred-muuttujaan. Harkitse alla olevaa kuvaa:

Hierarkkinen klusterointi koneoppimisessa

Kuten yllä olevasta kuvasta näemme, y_pred näyttää klusterin arvon, mikä tarkoittaa, että asiakastunnus 1 kuuluu numeroon 5thklusteri (koska indeksointi alkaa 0:sta, joten 4 tarkoittaa 5thklusteri), asiakastunnus 2 kuuluu 4:llethklusteri ja niin edelleen.

Vaihe 4: Klusterien visualisointi

Koska olemme kouluttaneet malliamme onnistuneesti, voimme nyt visualisoida tietojoukkoa vastaavat klusterit.

Tässä käytämme samoja koodirivejä kuin k-means-klusteroinnissa, lukuun ottamatta yhtä muutosta. Tässä emme piirrä sentroidia, jota teimme k-keskiarvoilla, koska tässä olemme käyttäneet dendrogrammia optimaalisen klusterimäärän määrittämiseen. Koodi annetaan alla:

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

Tulos: Suorittamalla yllä olevat koodirivit, saamme alla olevan tulosteen:

Hierarkkinen klusterointi koneoppimisessa