logo

Hierarchické klastrovanie v strojovom učení

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
    Aglomeratívne:Aglomeratívne je a zdola nahor prístup, v ktorom algoritmus začína brať všetky dátové body ako samostatné klastre a spájať ich, kým nezostane jeden klaster.Rozdeľujúce:Deliaci algoritmus je opakom aglomeratívneho algoritmu, keďže je a prístup zhora nadol.

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:

    Krok 1:Vytvorte každý údajový bod ako jeden klaster. Povedzme, že existuje N dátových bodov, takže počet klastrov bude tiež N.
    Hierarchické klastrovanie v strojovom učení Krok 2:Vezmite dva najbližšie dátové body alebo klastre a zlúčte ich do jedného klastra. Takže teraz budú klastre N-1.
    Hierarchické klastrovanie v strojovom učení Krok-3: Opäť vezmite dva najbližšie zhluky a spojte ich, aby vytvorili jeden zhluk. Bude tam N-2 klastrov.
    Hierarchické klastrovanie v strojovom učení Krok 4:Opakujte krok 3, kým nezostane iba jeden klaster. Takže dostaneme nasledujúce klastre. Zvážte nasledujúce obrázky:
    Hierarchické klastrovanie v strojovom učení
    Hierarchické klastrovanie v strojovom učení
    Hierarchické klastrovanie v strojovom učení Krok 5:Keď sú všetky zhluky spojené do jedného veľkého zhluku, vytvorte dendrogram na rozdelenie zhlukov podľa problému.

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:

    Jednoduché prepojenie:Je to najkratšia vzdialenosť medzi najbližšími bodmi zhlukov. Zvážte nasledujúci obrázok:
    Hierarchické klastrovanie v strojovom učení Kompletné prepojenie:Je to najvzdialenejšia vzdialenosť medzi dvoma bodmi dvoch rôznych zhlukov. Je to jedna z populárnych metód prepojenia, pretože vytvára užšie zhluky ako jednoduché prepojenie.
    Hierarchické klastrovanie v strojovom učení Priemerná väzba:Je to metóda prepojenia, pri ktorej sa vzdialenosť medzi každým párom množín údajov sčíta a potom sa vydelí celkovým počtom množín údajov, aby sa vypočítala priemerná vzdialenosť medzi dvoma klastrami. Je to tiež jedna z najpopulárnejších metód spájania.Stredové spojenie:Je to metóda spojenia, pri ktorej sa vypočíta vzdialenosť medzi ťažiskom zhlukov. Zvážte nasledujúci obrázok:
    Hierarchické klastrovanie v strojovom učení

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:

Hierarchické klastrovanie v strojovom učení

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:

    Predspracovanie údajov Nájdenie optimálneho počtu zhlukov pomocou Dendrogramu Školenie modelu hierarchického zhlukovania Vizualizácia klastrov

Kroky predbežného spracovania údajov:

V tomto kroku naimportujeme knižnice a množiny údajov pre náš model.

    Importovanie knižníc
 # 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
    Importovanie súboru údajov
 # 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
Hierarchické klastrovanie v strojovom učení
    Extrahovanie matice funkcií

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 :

Hierarchické klastrovanie v strojovom učení

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:

Hierarchické klastrovanie v strojovom učení

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:

    n_clusters=5: Definuje počet zhlukov a my sme tu vzali 5, pretože je to optimálny počet zhlukov.afinita='euklidovská': Je to metrika používaná na výpočet prepojenia.linkage='ward': Definuje kritériá prepojenia, tu sme použili prepojenie „ward“. Táto metóda je populárna väzbová metóda, ktorú sme už použili na vytvorenie Dendrogramu. Znižuje rozptyl v každom klastri.

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:

Hierarchické klastrovanie v strojovom učení

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
Hierarchické klastrovanie v strojovom učení