logo

Hierarchické shlukování ve strojovém učení

Hierarchické shlukování je další algoritmus strojového učení bez dozoru, který se používá k seskupování neoznačených datových sad do clusteru a také známý jako hierarchická shluková analýza nebo HCA.

V tomto algoritmu vyvíjíme hierarchii shluků ve formě stromu a tato stromová struktura je známá jako dendrogram .

Někdy mohou výsledky shlukování K-means a hierarchického shlukování vypadat podobně, ale oba se liší v závislosti na tom, jak fungují. Vzhledem k tomu, že neexistuje žádný požadavek na předurčení počtu shluků, jak jsme to udělali v algoritmu K-Means.

Technika hierarchického shlukování má dva přístupy:

    Aglomerativní:Aglomerativní je a zdola nahoru přístup, ve kterém algoritmus začíná tím, že vezme všechny datové body jako jednotlivé shluky a sloučí je, dokud nezbude jeden shluk.Dělící:Dělící algoritmus je opakem aglomerativního algoritmu, protože je a přístup shora dolů.

Proč hierarchické shlukování?

Jako už máme jiné shlukování algoritmy jako např K-Means Clustering , proč tedy potřebujeme hierarchické shlukování? Jak jsme tedy viděli u shlukování K-means, s tímto algoritmem existují určité problémy, které představují předem určený počet shluků, a vždy se snaží vytvořit shluky stejné velikosti. K vyřešení těchto dvou problémů se můžeme rozhodnout pro algoritmus hierarchického shlukování, protože v tomto algoritmu nepotřebujeme znát předem definovaný počet shluků.

V tomto tématu budeme diskutovat o aglomerativním hierarchickém shlukovacím algoritmu.

Aglomerativní hierarchické shlukování

Aglomerativní hierarchický shlukovací algoritmus je oblíbeným příkladem HCA. Chcete-li seskupit datové sady do shluků, postupujte takto přístup zdola nahoru . To znamená, že tento algoritmus na začátku považuje každou datovou sadu za jeden cluster a poté začne kombinovat nejbližší pár clusterů dohromady. Dělá to, dokud nejsou všechny clustery sloučeny do jednoho clusteru, který obsahuje všechny datové sady.

bubble sort java

Tato hierarchie shluků je znázorněna ve formě dendrogramu.

Jak funguje aglomerativní hierarchické shlukování?

Fungování algoritmu AHC lze vysvětlit pomocí následujících kroků:

    Krok 1:Vytvořte každý datový bod jako jeden cluster. Řekněme, že existuje N datových bodů, takže počet shluků bude také N.
    Hierarchické shlukování ve strojovém učení Krok 2:Vezměte dva nejbližší datové body nebo shluky a sloučte je do jednoho shluku. Takže nyní bude N-1 clusterů.
    Hierarchické shlukování ve strojovém učení Krok-3: Opět vezměte dva nejbližší shluky a spojte je dohromady, abyste vytvořili jeden shluk. Budou tam N-2 clustery.
    Hierarchické shlukování ve strojovém učení Krok 4:Opakujte krok 3, dokud nezůstane pouze jeden shluk. Dostaneme tedy následující shluky. Zvažte níže uvedené obrázky:
    Hierarchické shlukování ve strojovém učení
    Hierarchické shlukování ve strojovém učení
    Hierarchické shlukování ve strojovém učení Krok 5:Jakmile jsou všechny shluky sloučeny do jednoho velkého shluku, vypracujte dendrogram pro rozdělení shluků podle problému.

Poznámka: Pro lepší pochopení hierarchického shlukování se doporučuje podívat se na shlukování k-means

Změřte vzdálenost mezi dvěma shluky

Jak jsme viděli, nejbližší vzdálenost mezi těmito dvěma shluky je rozhodující pro hierarchické shlukování. Existují různé způsoby, jak vypočítat vzdálenost mezi dvěma shluky, a tyto způsoby rozhodují o pravidle pro shlukování. Tato opatření se nazývají Vazební metody . Některé z oblíbených metod propojení jsou uvedeny níže:

    Jednoduché propojení:Je to nejkratší vzdálenost mezi nejbližšími body shluků. Zvažte následující obrázek:
    Hierarchické shlukování ve strojovém učení Kompletní propojení:Je to nejvzdálenější vzdálenost mezi dvěma body dvou různých shluků. Je to jedna z populárních vazebných metod, protože tvoří těsnější shluky než jednoduchá vazba.
    Hierarchické shlukování ve strojovém učení Průměrná vazba:Je to metoda propojení, ve které se vzdálenost mezi každou dvojicí datových sad sečte a poté vydělí celkovým počtem datových sad, aby se vypočítala průměrná vzdálenost mezi dvěma shluky. Je to také jedna z nejoblíbenějších metod propojení.Středové spojení:Je to metoda propojení, při které se vypočítává vzdálenost mezi těžištěm shluků. Zvažte následující obrázek:
    Hierarchické shlukování ve strojovém učení

Z výše uvedených přístupů můžeme aplikovat kterýkoli z nich podle typu problému nebo obchodního požadavku.

Woking dendrogramu v hierarchickém shlukování

Dendrogram je stromová struktura, která se používá hlavně k uložení každého kroku jako paměti, kterou provádí algoritmus HC. V grafu dendrogramu osa Y ukazuje euklidovské vzdálenosti mezi datovými body a osa x ukazuje všechny datové body daného datového souboru.

Fungování dendrogramu lze vysvětlit pomocí níže uvedeného diagramu:

Hierarchické shlukování ve strojovém učení

Ve výše uvedeném diagramu levá část ukazuje, jak se vytvářejí shluky v aglomerativním shlukování, a pravá část ukazuje odpovídající dendrogram.

  • Jak jsme diskutovali výše, za prvé se datové body P2 a P3 spojí dohromady a vytvoří shluk, odpovídajícím způsobem se vytvoří dendrogram, který spojí P2 a P3 s obdélníkovým tvarem. Výška je určena podle euklidovské vzdálenosti mezi datovými body.
  • V dalším kroku P5 a P6 vytvoří shluk a vytvoří se odpovídající dendrogram. Je vyšší než předchozí, protože euklidovská vzdálenost mezi P5 a P6 je o něco větší než P2 a P3.
  • Opět jsou vytvořeny dva nové dendrogramy, které kombinují P1, P2 a P3 v jednom dendrogramu a P4, P5 a P6 v jiném dendrogramu.
  • Nakonec je vytvořen konečný dendrogram, který kombinuje všechny datové body dohromady.

Stromovou strukturu dendrogramu můžeme oříznout na jakékoli úrovni podle našich požadavků.

Implementace aglomerativního hierarchického shlukování v Pythonu

Nyní uvidíme praktickou implementaci aglomerativního hierarchického shlukovacího algoritmu pomocí Pythonu. Abychom to implementovali, použijeme stejný problém s datovou množinou, který jsme použili v předchozím tématu shlukování K-means, abychom mohli oba koncepty snadno porovnat.

Datový soubor obsahuje informace o zákaznících, kteří navštívili nákupní centrum za účelem nákupu. Majitel obchodního centra tedy chce najít nějaké vzorce nebo konkrétní chování svých zákazníků pomocí informací o datové sadě.

Kroky pro implementaci AHC pomocí Pythonu:

Kroky implementace budou stejné jako u shlukování k-means, s výjimkou některých změn, jako je způsob zjištění počtu shluků. Níže jsou uvedeny kroky:

    Předzpracování dat Nalezení optimálního počtu shluků pomocí Dendrogramu Trénink modelu hierarchického shlukování Vizualizace shluků

Kroky předběžného zpracování dat:

V tomto kroku naimportujeme knihovny a datové sady pro náš model.

    Import knihoven
 # Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 

Výše uvedené řádky kódu slouží k importu knihoven k provádění specifických úkolů, jako je např nemotorný pro matematické operace, matplotlib pro kreslení grafů nebo bodového grafu a pandy pro import datové sady.

    Import datové sady
 # Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv') 

Jak bylo uvedeno výše, importovali jsme stejnou datovou sadu Mall_Customers_data.csv, jako jsme to udělali při shlukování k-means. Zvažte následující výstup:

Hierarchické shlukování ve strojovém učení
    Extrahování matice prvků

Zde budeme extrahovat pouze matici funkcí, protože nemáme žádné další informace o závislé proměnné. Kód je uveden níže:

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

Zde jsme extrahovali pouze 3 a 4 sloupce, protože k zobrazení shluků použijeme 2D graf. Roční skóre příjmů a výdajů tedy považujeme za matici funkcí.

Krok 2: Nalezení optimálního počtu shluků pomocí Dendrogramu

Nyní najdeme optimální počet shluků pomocí Dendrogramu pro náš model. K tomu použijeme scipy knihovna, protože poskytuje funkci, která přímo vrátí dendrogram pro náš kód. Zvažte následující řádky 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() 

Ve výše uvedených řádcích kódu jsme importovali hierarchie modul knihovny scipy. Tento modul nám poskytuje metodu shc.denrogram(), který bere vazba() jako parametr. Funkce propojení se používá k definování vzdálenosti mezi dvěma shluky, takže zde jsme předali x (matici funkcí) a metodu ' oddělení “, populární metoda propojení v hierarchickém shlukování.

Zbývající řádky kódu mají popisovat popisky pro graf dendrogramu.

narodil se Freddie Mercury

Výstup:

Spuštěním výše uvedených řádků kódu získáme níže uvedený výstup :

Hierarchické shlukování ve strojovém učení

Pomocí tohoto Dendrogramu nyní určíme optimální počet shluků pro náš model. Za tímto účelem najdeme maximální vertikální vzdálenost která neřeže žádnou vodorovnou lištu. Zvažte níže uvedený diagram:

Hierarchické shlukování ve strojovém učení

Ve výše uvedeném diagramu jsme ukázali svislé vzdálenosti, které neřežou jejich vodorovné pruhy. Jak si můžeme představit, 4čtvzdálenost vypadá na maximum, takže podle toho, počet klastrů bude 5 (svislé čáry v tomto rozsahu). Můžeme vzít i 2ndčíslo, protože se přibližně rovná 4čtvzdálenost, ale budeme uvažovat 5 shluků, protože totéž jsme vypočítali v algoritmu K-means.

Optimální počet shluků tedy bude 5 , a model natrénujeme v dalším kroku pomocí stejného.

Krok 3: Školení modelu hierarchického shlukování

Protože známe požadovaný optimální počet shluků, můžeme nyní trénovat náš model. Kód je uveden níže:

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

Ve výše uvedeném kódu jsme importovali Aglomerativní klastrování třída clusteru modul knihovny scikit learn.

Potom jsme vytvořili objekt této třídy s názvem as hc. Třída AgglomerativeClustering má následující parametry:

    n_clusters=5: Definuje počet shluků a my jsme zde vzali 5, protože je to optimální počet shluků.afinita='euklidovská': Je to metrika používaná k výpočtu vazby.linkage='ward': Definuje kritéria vazby, zde jsme použili vazbu 'ward'. Tato metoda je oblíbenou metodou propojení, kterou jsme již použili pro vytvoření Dendrogramu. Snižuje rozptyl v každém shluku.

V posledním řádku jsme vytvořili závislou proměnnou y_pred pro přizpůsobení nebo trénování modelu. Trénuje nejen model, ale také vrací shluky, do kterých každý datový bod patří.

Pokud po provedení výše uvedených řádků kódu projdeme volbou průzkumníka proměnných v našem Sypder IDE, můžeme zkontrolovat proměnnou y_pred. Původní datovou sadu můžeme porovnat s proměnnou y_pred. Zvažte následující obrázek:

Hierarchické shlukování ve strojovém učení

Jak můžeme vidět na obrázku výše, y_před zobrazuje hodnotu clusterů, což znamená, že ID zákazníka 1 patří do 5čtcluster (protože indexování začíná od 0, takže 4 znamená 5čtcluster), ID zákazníka 2 patří do 4čtcluster a tak dále.

Krok 4: Vizualizace shluků

Protože jsme úspěšně trénovali náš model, nyní můžeme vizualizovat shluky odpovídající datové sadě.

Zde použijeme stejné řádky kódu jako při shlukování k-means, s výjimkou jedné změny. Zde nebudeme vykreslovat těžiště, které jsme provedli v k-průměrech, protože zde jsme použili dendrogram k určení optimálního počtu shluků. Kód je uveden níže:

 #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: Spuštěním výše uvedených řádků kódu získáme níže uvedený výstup:

Hierarchické shlukování ve strojovém učení