logo

Hierarhično združevanje v strojnem učenju

Hierarhično združevanje v gruče je še en nenadzorovan algoritem strojnega učenja, ki se uporablja za združevanje neoznačenih nizov podatkov v gručo in znan tudi kot hierarhična analiza grozdov ali HCA.

V tem algoritmu razvijemo hierarhijo gruč v obliki drevesa in ta struktura v obliki drevesa je znana kot dendrogram .

Včasih so lahko rezultati združevanja v gruče K-means in hierarhičnega združevanja podobni, vendar se oba razlikujeta glede na to, kako delujeta. Ker ni zahteve po vnaprejšnji določitvi števila gruč, kot smo to storili v algoritmu K-Means.

Tehnika hierarhičnega združevanja v gruče ima dva pristopa:

    aglomeracija:Aglomeracija je a od spodaj navzgor pristop, pri katerem se algoritem začne tako, da vse podatkovne točke vzame kot posamezne gruče in jih združi, dokler ne ostane en grozd.Razdiralno:Razdelilni algoritem je obratno od aglomerativnega algoritma, saj je a pristop od zgoraj navzdol.

Zakaj hierarhično združevanje?

Kot že imamo druge grozdenje algoritmi kot npr K-pomeni združevanje v gruče , zakaj potem potrebujemo hierarhično združevanje v gruče? Torej, kot smo videli pri združevanju v gruče K-means, obstaja nekaj izzivov s tem algoritmom, ki so vnaprej določeno število gruč, in vedno poskuša ustvariti gruče enake velikosti. Za rešitev teh dveh izzivov se lahko odločimo za algoritem hierarhičnega grozdenja, saj nam pri tem algoritmu ni treba poznati vnaprej določenega števila grozdov.

V tej temi bomo razpravljali o aglomerativnem hierarhičnem algoritmu združevanja v gruče.

Aglomerativno hierarhično združevanje v gruče

Aglomerativni hierarhični algoritem združevanja v gruče je priljubljen primer HCA. Za združevanje naborov podatkov v gruče sledi pristop od spodaj navzgor . To pomeni, da ta algoritem vsak nabor podatkov na začetku obravnava kot en sam grozd, nato pa začne združevati najbližji par grozdov skupaj. To počne, dokler se vse gruče ne združijo v eno samo gručo, ki vsebuje vse nabore podatkov.

Ta hierarhija grozdov je predstavljena v obliki dendrograma.

Kako deluje aglomerativno hierarhično združevanje?

Delovanje algoritma AHC je mogoče pojasniti s spodnjimi koraki:

    Korak 1:Vsako podatkovno točko ustvarite kot eno gručo. Recimo, da obstaja N podatkovnih točk, zato bo tudi število gruč N.
    Hierarhično združevanje v strojnem učenju 2. korak:Vzemite dve najbližji podatkovni točki ali gruči in ju združite v en grozd. Tako bodo zdaj gruče N-1.
    Hierarhično združevanje v strojnem učenju 3. korak: Spet vzemite dve najbližji skupini in ju združite skupaj, da tvorita eno skupino. Grozdov bo N-2.
    Hierarhično združevanje v strojnem učenju 4. korak:Ponavljajte korak 3, dokler ne ostane samo ena gruča. Tako bomo dobili naslednje grozde. Razmislite o spodnjih slikah:
    Hierarhično združevanje v strojnem učenju
    Hierarhično združevanje v strojnem učenju
    Hierarhično združevanje v strojnem učenju 5. korak:Ko so vsi grozdi združeni v en velik grozd, razvijte dendrogram, da razdelite grozde glede na problem.

Opomba: Za boljše razumevanje hierarhičnega združevanja v gruče priporočamo, da si ogledate združevanje k-sredstev v gruče

Izmerite razdaljo med dvema grozdoma

Kot smo videli, je najbližjo razdaljo med obema grozdoma je ključnega pomena za hierarhično združevanje v gruče. Obstaja več načinov za izračun razdalje med dvema gručema in ti načini določajo pravilo za gručevanje. Ti ukrepi se imenujejo Metode povezovanja . Nekaj ​​priljubljenih načinov povezovanja je navedenih spodaj:

    Enojna povezava:Je najkrajša razdalja med najbližjimi točkami grozdov. Razmislite o spodnji sliki:
    Hierarhično združevanje v strojnem učenju Popolna povezava:Je največja razdalja med dvema točkama dveh različnih gruč. Je ena izmed priljubljenih metod povezovanja, saj tvori tesnejše grozde kot enojno povezovanje.
    Hierarhično združevanje v strojnem učenju Povprečna povezava:To je metoda povezovanja, pri kateri se razdalja med vsakim parom naborov podatkov sešteje in nato deli s skupnim številom naborov podatkov, da se izračuna povprečna razdalja med dvema grozdoma. Je tudi eden izmed najbolj priljubljenih načinov povezovanja.Centroidna povezava:To je povezovalna metoda, pri kateri se izračuna razdalja med težiščem grozdov. Razmislite o spodnji sliki:
    Hierarhično združevanje v strojnem učenju

Od zgoraj navedenih pristopov lahko uporabimo katerega koli od njih glede na vrsto problema ali poslovne zahteve.

Delovanje dendrograma v hierarhičnem grozdenju

Dendrogram je drevesna struktura, ki se večinoma uporablja za shranjevanje vsakega koraka kot pomnilnika, ki ga izvaja algoritem HC. Na grafu dendrograma prikazuje os Y evklidske razdalje med podatkovnimi točkami, os x pa vse podatkovne točke danega niza podatkov.

javanski niz je prazen

Delovanje dendrograma je mogoče pojasniti s spodnjim diagramom:

Hierarhično združevanje v strojnem učenju

Na zgornjem diagramu levi del prikazuje, kako nastajajo grozdi pri aglomerativnem grozdenju, desni del pa prikazuje ustrezen dendrogram.

  • Kot smo razpravljali zgoraj, se najprej podatkovni točki P2 in P3 združita in tvorita gručo, zato se ustvari dendrogram, ki povezuje P2 in P3 s pravokotno obliko. Višina se določi glede na evklidsko razdaljo med podatkovnima točkama.
  • V naslednjem koraku P5 in P6 tvorita gručo in ustvarjen je ustrezen dendrogram. Višja je od prejšnje, saj je evklidska razdalja med P5 in P6 malo večja od P2 in P3.
  • Spet sta ustvarjena dva nova dendrograma, ki združujeta P1, P2 in P3 v enem dendrogramu ter P4, P5 in P6 v drugem dendrogramu.
  • Končno je ustvarjen končni dendrogram, ki združuje vse podatkovne točke.

Drevesno strukturo dendrograma lahko izrežemo na kateri koli ravni glede na naše zahteve.

osnovni pas proti širokopasovnemu

Izvedba aglomerativnega hierarhičnega združevanja v Python

Zdaj si bomo ogledali praktično implementacijo algoritma aglomerativnega hierarhičnega združevanja v gruče z uporabo Pythona. Za izvedbo tega bomo uporabili isto težavo nabora podatkov, kot smo jo uporabili v prejšnji temi združevanja v gruče K-sredstev, da bomo lahko zlahka primerjali oba koncepta.

Nabor podatkov vsebuje informacije o strankah, ki so nakupovalno središče obiskale. Torej, lastnik nakupovalnega središča želi najti nekaj vzorcev ali določeno vedenje svojih strank z uporabo informacij nabora podatkov.

Koraki za implementacijo AHC z uporabo Pythona:

Koraki za izvedbo bodo enaki kot pri združevanju k-povprečij v gruče, razen nekaterih sprememb, kot je metoda za iskanje števila gruč. Spodaj so navedeni koraki:

    Predhodna obdelava podatkov Iskanje optimalnega števila gruč z uporabo Dendrograma Učenje hierarhičnega modela grozdenja Vizualizacija grozdov

Koraki predhodne obdelave podatkov:

V tem koraku bomo uvozili knjižnice in nabore podatkov za naš model.

    Uvažanje knjižnic
 # Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 

Zgornje vrstice kode se uporabljajo za uvoz knjižnic za izvajanje določenih nalog, kot je npr numpy za matematične operacije, matplotlib za risanje grafov ali razpršenega grafa in pande za uvoz nabora podatkov.

    Uvažanje nabora podatkov
 # Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv') 

Kot je razloženo zgoraj, smo uvozili isti nabor podatkov Mall_Customers_data.csv, kot smo storili pri združevanju k-sredstev v gruče. Razmislite o spodnjem rezultatu:

Hierarhično združevanje v strojnem učenju
    Ekstrahiranje matrike funkcij

Tukaj bomo izluščili samo matriko funkcij, ker nimamo dodatnih informacij o odvisni spremenljivki. Koda je navedena spodaj:

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

Tukaj smo ekstrahirali samo 3 in 4 stolpce, saj bomo za ogled grozdov uporabili 2D graf. Torej upoštevamo oceno letnega dohodka in porabe kot matriko funkcij.

Korak 2: Iskanje optimalnega števila grozdov z uporabo Dendrograma

Zdaj bomo našli optimalno število grozdov z uporabo dendrograma za naš model. Za to bomo uporabili scipy knjižnico, saj zagotavlja funkcijo, ki bo neposredno vrnila dendrogram za našo kodo. Razmislite o spodnjih vrsticah kode:

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

V zgornjih vrsticah kode smo uvozili hierarhija modul knjižnice scipy. Ta modul nam ponuja metodo shc.denrogram(), ki vzame povezava() kot parameter. Funkcija povezovanja se uporablja za definiranje razdalje med dvema grozdoma, zato smo tukaj posredovali x (matriko funkcij) in metodo ' oddelek ,' priljubljena metoda povezovanja v hierarhičnem grozdenju.

Preostale vrstice kode opisujejo oznake za risbo dendrograma.

Izhod:

Z izvedbo zgornjih vrstic kode bomo dobili spodnji rezultat :

znak v int v Javi
Hierarhično združevanje v strojnem učenju

Z uporabo tega dendrograma bomo zdaj določili optimalno število grozdov za naš model. Za to bomo našli največja navpična razdalja ki ne reže nobene vodoravne palice. Razmislite o spodnjem diagramu:

Hierarhično združevanje v strojnem učenju

V zgornjem diagramu smo prikazali navpične razdalje, ki ne sekajo svojih vodoravnih palic. Kot si lahko predstavljamo, 4thrazdalja je videti največja, tako da glede na to, število grozdov bo 5 (navpične črte v tem območju). Lahko vzamemo tudi 2ndštevilo, saj je približno enako 4thrazdaljo, vendar bomo upoštevali 5 grozdov, ker smo isto izračunali v algoritmu K-means.

Torej bo optimalno število grozdov 5 , model pa bomo usposobili v naslednjem koraku z uporabo istega.

3. korak: Usposabljanje hierarhičnega modela združevanja v gruče

Ker poznamo zahtevano optimalno število gruč, lahko zdaj urimo naš model. Koda je navedena spodaj:

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

V zgornji kodi smo uvozili Aglomerativno združevanje razred modula gruče učne knjižnice scikit.

Nato smo ustvarili objekt tega razreda z imenom as hc. Razred AgglomerativeClustering ima naslednje parametre:

    n_gruč=5: Določa število grozdov in tukaj smo vzeli 5, ker je to optimalno število grozdov.affinity='euclidean': To je metrika, ki se uporablja za izračun povezave.linkage='ward': Določa kriterije povezovanja, tukaj smo uporabili povezavo 'ward'. Ta metoda je priljubljena povezovalna metoda, ki smo jo že uporabili za ustvarjanje Dendrograma. Zmanjša varianco v vsaki skupini.

V zadnji vrstici smo ustvarili odvisno spremenljivko y_pred za prilagajanje ali usposabljanje modela. Ne usposablja le modela, ampak vrne tudi gruče, ki jim pripada vsaka podatkovna točka.

Po izvedbi zgornjih vrstic kode, če gremo skozi možnost raziskovalca spremenljivk v našem Sypder IDE, lahko preverimo spremenljivko y_pred. Izvirni nabor podatkov lahko primerjamo s spremenljivko y_pred. Razmislite o spodnji sliki:

Hierarhično združevanje v strojnem učenju

Kot lahko vidimo na zgornji sliki, je y_pred prikazuje vrednost grozdov, kar pomeni, da ID stranke 1 pripada 5thgrozd (ker se indeksiranje začne od 0, torej 4 pomeni 5thgrozd), ID stranke 2 pripada 4thgrozd, in tako naprej.

4. korak: Vizualizacija grozdov

Ker smo naš model uspešno usposobili, lahko zdaj vizualiziramo gruče, ki ustrezajo naboru podatkov.

Tukaj bomo uporabili iste vrstice kode kot pri združevanju k-sredstev v gruče, razen ene spremembe. Tukaj ne bomo narisali centroida, ki smo ga naredili v k-povprečjih, ker smo tukaj uporabili dendrogram za določitev optimalnega števila grozdov. Koda je navedena spodaj:

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

Izhod: Z izvedbo zgornjih vrstic kode bomo dobili spodnji izhod:

Hierarhično združevanje v strojnem učenju