Hierarchické klastrovanie je ďalší algoritmus strojového učenia bez dozoru, ktorý sa používa na zoskupenie neoznačených množín údajov do klastra a známy aj ako hierarchická zhluková analýza alebo HCA.
V tomto algoritme vyvíjame hierarchiu zhlukov vo forme stromu a táto stromová štruktúra je známa ako dendrogram .
Niekedy môžu výsledky klastrovania K-means a hierarchického klastrovania vyzerať podobne, ale oba sa líšia v závislosti od toho, ako fungujú. Pretože nie je potrebné vopred určiť počet zhlukov, ako sme to urobili v algoritme K-Means.
Technika hierarchického zoskupovania má dva prístupy:
java nemenný zoznam
Prečo hierarchické zoskupovanie?
Ako už máme iné zhlukovanie algoritmy ako napr K-Means Clustering Prečo potom potrebujeme hierarchické zoskupovanie? Takže, ako sme videli pri zhlukovaní K-means, s týmto algoritmom existujú určité problémy, ktoré predstavujú vopred určený počet zhlukov, a vždy sa snaží vytvoriť zhluky rovnakej veľkosti. Na vyriešenie týchto dvoch výziev sa môžeme rozhodnúť pre hierarchický klastrovací algoritmus, pretože v tomto algoritme nepotrebujeme mať znalosti o preddefinovanom počte klastrov.
V tejto téme budeme diskutovať o aglomeračnom hierarchickom klastrovom algoritme.
Aglomeratívne Hierarchické zhlukovanie
Algoritmus aglomeratívneho hierarchického klastrovania je populárnym príkladom HCA. Ak chcete zoskupiť množiny údajov do klastrov, postupujte takto prístup zdola nahor . To znamená, že tento algoritmus považuje na začiatku každý súbor údajov za jeden klaster a potom začne kombinovať najbližší pár klastrov. Robí to dovtedy, kým sa všetky klastre nezlúčia do jedného klastra, ktorý obsahuje všetky množiny údajov.
Táto hierarchia zhlukov je znázornená vo forme dendrogramu.
Ako funguje aglomeratívne hierarchické zhlukovanie?
Fungovanie algoritmu AHC možno vysvetliť pomocou nasledujúcich krokov:
Poznámka: Aby ste lepšie porozumeli hierarchickému klastrovaniu, odporúčame vám pozrieť sa na klastrovanie k-means
Zmerajte vzdialenosť medzi dvoma klastrami
Ako sme videli, najbližšia vzdialenosť medzi týmito dvoma klastrami je rozhodujúce pre hierarchické zhlukovanie. Existujú rôzne spôsoby, ako vypočítať vzdialenosť medzi dvoma zhlukmi, a tieto spôsoby rozhodujú o pravidle pre zhlukovanie. Tieto opatrenia sú tzv Metódy prepojenia . Niektoré z populárnych spôsobov prepojenia sú uvedené nižšie:
Z vyššie uvedených prístupov vieme aplikovať ktorýkoľvek z nich podľa typu problému alebo obchodnej požiadavky.
Woking dendrogramu v hierarchickom zhlukovaní
Dendrogram je stromová štruktúra, ktorá sa používa hlavne na uloženie každého kroku ako pamäte, ktorú vykonáva algoritmus HC. V grafe dendrogramu os Y zobrazuje euklidovské vzdialenosti medzi dátovými bodmi a os x ukazuje všetky dátové body daného súboru údajov.
Fungovanie dendrogramu možno vysvetliť pomocou nasledujúceho diagramu:
Vo vyššie uvedenom diagrame ľavá časť ukazuje, ako sa vytvárajú zhluky v aglomeratívnom zhlukovaní, a pravá časť zobrazuje zodpovedajúci dendrogram.
- Ako sme diskutovali vyššie, po prvé, dátové body P2 a P3 sa spoja a vytvoria zhluk, zodpovedajúcim spôsobom sa vytvorí dendrogram, ktorý spája P2 a P3 s obdĺžnikovým tvarom. O výške sa rozhoduje podľa euklidovskej vzdialenosti medzi dátovými bodmi.
- V ďalšom kroku P5 a P6 vytvoria zhluk a vytvorí sa zodpovedajúci dendrogram. Je vyššia ako predchádzajúca, pretože euklidovská vzdialenosť medzi P5 a P6 je o niečo väčšia ako P2 a P3.
- Opäť sú vytvorené dva nové dendrogramy, ktoré kombinujú P1, P2 a P3 v jednom dendrograme a P4, P5 a P6 v ďalšom dendrograme.
- Nakoniec sa vytvorí konečný dendrogram, ktorý kombinuje všetky dátové body dohromady.
Stromovú štruktúru dendrogramu môžeme vyrezať na akejkoľvek úrovni podľa našej požiadavky.
Implementácia aglomeratívneho hierarchického klastrovania v Pythone
Teraz uvidíme praktickú implementáciu aglomeračného hierarchického zhlukovacieho algoritmu pomocou Pythonu. Aby sme to implementovali, použijeme rovnaký problém množiny údajov, ktorý sme použili v predchádzajúcej téme klastrovania K-means, aby sme mohli ľahko porovnať oba koncepty.
Súbor údajov obsahuje informácie o zákazníkoch, ktorí navštívili nákupné centrum. Majiteľ obchodného centra chce teda pomocou informácií o súbore údajov nájsť nejaké vzory alebo konkrétne správanie svojich zákazníkov.
Kroky na implementáciu AHC pomocou Pythonu:
Kroky implementácie budú rovnaké ako pri klastrovaní k-means, s výnimkou niektorých zmien, ako je metóda na zistenie počtu klastrov. Nižšie sú uvedené kroky:
Kroky predbežného spracovania údajov:
V tomto kroku naimportujeme knižnice a množiny údajov pre náš model.
# Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
Vyššie uvedené riadky kódu slúžia na importovanie knižníc na vykonávanie špecifických úloh, ako napr numpy pre matematické operácie, matplotlib na kreslenie grafov alebo bodového grafu a pandy na importovanie súboru údajov.
myflixr
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
Ako je uvedené vyššie, importovali sme rovnaký súbor údajov Mall_Customers_data.csv, ako sme to urobili pri zhlukovaní k-means. Zvážte nasledujúci výstup:
plná forma pvr
Tu vytiahneme iba maticu funkcií, keďže nemáme žiadne ďalšie informácie o závislej premennej. Kód je uvedený nižšie:
x = dataset.iloc[:, [3, 4]].values
Tu sme extrahovali iba 3 a 4 stĺpce, pretože na zobrazenie zhlukov použijeme 2D graf. Ročné skóre príjmov a výdavkov teda považujeme za maticu funkcií.
Krok 2: Nájdenie optimálneho počtu zhlukov pomocou Dendrogramu
Teraz nájdeme optimálny počet zhlukov pomocou Dendrogramu pre náš model. Na tento účel použijeme scipy knižnicu, pretože poskytuje funkciu, ktorá priamo vráti dendrogram pre náš kód. Zvážte nasledujúce riadky kódu:
#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()
Vo vyššie uvedených riadkoch kódu sme importovali hierarchia modul knižnice scipy. Tento modul nám poskytuje metódu shc.denrogram(), ktorý berie prepojenie() ako parameter. Funkcia prepojenia sa používa na definovanie vzdialenosti medzi dvoma klastrami, takže tu sme odovzdali x (maticu funkcií) a metódu ' oddelení , populárna metóda prepojenia v hierarchickom zhlukovaní.
Zostávajúce riadky kódu majú popisovať označenia grafu dendrogramu.
Výkon:
Vykonaním vyššie uvedených riadkov kódu získame výstup uvedený nižšie :
Pomocou tohto Dendrogramu teraz určíme optimálny počet zhlukov pre náš model. Na tento účel nájdeme maximálna vertikálna vzdialenosť ktorá neprerezáva žiadnu vodorovnú lištu. Zvážte nasledujúci diagram:
Vo vyššie uvedenom diagrame sme ukázali vertikálne vzdialenosti, ktoré nerežú ich vodorovné pruhy. Ako si môžeme predstaviť, 4thvzdialenosť vyzerá na maximum, takže podľa tohto, počet klastrov bude 5 (vertikálne čiary v tomto rozsahu). Môžeme vziať aj 2ndčíslo, pretože sa približne rovná 4thvzdialenosť, ale budeme brať do úvahy 5 zhlukov, pretože to isté sme vypočítali v algoritme K-means.
Optimálny počet klastrov bude teda 5 , a model trénujeme v ďalšom kroku pomocou toho istého.
Krok 3: Školenie modelu hierarchického zhlukovania
Keďže poznáme požadovaný optimálny počet klastrov, môžeme teraz trénovať náš model. Kód je uvedený nižšie:
#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)
Vo vyššie uvedenom kóde sme importovali Aglomeratívne klastrovanie trieda klastrového modulu učebnej knižnice scikit.
Potom sme vytvorili objekt tejto triedy s názvom as hc. Trieda AgglomerativeClustering má nasledujúce parametre:
V poslednom riadku sme vytvorili závislú premennú y_pred na prispôsobenie alebo trénovanie modelu. Trénuje nielen model, ale vracia aj klastre, do ktorých patrí každý dátový bod.
Po vykonaní vyššie uvedených riadkov kódu, ak prejdeme cez možnosť prieskumníka premenných v našom Sypder IDE, môžeme skontrolovať premennú y_pred. Pôvodný súbor údajov môžeme porovnať s premennou y_pred. Zvážte nasledujúci obrázok:
Ako môžeme vidieť na obrázku vyššie, y_pred zobrazuje hodnotu klastrov, čo znamená, že ID zákazníka 1 patrí do 5thklaster (keďže indexovanie začína od 0, takže 4 znamená 5thklaster), ID zákazníka 2 patrí do 4thklaster a pod.
Krok 4: Vizualizácia klastrov
Keďže sme úspešne trénovali náš model, teraz môžeme vizualizovať klastre zodpovedajúce množine údajov.
Tu použijeme rovnaké riadky kódu ako pri zhlukovaní k-means, s výnimkou jednej zmeny. Tu nebudeme vykresľovať ťažisko, ktoré sme urobili v k-priemeroch, pretože tu sme použili dendrogram na určenie optimálneho počtu zhlukov. Kód je uvedený nižšie:
#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()
Výstup: Vykonaním vyššie uvedených riadkov kódu získame nasledujúci výstup:
java math.random