Hierarchikus klaszterezési algoritmus Python!

Forrás csomópont: 1055669

Ez a cikk részeként jelent meg Adattudományi Blogaton

Bevezetés

Ebben a cikkben a K Means klaszterezés egy másik megközelítését tekintjük meg, az úgynevezett hierarchikus fürtözést. A K Means-hez vagy a K-módhoz képest a hierarchikus klaszterezés más mögöttes algoritmussal rendelkezik a klaszterezési mechanizmus működéséhez. A hierarchikus klaszterezés agglomeratív vagy osztó technikákat használ, míg a K Means a centroid és az euklideszi távolság kombinációját használja a klaszterek kialakításához. A dendrogramok segítségével a klaszterek hierarchikus klaszterezésben jeleníthetők meg, ami értelmes taxonómiák révén segíthet az eredmények jobb értelmezésében. A dendrogram készítésekor nem kell megadnunk a klaszterek számát.

Itt Python segítségével magyarázzuk el a hierarchikus klaszterezési modellt. Adatkészletünkben 200 bevásárlóközpont ügyfelünk adatai szerepelnek. Az adatkeretben minden ügyfél ügyfélazonosítója, műfaja, életkora, éves bevétele és költési pontszáma szerepel. Az egyes ügyfeleik költési pontszámaira kiszámított összeg több szemponton alapul, mint például a bevétel, a heti látogatások száma és az egy évben elköltött pénz mennyisége. Ez a pontszám 1-től 100-ig terjed. Mivel nem tudjuk a válaszokat, az üzleti probléma klaszterezési problémává válik. Az adatok végső kategóriái számunkra ismeretlenek. Ennek eredményeként célunk néhány eddig ismeretlen ügyfélklaszter felfedezése.

Először azonban nézzünk meg néhány fontos kifejezést a hierarchikus klaszterezésben.

Fontos kifejezések a hierarchikus klaszterezésben

Kapcsolódási módszerek

Ha vannak (a) eredeti megfigyelések a[0],…,a[|a|1] az (a) klaszterben és (b) eredeti objektumok b[0],…,b[|b|1] a ( klaszterben) b), akkor ki kell számítanunk két (a) és (b) klaszter közötti távolságot, hogy összevonhassuk őket (b). Tegyük fel, hogy van egy (d) pont, amely nincs hozzárendelve egyik fürthöz sem. Ki kell derítenünk, milyen messze van az (a) klaszter a (d) és a (b) klaszter a (d) klasztertől.

A klaszterek ma már jellemzően több pontot tartalmaznak, ezért a távolságmátrix kiszámításához más módszerre van szükség. A klaszterek közötti távolság vagy a pont és a klaszter közötti távolság kiszámításának módszerét a kapcsolódás határozza meg. Íme néhány a leggyakrabban használt kapcsolódási mechanizmusok közül:

Egyetlen kapcsolat — A leginkább hasonló tagok közötti távolságot minden klaszterpárra kiszámítja, majd a klasztereket a legrövidebb távolság alapján egyesíti.

Átlagos kapcsolat — Ki kell számítani az egyik klaszter összes tagja és egy másik klaszter összes tagja közötti távolságot. Ezt követően ezeknek a távolságoknak az átlagát használjuk annak meghatározására, hogy mely klaszterek egyesüljenek.

Teljes kapcsolat — Minden klaszterpárra kiszámítja a legkülönbözőbb tagok közötti távolságokat, majd a klasztereket a legrövidebb távolság alapján egyesíti.

Medián kapcsolat — Az átlagos kapcsolathoz hasonlóan az átlagos távolság helyett a medián távolságot használjuk.

Ward Linkage — Meghatározza a klaszterek közötti távolságot a varianciaanalízis módszerével.

Központi összeköttetés — Az egyes klaszterek súlypontját a klaszterhez rendelt összes pont átlagolásával számítják ki, majd a klaszterek közötti távolságot ennek a centroidnak a segítségével számítják ki.

Távolságszámítás

A két vagy több klaszter közötti távolság kiszámítására többféle megközelítés létezik, amelyek közül az euklideszi távolság a legnépszerűbb. Más távolságmérők, mint például a Minkowski, a City Block, a Hamming, a Jaccard és a Chebyshev, szintén használhatók a hierarchikus klaszterezéssel. A 2. ábrán látható módon a különböző távolságmérők hatással vannak a hierarchikus klaszterezésre.

távolság számítás

Dendrogram

A jellemzőtérben lévő objektumok közötti kapcsolatot dendrogrammal ábrázoljuk. A jellemzőtérben a szekvenciálisan egyesített objektumpárok közötti távolság megjelenítésére szolgál. A dendrogramokat gyakran használják a hierarchikus klaszterek vizsgálatára, mielőtt eldöntenék az adatkészlet megfelelő számú klaszterét. A dendrogram távolság két klaszter közötti távolság, amikor egyesülnek. A dendrogram távolság határozza meg, hogy két vagy több klaszter diszjunkt-e, vagy össze lehet-e kapcsolni egyetlen klasztert.

Példa

Most példákat tekintünk meg Python használatával a hierarchikus klaszterezési modell bemutatására. 200 bevásárlóközpont ügyfelünk adatait tároljuk adatbázisba. Az adatkeretben minden ügyfél ügyfélazonosítója, műfaja, életkora, éves bevétele és költési pontszáma szerepel. Az egyes ügyfeleik költési pontszámaira kiszámított összeg több kritériumon alapul, mint például a bevétel, a heti látogatások száma a bevásárlóközpontban és az egy évre elköltött pénz. Ez a pontszám 1-től 100-ig terjed. Mivel nem tudjuk a válaszokat, az üzleti probléma klaszterezési problémává válik.

#1 A könyvtárak importálása
import numpy mint np import matplotlib.pyplot mint plt import panda as pd
#2 A Mall_Customers adatkészlet importálása pandák által
dataset = pd.read_csv('Mall_Customers.csv') X = dataset.iloc[:, [3,4]].values

A hierarchikus klaszterezés ezen új lépése a klaszterek optimális számának meghatározását is magában foglalja. Ezúttal nem a könyökös módszert fogjuk alkalmazni. Használjuk a dendrogramot.

#3 A dendrogram használata a klaszterek optimális számának megtalálásához. # Az első dolog, amit tenni fogunk, az, hogy importáljuk a scipy könyvtárat. A scipy egy nyílt forráskódú # Python könyvtár, amely hierarchikus klaszterezéshez és dendrogramok felépítéséhez szükséges eszközöket tartalmaz. # Csak a szükséges eszközt importálja. scipy.cluster.hierarchy importálása sch-ként 
#Hozzunk létre egy dendrogram-változót. # A linkage valójában maga a hierarchikus klaszterezés algoritmusa, majd a #linkage-ben meg kell adnunk, hogy mely adatokra alkalmazzuk és kapcsoljuk be. Ez az X adatkészlet dendrogram = sch.dendrogram(sch.linkage(X, method = "ward")) plt.title('Dendrogram') plt.xlabel('Customers') plt.ylabel('Euklideszi távolságok') plt. előadás()

A Ward-módszer egy olyan módszer, amely megpróbálja csökkenteni az egyes klasztereken belüli szórást. Ez majdnem ugyanaz, mint amikor K-középeket használtunk a wcss minimalizálására a könyökmetódus diagramunk ábrázolásához; az egyetlen különbség az, hogy a wcss helyett minimalizáljuk a fürtön belüli változatokat. Az egyes klasztereken belül ez a szórás. A dendrogram lent látható.

dendogram

A vásárlók az x tengelyen, a klaszterek közötti euklideszi távolság pedig az y tengelyen láthatók. Hogyan számíthatjuk ki a klaszterek legjobb számát a diagram alapján? Meg akarjuk találni a legnagyobb függőleges távolságot, amelyet vízszintes vonalak keresztezése nélkül tudunk elérni, ez a piros keretes vonal a fenti diagramon. Számoljuk meg a diagram vonalait, és számoljuk ki, hány klaszter a legjobb. Ennél az adatkészletnél a fürt száma 5 lesz.

#4 Hierarchikus fürtözés illesztése a Mall_Customes adatkészlethez # Két algoritmus létezik a hierarchikus klaszterezéshez: Agglomerative Hierarchical Clustering és # Divisive Hierarchical Clustering. Az euklideszi távolság és ward módszert választjuk # algoritmus osztályunkhoz a sklearn.cluster importból AgglomerativeClustering hc = AgglomerativeClustering(n_clusters = 5, affinity = 'euklideszi', linkage ='ward') # Próbáljuk meg az X adatkészlet hierarchikus klaszterező algoritmusát illeszteni miközben létrehozza a # klaszter vektort, amely minden ügyfél számára megmondja, hogy az ügyfél melyik klaszterhez tartozik. y_hc=hc.fit_predict(X)
#5 A klaszterek megjelenítése. Ez a kód hasonló a k-means vizualizációs kódhoz. #Csak az y_kmeans vektornevet cseréljük le y_hc-re a hierarchikus klaszterezés plt.scatter(X[y_hc==0, 0], X[y_hc==0, 1], s=100, c='red', label = '1. klaszter') plt.scatter(X[y_hc==1, 0], X[y_hc==1, 1], s=100, c='kék', label ='2. klaszter') plt.scatter( X[y_hc==2, 0], X[y_hc==2, 1], s=100, c='zöld', label ='3. klaszter') plt.scatter(X[y_hc==3, 0] , X[y_hc==3, 1], s=100, c='cián', címke ='4. klaszter') plt.scatter(X[y_hc==4, 0], X[y_hc==4, 1 ], s=100, c='magenta', label ='5. klaszter') plt.title('Ügyfelek klaszterei (hierarchikus klaszterezési modell)') plt.xlabel('Éves bevétel(k$)') plt.ylabel ('Költési pontszám(1-100') plt.show()
klaszterek | Hierarchikus klaszterezés
1. fürt (piros), 2. fürt (kék), 3. fürt (zöld), 4. fürt (ciánkék), 5. fürt (bíbor)

Ezek a klaszterek a bevásárlóközpont vásárlói szegmensének tekinthetők.

Egy szabványos hierarchikus klaszterezési modellben ennyi. Az adatkészlet és az összes kód elérhető a Github szakaszban.

Következtetés

Bármely klaszterezési gyakorlatban a klaszterek számának meghatározása időigényes folyamat. Mivel az üzlet kereskedelmi oldala inkább az e csoportok jelentésének kivonásával foglalkozik, kulcsfontosságú, hogy a klasztereket két dimenzióban vizualizáljuk, és megnézzük, elkülönülnek-e egymástól. A cél eléréséhez PCA vagy faktoranalízis használható. Ez egy elterjedt módszer a végső eredmények bemutatására a különböző érdekelt felek számára, így mindenki könnyebben fogyaszthatja el az outputot.

EndNote

Köszönöm hogy elolvastad!
Remélem tetszett a cikk, és bővítette tudását.
Kérem, forduljon hozzám bizalommal on E-mail
Valami nem említett, vagy szeretné megosztani a gondolatait? Nyugodtan írjon megjegyzést alább, és vissza fogok lépni.

A szerzőről

Hardikkumar M. Dhaduk
Adatelemző | Digitális adatelemző szakember | Adattudományi tanuló
Csatlakozz hozzám Linkedin
Csatlakozz hozzám GitHub

Az ebben a cikkben bemutatott médiák nem az Analytics Vidhya tulajdonát képezik, és a Szerző belátása szerint használják azokat.

Forrás: https://www.analyticsvidhya.com/blog/2021/08/hierarchical-clustering-algorithm-python/

Időbélyeg:

Még több Analytics Vidhya