A hierarchikus klaszterezés egy másik felügyelt gépi tanulási algoritmus, amelyet a címkézetlen adatkészletek klaszterekbe történő csoportosítására használnak, és más néven hierarchikus klaszterelemzés vagy HCA.
Ebben az algoritmusban a klaszterek hierarchiáját fa formájúvá alakítjuk ki, és ezt a fa alakú struktúrát a dendrogram .
Néha a K-közép klaszterezés és a hierarchikus klaszterezés eredményei hasonlónak tűnhetnek, de mindkettő különbözik attól függően, hogy hogyan működnek. Mivel nem szükséges előre meghatározni a klaszterek számát, ahogyan azt a K-Means algoritmusban tettük.
A hierarchikus klaszterezési technikának két megközelítése van:
Miért hierarchikus klaszterezés?
Ahogy már más is van klaszterezés algoritmusok, mint pl K-Means Clustering , akkor miért van szükségünk hierarchikus klaszterezésre? Tehát, ahogy a K-közép klaszterezésnél láttuk, ennek az algoritmusnak vannak kihívásai, amelyek előre meghatározott számú klasztert jelentenek, és mindig azonos méretű klasztereket próbál létrehozni. E két kihívás megoldásához választhatjuk a hierarchikus klaszterezési algoritmust, mivel ebben az algoritmusban nem kell tudnunk az előre meghatározott számú klaszterről.
Ebben a témában az agglomeratív hierarchikus klaszterezési algoritmust tárgyaljuk.
nem determinisztikus véges automaták
Agglomeratív hierarchikus klaszterezés
Az agglomeratív hierarchikus klaszterezési algoritmus a HCA népszerű példája. Az adatkészletek fürtökbe történő csoportosításához a következőket kell tenni Alulról felfelé építkező megközelítés . Ez azt jelenti, hogy ez az algoritmus kezdetben minden adatkészletet egyetlen fürtnek tekint, majd elkezdi kombinálni a legközelebbi fürtpárt. Ezt mindaddig teszi, amíg az összes fürt egyetlen fürtté nem egyesül, amely tartalmazza az összes adatkészletet.
A klaszterek ezen hierarchiáját dendrogram formájában ábrázoljuk.
Hogyan működik az agglomeratív hierarchikus klaszterezés?
Az AHC algoritmus működése az alábbi lépésekkel magyarázható:
Megjegyzés: A hierarchikus klaszterezés jobb megértéséhez javasoljuk, hogy tekintse át a k-means klaszterezést.
Mérje meg a két klaszter közötti távolságot
Mint láttuk, a legközelebbi távolság a két klaszter között kulcsfontosságú a hierarchikus klaszterezés szempontjából. A két klaszter közötti távolság kiszámításának többféle módja van, és ezek a módszerek határozzák meg a klaszterezés szabályát. Ezeket az intézkedéseket ún Kapcsolódási módszerek . Az alábbiakban bemutatunk néhány népszerű összekapcsolási módszert:
A fenti megközelítések közül bármelyiket alkalmazhatjuk a probléma típusának vagy az üzleti követelménynek megfelelően.
A dendrogram ébredése hierarchikus klaszterezésben
A dendrogram egy faszerű struktúra, amelyet elsősorban az egyes lépések memóriaként történő tárolására használnak, amelyet a HC algoritmus hajt végre. A dendrogram diagramon az Y tengely az adatpontok közötti euklideszi távolságokat, az x tengely pedig az adott adathalmaz összes adatpontját mutatja.
A dendrogram működése az alábbi diagram segítségével magyarázható:
A fenti diagramon a bal oldali rész azt mutatja, hogyan jönnek létre a klaszterek az agglomeratív klaszterezés során, a jobb oldali pedig a megfelelő dendrogramot.
- Amint azt fentebb tárgyaltuk, először is a P2 és P3 adatpontok egyesülnek és egy klasztert alkotnak, ennek megfelelően egy dendrogram jön létre, amely téglalap alakú P2-t és P3-at köt össze. A magasságot az adatpontok közötti euklideszi távolság alapján határozzuk meg.
- A következő lépésben P5 és P6 egy klasztert alkotnak, és létrejön a megfelelő dendrogram. Ez magasabb, mint az előzőnél, mivel a P5 és P6 közötti euklideszi távolság valamivel nagyobb, mint a P2 és P3.
- Ismét két új dendrogram jön létre, amelyek a P1-et, P2-t és P3-at egy dendrogramban, a P4-et, P5-öt és P6-ot pedig egy másik dendrogramban egyesítik.
- Végül létrejön a végső dendrogram, amely egyesíti az összes adatpontot.
A dendrogram fa szerkezetét igényünk szerint bármilyen szinten kivághatjuk.
Az agglomeratív hierarchikus klaszterezés Python megvalósítása
Most látni fogjuk az agglomeratív hierarchikus klaszterezési algoritmus gyakorlati megvalósítását Python használatával. Ennek megvalósításához ugyanazt az adathalmaz-problémát fogjuk használni, amelyet a K-közép klaszterezés előző témakörében használtunk, így könnyen összehasonlíthatjuk a két fogalmat.
Az adatkészlet azon ügyfelek adatait tartalmazza, akik bevásárlóközpontba látogattak. Tehát a bevásárlóközpont tulajdonosa az adatkészlet-információk segítségével szeretné megtalálni ügyfelei bizonyos mintáit vagy bizonyos viselkedését.
Az AHC Python használatával történő megvalósításának lépései:
A megvalósítás lépései megegyeznek a k-közép klaszterezéséval, kivéve néhány változtatást, például a klaszterek számának meghatározásának módszerét. Alább láthatók a lépések:
Az adatok előfeldolgozásának lépései:
Ebben a lépésben importálni fogjuk a modellünkhöz tartozó könyvtárakat és adatkészleteket.
# Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
A fenti kódsorok a könyvtárak importálására szolgálnak meghatározott feladatok végrehajtásához, mint pl zsibbadt a matematikai műveletekhez, matplotlib a grafikonok vagy a szórásdiagram megrajzolásához, és pandák az adatkészlet importálásához.
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
Mint fentebb tárgyaltuk, ugyanazt az adatkészletet importáltuk Mall_Customers_data.csv, ahogy a k-közép klaszterezésnél tettük. Vegye figyelembe az alábbi kimenetet:
Itt csak a jellemzők mátrixát bontjuk ki, mivel a függő változóról nincs további információnk. A kód alább található:
x = dataset.iloc[:, [3, 4]].values
Itt csak 3 és 4 oszlopot vontunk ki, mivel 2D-s diagramot fogunk használni a klaszterek megtekintéséhez. Tehát az éves bevételi és kiadási pontszámot tekintjük a jellemzők mátrixának.
2. lépés: A klaszterek optimális számának megtalálása a Dendrogram segítségével
Most a modellünkhöz a Dendrogram segítségével megtaláljuk az optimális számú klasztert. Ehhez fogjuk használni scipy könyvtárat, mivel olyan függvényt biztosít, amely közvetlenül visszaadja a kódunk dendrogramját. Vegye figyelembe az alábbi kódsorokat:
#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()
A fenti kódsorokban importáltuk a hierarchia scipy könyvtár modulja. Ez a modul egy módszert biztosít számunkra shc.denrogram(), amely veszi a kapcsolat() paraméterként. A linkage függvény két klaszter közötti távolság meghatározására szolgál, így itt átadtuk az x(a jellemzők mátrixát), és a ' metódus osztályon ', a hierarchikus klaszterezés népszerű összekapcsolási módszere.
A fennmaradó kódsorok a dendrogram diagram címkéit írják le.
Kimenet:
A fenti kódsorok végrehajtásával az alábbi kimenetet kapjuk :
Ezzel a dendrogrammal most meghatározzuk a modellünkhöz tartozó klaszterek optimális számát. Ehhez megtaláljuk a maximális függőleges távolság amely nem vág el egyetlen vízszintes sávot sem. Tekintsük az alábbi diagramot:
A fenti diagramon megmutattuk azokat a függőleges távolságokat, amelyek nem vágják a vízszintes sávokat. Ahogy elképzelhetjük, a 4tha távolság a maximumot nézi, így ennek megfelelően a klaszterek száma 5 lesz (a függőleges vonalak ebben a tartományban). Vehetjük a 2-t isndszám, mivel ez megközelítőleg egyenlő a 4-gyelthtávolságra, de figyelembe vesszük az 5 klasztert, mert ugyanazt a K-közép algoritmusban számoltuk ki.
Tehát a klaszterek optimális száma 5 lesz , és a következő lépésben betanítjuk a modellt, ugyanezt használva.
3. lépés: A hierarchikus klaszterezési modell betanítása
Mivel ismerjük a szükséges optimális számú klasztert, most már betaníthatjuk a modellünket. A kód alább található:
#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)
A fenti kódban importáltuk a AgglomeratívClustering osztály a scikit learning könyvtár fürt moduljának osztálya.
Ezután létrehoztuk ennek az osztálynak az objektumát a néven hc. Az AgglomerativeClustering osztály a következő paramétereket veszi fel:
Az utolsó sorban létrehoztuk az y_pred függő változót, amely illeszkedik vagy betanítja a modellt. Nemcsak a modellt tanítja, hanem visszaadja azokat a klasztereket is, amelyekhez minden adatpont tartozik.
A fenti kódsorok végrehajtása után, ha végigmegyünk a Sypder IDE-ben a variable explorer opción, ellenőrizhetjük az y_pred változót. Összehasonlíthatjuk az eredeti adatkészletet az y_pred változóval. Vegye figyelembe az alábbi képet:
Ahogy a fenti képen is láthatjuk, a y_pred a klaszterek értékét mutatja, ami azt jelenti, hogy az 1-es ügyfél-azonosító az 5-höz tartozikthklaszter (mivel az indexelés 0-tól kezdődik, így a 4 5-öt jelentthklaszter), a 2-es ügyfél-azonosító a 4-hez tartozikthklaszter, és így tovább.
4. lépés: A klaszterek megjelenítése
Mivel a modellünket sikeresen betanítottuk, most már vizualizálhatjuk az adatkészletnek megfelelő klasztereket.
Itt ugyanazokat a kódsorokat fogjuk használni, mint a k-means klaszterezésnél, egy változás kivételével. Itt nem ábrázoljuk k-átlagban a súlypontot, mert itt dendrogramot használtunk a klaszterek optimális számának meghatározására. A kód alább található:
#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()
Kimenet: A fenti kódsorok végrehajtásával az alábbi kimenetet kapjuk: