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:
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:
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:
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:
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:
Koraki predhodne obdelave podatkov:
V tem koraku bomo uvozili knjižnice in nabore podatkov za naš model.
# 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.
# 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:
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
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:
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:
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:
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: