logo

Hierarhiskā klasterizācija mašīnmācībā

Hierarhiskā klasterizācija ir vēl viens nepārraudzīts mašīnmācīšanās algoritms, ko izmanto, lai grupētu nemarķētās datu kopas klasterī un kas pazīstams arī kā hierarhiskā klasteru analīze vai HCA.

Šajā algoritmā mēs izstrādājam klasteru hierarhiju koka formā, un šī koka formas struktūra ir pazīstama kā dendrogramma .

Dažreiz K-mean klasterizācijas un hierarhiskās klasterizācijas rezultāti var izskatīties līdzīgi, taču tie abi atšķiras atkarībā no tā, kā tie darbojas. Tā kā nav prasības iepriekš noteikt klasteru skaitu, kā mēs to darījām K-Means algoritmā.

Hierarhiskās klasterizācijas tehnikai ir divas pieejas:

csv failu lasīšana java
    Aglomeratīvs:Aglomeratīvais ir a no apakšas uz augšu pieeja, kurā algoritms sākas ar visu datu punktu uztveršanu kā vienu klasteru un to sapludināšanu, līdz paliek viens klasteris.Sadalošais:Sadalīšanas algoritms ir aglomeratīvā algoritma apvērsums, kāds tas ir a pieeja no augšas uz leju.

Kāpēc hierarhiska klasterizācija?

Kā mums jau ir citi grupēšana algoritmi, piemēram, K-Means klasterizācija , tad kāpēc mums ir vajadzīga hierarhiska klasterizācija? Tātad, kā mēs redzējām K-nozīmē, ka šim algoritmam ir daži izaicinājumi, kas ir iepriekš noteikts klasteru skaits, un tas vienmēr mēģina izveidot vienāda izmēra klasterus. Lai atrisinātu šīs divas problēmas, mēs varam izvēlēties hierarhisko klasteru veidošanas algoritmu, jo šajā algoritmā mums nav jābūt zināšanām par iepriekš noteiktu klasteru skaitu.

Šajā tēmā mēs apspriedīsim aglomeratīvās hierarhiskās klasterizācijas algoritmu.

Aglomeratīvā hierarhiskā klasterizācija

Aglomeratīvais hierarhiskais klasterizācijas algoritms ir populārs HCA piemērs. Lai grupētu datu kopas klasteros, ir jāievēro augšupēja pieeja . Tas nozīmē, ka šis algoritms sākumā katru datu kopu uzskata par vienu kopu un pēc tam sāk apvienot tuvāko klasteru pāri. Tas tiek darīts, līdz visas kopas tiek apvienotas vienā klasterī, kurā ir visas datu kopas.

Šī klasteru hierarhija ir attēlota dendrogrammas formā.

Kā darbojas aglomeratīvā hierarhiskā klasterizācija?

AHC algoritma darbību var izskaidrot, izmantojot tālāk norādītās darbības.

    1. darbība:Izveidojiet katru datu punktu kā vienu kopu. Pieņemsim, ka ir N datu punkti, tāpēc arī klasteru skaits būs N.
    Hierarhiskā klasterizācija mašīnmācībā 2. darbība:Paņemiet divus tuvākos datu punktus vai kopas un apvienojiet tos, lai izveidotu vienu kopu. Tātad tagad būs N-1 kopas.
    Hierarhiskā klasterizācija mašīnmācībā 3. darbība: Atkal paņemiet divas tuvākās kopas un sapludiniet tās, lai izveidotu vienu kopu. Būs N-2 kopas.
    Hierarhiskā klasterizācija mašīnmācībā 4. darbība:Atkārtojiet 3. darbību, līdz paliek tikai viena kopa. Tātad, mēs iegūsim šādas kopas. Apsveriet tālāk redzamos attēlus:
    Hierarhiskā klasterizācija mašīnmācībā
    Hierarhiskā klasterizācija mašīnmācībā
    Hierarhiskā klasterizācija mašīnmācībā 5. darbība:Kad visas kopas ir apvienotas vienā lielā klasterī, izstrādājiet dendrogrammu, lai sadalītu kopas atbilstoši problēmai.

Piezīme. Lai labāk izprastu hierarhisko klasterizāciju, ieteicams aplūkot k-means klasterizāciju.

Izmēriet attālumu starp diviem klasteriem

Kā mēs redzējām, tuvākais attālums starp diviem klasteriem ir izšķiroša nozīme hierarhiskajai klasterizācijai. Ir dažādi veidi, kā aprēķināt attālumu starp diviem klasteriem, un šie veidi nosaka klasterizācijas noteikumu. Šos pasākumus sauc Sasaistes metodes . Tālāk ir norādītas dažas no populārākajām savienošanas metodēm.

    Viena saite:Tas ir Īsākais attālums starp tuvākajiem kopu punktiem. Apsveriet tālāk redzamo attēlu:
    Hierarhiskā klasterizācija mašīnmācībā Pilnīga saite:Tas ir tālākais attālums starp diviem dažādu klasteru punktiem. Tā ir viena no populārajām savienošanas metodēm, jo ​​tā veido stingrākas kopas nekā viena saite.
    Hierarhiskā klasterizācija mašīnmācībā Vidējā saite:Tā ir saistīšanas metode, kurā attālums starp katru datu kopu pāri tiek summēts un pēc tam dalīts ar kopējo datu kopu skaitu, lai aprēķinātu vidējo attālumu starp diviem klasteriem. Tā ir arī viena no populārākajām savienošanas metodēm.Centroīda savienojums:Tā ir sasaistes metode, kurā aprēķina attālumu starp kopu centroīdu. Apsveriet tālāk redzamo attēlu:
    Hierarhiskā klasterizācija mašīnmācībā

No iepriekš minētajām pieejām mēs varam piemērot jebkuru no tām atbilstoši problēmas veidam vai biznesa prasībām.

Dendrogrammas pacelšana hierarhiskā klasterizācijā

Dendrogramma ir kokam līdzīga struktūra, ko galvenokārt izmanto, lai saglabātu katru soli kā atmiņu, ko veic HC algoritms. Dendrogrammas diagrammā Y ass parāda Eiklīda attālumus starp datu punktiem, bet x ass parāda visus dotās datu kopas datu punktus.

Dendrogrammas darbību var izskaidrot, izmantojot zemāk esošo diagrammu:

Hierarhiskā klasterizācija mašīnmācībā

Iepriekš redzamajā diagrammā kreisā daļa parāda, kā tiek veidoti klasteri aglomerācijas klasterizācijā, un labajā pusē ir parādīta atbilstošā dendrogramma.

  • Kā jau minēts iepriekš, pirmkārt, datu punkti P2 un P3 apvienojas kopā un veido kopu, attiecīgi tiek izveidota dendrogramma, kas savieno P2 un P3 ar taisnstūra formu. Augstumu nosaka pēc Eiklīda attāluma starp datu punktiem.
  • Nākamajā solī P5 un P6 veido kopu, un tiek izveidota atbilstošā dendrogramma. Tas ir lielāks nekā iepriekšējais, jo Eiklīda attālums starp P5 un P6 ir nedaudz lielāks nekā P2 un P3.
  • Atkal tiek izveidotas divas jaunas dendrogrammas, kas apvieno P1, P2 un P3 vienā dendrogrammā un P4, P5 un P6 citā dendrogrammā.
  • Beidzot tiek izveidota galīgā dendrogramma, kas apvieno visus datu punktus.

Mēs varam izgriezt dendrogrammu koka struktūru jebkurā līmenī atbilstoši mūsu prasībām.

Python Aglomeratīvās hierarhiskās klasterizācijas ieviešana

Tagad mēs redzēsim praktisko aglomeratīvā hierarhiskā klasterizācijas algoritma ieviešanu, izmantojot Python. Lai to īstenotu, mēs izmantosim to pašu datu kopas problēmu, ko izmantojām iepriekšējā K-means klasterizācijas tēmā, lai mēs varētu viegli salīdzināt abus jēdzienus.

Datu kopā ir informācija par klientiem, kuri ir apmeklējuši tirdzniecības centru, lai iepirktos. Tātad, tirdzniecības centra īpašnieks vēlas atrast dažus modeļus vai noteiktu savu klientu uzvedību, izmantojot datu kopas informāciju.

AHC ieviešanas soļi, izmantojot Python:

Ieviešanas soļi būs tādi paši kā k-means klasterizācijai, izņemot dažas izmaiņas, piemēram, klasteru skaita noteikšanas metodi. Tālāk ir norādītas darbības.

    Datu priekšapstrāde Optimālā klasteru skaita atrašana, izmantojot dendrogrammu Hierarhiskās klasterizācijas modeļa apmācība Klasteru vizualizācija

Datu pirmapstrādes soļi:

Šajā darbībā mēs importēsim mūsu modeļa bibliotēkas un datu kopas.

    Bibliotēku importēšana
 # Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 

Iepriekš minētās koda rindas tiek izmantotas, lai importētu bibliotēkas konkrētu uzdevumu veikšanai, piemēram, nejutīgs matemātiskajām operācijām, matplotlib grafiku vai izkliedes diagrammas zīmēšanai un pandas datu kopas importēšanai.

    Datu kopas importēšana
 # Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv') 

Kā minēts iepriekš, mēs esam importējuši to pašu datu kopu Mall_Customers_data.csv, kā mēs to darījām k-vidējo klasterizācijā. Apsveriet tālāk norādīto izvadi:

Hierarhiskā klasterizācija mašīnmācībā
    Pazīmju matricas izvilkšana

Šeit mēs iegūsim tikai pazīmju matricu, jo mums nav papildu informācijas par atkarīgo mainīgo. Kods ir norādīts zemāk:

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

Šeit mēs esam izvilkuši tikai 3 un 4 kolonnas, jo mēs izmantosim 2D diagrammu, lai redzētu kopas. Tātad, mēs uzskatām gada ienākumu un izdevumu rādītāju kā funkciju matricu.

2. darbība: optimālā klasteru skaita atrašana, izmantojot dendrogrammu

Tagad mēs atradīsim optimālo klasteru skaitu, izmantojot mūsu modeļa Dendrogrammu. Šim nolūkam mēs izmantosim scipy bibliotēka, jo tā nodrošina funkciju, kas tieši atgriezīs mūsu koda dendrogrammu. Apsveriet tālāk norādītās koda rindas:

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

Iepriekš minētajās koda rindās mēs esam importējuši hierarhija scipy bibliotēkas modulis. Šis modulis sniedz mums metodi shc.denrogram(), kas aizņem saite () kā parametrs. Saiknes funkcija tiek izmantota, lai definētu attālumu starp diviem klasteriem, tāpēc šeit mēs esam izturējuši x (pazīmju matricu) un metodi ' palātā 'populārā sasaistes metode hierarhiskajā klasterizācijā.

cast virkni kā int java

Atlikušās koda rindas ir paredzētas, lai aprakstītu dendrogrammas diagrammas etiķetes.

Izvade:

Izpildot iepriekš minētās koda rindas, mēs iegūsim zemāk redzamo izvadi :

Hierarhiskā klasterizācija mašīnmācībā

Izmantojot šo dendrogrammu, mēs tagad noteiksim optimālo klasteru skaitu mūsu modelim. Šim nolūkam mēs atradīsim maksimālais vertikālais attālums kas nesagriež nevienu horizontālu joslu. Apsveriet tālāk redzamo diagrammu:

Hierarhiskā klasterizācija mašīnmācībā

Iepriekš redzamajā diagrammā mēs esam parādījuši vertikālos attālumus, kas nesagriež horizontālās joslas. Kā varam iztēloties, 4thattālums izskatās maksimālais, tāpēc saskaņā ar šo klasteru skaits būs 5 (šajā diapazonā esošās vertikālās līnijas). Mēs varam ņemt arī 2ndskaitlis, jo tas ir aptuveni vienāds ar 4thattālums, bet mēs apsvērsim 5 kopas, jo to pašu mēs aprēķinājām K-vidējā algoritmā.

Tātad optimālais klasteru skaits būs 5 , un mēs apmācīsim modeli nākamajā darbībā, izmantojot to pašu.

3. darbība: hierarhiskās klasterizācijas modeļa apmācība

Tā kā mēs zinām nepieciešamo optimālo klasteru skaitu, tagad varam apmācīt savu modeli. Kods ir norādīts zemāk:

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

Iepriekš minētajā kodā mēs esam importējuši Aglomeratīvā klasterizācija scikit mācīties bibliotēkas klastera moduļa klase.

Pēc tam esam izveidojuši šīs klases objektu ar nosaukumu kā hc. AgglomerativeClustering klasei ir šādi parametri:

    n_klasteri=5: Tas nosaka klasteru skaitu, un mēs šeit esam izvēlējušies 5, jo tas ir optimālais klasteru skaits.affinity='eiklīda': tā ir metrika, ko izmanto, lai aprēķinātu saikni.linkage='ward': Tas definē sasaistes kritērijus, šeit mēs esam izmantojuši “nodaļas” saiti. Šī metode ir populārā sasaistes metode, ko mēs jau esam izmantojuši Dendrogrammas izveidošanai. Tas samazina dispersiju katrā klasterī.

Pēdējā rindā esam izveidojuši atkarīgo mainīgo y_pred, lai tas atbilstu vai apmācītu modeli. Tas apmāca ne tikai modeli, bet arī atgriež klasterus, kuriem pieder katrs datu punkts.

Pēc iepriekš minēto koda rindu izpildes, ja mēs savā Sypder IDE izejam mainīgo pārlūka opciju, mēs varam pārbaudīt mainīgo y_pred. Mēs varam salīdzināt sākotnējo datu kopu ar mainīgo y_pred. Apsveriet tālāk redzamo attēlu:

Hierarhiskā klasterizācija mašīnmācībā

Kā redzams iepriekš redzamajā attēlā, y_pred parāda kopu vērtību, kas nozīmē, ka klienta ID 1 pieder pie 5thklasteris (jo indeksēšana sākas no 0, tāpēc 4 nozīmē 5thklasteris), klienta ID 2 pieder 4thklasteris un tā tālāk.

4. darbība: klasteru vizualizācija

Tā kā mēs esam veiksmīgi apmācījuši savu modeli, tagad mēs varam vizualizēt datu kopai atbilstošās kopas.

java bool uz virkni

Šeit mēs izmantosim tās pašas koda rindas, ko izmantojām k-means klasterizācijā, izņemot vienu izmaiņu. Šeit mēs nezīmēsim centroīdu k-vidējos, jo šeit mēs esam izmantojuši dendrogrammu, lai noteiktu optimālo klasteru skaitu. Kods ir norādīts zemāk:

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

Izvade: izpildot iepriekš minētās koda rindas, mēs iegūsim šādu izvadi:

Hierarhiskā klasterizācija mašīnmācībā