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:
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ů:
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:
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:
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:
Kroky předběžného zpracování dat:
V tomto kroku naimportujeme knihovny a datové sady pro náš model.
# 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.
# 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:
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 :
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:
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:
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:
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: