Hierarkinen klusterointialgoritmi Python!

Lähdesolmu: 1055669

Tämä artikkeli julkaistiin osana Data Science Blogathon

esittely

Tässä artikkelissa tarkastellaan erilaista lähestymistapaa K Means -klusterointiin, jota kutsutaan hierarkkiseksi klusteriksi. Verrattuna K Meansiin tai K-moodiin, hierarkkisella klusterilla on erilainen taustalla oleva algoritmi klusterointimekanismin toiminnalle. Hierarkkinen klusterointi käyttää agglomeratiivisia tai jakavia tekniikoita, kun taas K Means käyttää sentroidin ja euklidisen etäisyyden yhdistelmää muodostaakseen klustereita. Dendrogrammeilla voidaan visualisoida klustereita hierarkkisessa klusteroinnissa, mikä voi auttaa tulkitsemaan tuloksia paremmin mielekkäiden taksonomioiden avulla. Meidän ei tarvitse määrittää klustereiden määrää dendrogrammia tehdessämme.

Tässä selitämme hierarkkisen klusterointimallin Pythonilla. Aineistossamme on 200 ostoskeskusasiakkaan dataa. Jokaisen asiakkaan asiakastunnus, genre, ikä, vuositulot ja kulutuspisteet sisältyvät kaikki tietokehykseen. Kullekin heidän asiakkaansa kulutuspisteille laskettava summa perustuu useisiin kriteereihin, kuten tuloihin, ostoskeskuksessa käyntien lukumäärään viikossa ja vuoden aikana käytettyyn rahamäärään. Tämä pistemäärä vaihtelee 1–100. Koska emme tiedä vastauksia, liiketoimintaongelmasta tulee klusterointiongelma. Tietojen lopulliset luokat ovat meille tuntemattomia. Tämän seurauksena tavoitteemme on löytää aiemmin tuntemattomia asiakasklustereita.

Mutta ensin tarkastellaan joitain tärkeitä termejä hierarkkisessa klusteroinnissa.

Tärkeitä termejä hierarkkisessa klusteroinnissa

Kytkentämenetelmät

Jos klusterissa (a) on (a) alkuperäisiä havaintoja a[0],…,a[|a|1] ja (b) alkuperäisiä objekteja b[0],…,b[|b|1] klusterissa ( b), niin meidän on laskettava kahden klusterin (a) ja (b) välinen etäisyys yhdistääksemme ne (b). Oletetaan, että on piste (d), jota ei ole määritetty millekään klusterille. Meidän on selvitettävä, kuinka kaukana klusteri (a) on klusterista (d) ja klusteri (b) on klusterista (d).

Klusterit sisältävät nyt tyypillisesti useita pisteitä, mikä edellyttää erilaista menetelmää etäisyysmatriisin laskemiseksi. Menetelmä, jolla klusterien välinen etäisyys tai pisteen välinen etäisyys lasketaan, määräytyy linkin avulla. Seuraavat ovat joitain yleisimmin käytetyistä kytkentämekanismeista:

Yksittäinen linkki — Samankaltaisimpien jäsenten väliset etäisyydet lasketaan kullekin klusteriparille ja klusterit yhdistetään sitten lyhimmän etäisyyden perusteella.

Keskimääräinen yhteys — Lasketaan yhden klusterin kaikkien jäsenten ja toisen klusterin kaikkien jäsenten välinen etäisyys. Sen jälkeen näiden etäisyyksien keskiarvoa käytetään määrittämään, mitkä klusterit sulautuvat.

Täydellinen linkitys — Jokaiselle klusteriparille lasketaan erilaisten jäsenten väliset etäisyydet ja klusterit yhdistetään sitten lyhimmän etäisyyden perusteella.

Mediaaniyhteys — Käytämme mediaanietäisyyttä keskimääräisen etäisyyden sijasta samalla tavalla kuin keskimääräinen linkki.

Ward Linkage — Määrittää klusterien välisen etäisyyden varianssianalyysimenetelmällä.

Keskusliitos — Kunkin klusterin painopiste lasketaan laskemalla keskiarvo kaikista klusterille osoitetuista pisteistä, ja klusterien välinen etäisyys lasketaan sitten tämän painopisteen avulla.

Etäisyyslaskenta

Kahden tai useamman klusterin välisen etäisyyden laskemiseen on useita tapoja, joista Euklidinen etäisyys on suosituin. Muita etäisyysmittareita, kuten Minkowski, City Block, Hamming, Jaccard ja Chebyshev, voidaan käyttää myös hierarkkisen klusteroinnin kanssa. Erilaiset etäisyysmittarit vaikuttavat hierarkkiseen klusterointiin, kuten kuvassa 2.

etäisyyden laskeminen

Dendrogrammi

Objektien välistä suhdetta piirreavaruudessa edustaa dendrogrammi. Ominaisuustilassa sitä käytetään näyttämään etäisyys kunkin peräkkäin yhdistetyn objektiparin välillä. Dendrogrammeja käytetään usein hierarkkisten klustereiden tutkimiseen ennen kuin päätetään sopivasta klusterimäärästä tietojoukolle. Dendrogrammietäisyys on kahden klusterin välinen etäisyys, kun ne yhdistyvät. Dendrogrammin etäisyys määrittää, ovatko kaksi tai useampia erillisiä vai voidaanko ne liittää yhteen yhdeksi klusteriksi.

esimerkki

Nyt tarkastelemme esimerkkejä Pythonilla hierarkkisen klusterointimallin demonstroimiseksi. Meillä on 200 ostoskeskuksen asiakkaan tiedot aineisto. Jokaisen asiakkaan asiakastunnus, genre, ikä, vuositulot ja kulutuspisteet sisältyvät kaikki tietokehykseen. Kullekin heidän asiakkaansa kulutuspisteille laskettava summa perustuu useisiin kriteereihin, kuten tuloihin, ostoskeskuksessa käyntien lukumäärään viikossa ja vuoden aikana käytettyyn rahaan. Tämä pistemäärä vaihtelee 1–100. Koska emme tiedä vastauksia, liiketoimintaongelmasta tulee klusterointiongelma.

#1 Kirjastojen tuonti
import numpy as np tuonti matplotlib.pyplot as plt tuo pandat pd:nä
#2 Pandat tuovat Mall_Customers -tietojoukon
dataset = pd.read_csv('Mall_Customers.csv')
X = dataset.iloc[:, [3,4]].arvot

Tämä uusi vaihe hierarkkisessa klusteroinnissa edellyttää myös optimaalisen klustereiden määrän määrittämistä. Emme aio käyttää kyynärpäämenetelmää tällä kertaa. Käytämme dendrogrammia.

#3 Dendrogrammin avulla löytääksesi optimaaliset klusterimäärät. # Ensimmäinen asia, jonka aiomme tehdä, on tuoda scipy-kirjasto. scipy on avoimen lähdekoodin # Python-kirjasto, joka sisältää työkaluja hierarkkiseen klusterointiin ja dendrogrammien rakentamiseen.
# Tuo vain tarvittava työkalu.
tuo scipy.cluster.hierarchy nimellä sch 
#Luotaan dendrogrammimuuttuja # linkitys on itse asiassa itse hierarkkisen klusteroinnin algoritmi, ja sitten #linkage-kohdassa meidän on määritettävä, mihin dataan käytämme ja osallistumme. Tämä on X-tietojoukko
dendrogrammi = sch.dendrogram(sch.linkage(X, method = "ward"))
plt.title('Dendrogrammi')
plt.xlabel('Asiakkaat')
plt.ylabel('Euklidiset etäisyydet')
plt.show()

Ward-menetelmä on menetelmä, joka yrittää vähentää varianssia kunkin klusterin sisällä. Se on melkein sama kuin silloin, kun käytimme K-keinoja wcss:n minimoimiseksi kyynärpäämenetelmäkaavion piirtämiseen; ainoa ero on, että wcss:n sijaan minimoimme klusterin sisäiset muunnelmat. Jokaisen klusterin sisällä tämä on varianssi. Dendrogrammi on esitetty alla.

dendogrammi

Asiakkaat on esitetty x-akselilla ja euklidinen etäisyys klustereiden välillä on esitetty y-akselilla. Kuinka selvitämme parhaan klustereiden määrän tämän kaavion perusteella? Haluamme löytää pisimmän pystysuoran etäisyyden ylittämättä yhtään vaakaviivaa, joka on punaisella kehystetty viiva yllä olevassa kaaviossa. Lasketaan kaavion viivat ja selvitetään kuinka monta klusteria on paras. Tämän tietojoukon klusterin numero on 5.

#4 Hierarkkisen klusteroinnin sovittaminen Mall_Customes-tietojoukkoon
# Hierarkkiseen klusterointiin on kaksi algoritmia: agglomeratiivinen hierarkkinen klusterointi ja # Divisive Hierarchical Clustering. Valitsemme # algoritmiluokkallemme euklidisen etäisyyden ja kulkutien menetelmän sklearn.cluster import -sivustosta AgglomerativeClustering hc = AgglomerativeClustering(n_clusters = 5, affinity = 'euklidinen', linkitys ='ward')
# Yritetään sovittaa hierarkkinen klusterointialgoritmi tietojoukkoon X samalla kun luodaan # klusterivektori, joka kertoo jokaiselle asiakkaalle, mihin klusteriin asiakas kuuluu.
y_hc=hc.fit_predict(X)
#5 Klusterien visualisointi. Tämä koodi on samanlainen kuin k-means visualisointikoodi.
#Vaihdamme vain y_kmeans-vektorin nimen y_hc:ksi hierarkkisessa klusteroinnissa plt.scatter(X[y_hc==0, 0], X[y_hc==0, 1], s=100, c='punainen', label = 'Cluster 1')
plt.scatter(X[y_hc==1, 0], X[y_hc==1, 1], s=100, c='sininen', tunniste ='Cluster 2')
plt.scatter(X[y_hc==2, 0], X[y_hc==2, 1], s=100, c='vihreä', label ='Cluster 3')
plt.scatter(X[y_hc==3, 0], X[y_hc==3, 1], s=100, c='syaani', label ='Cluster 4')
plt.scatter(X[y_hc==4, 0], X[y_hc==4, 1], s=100, c='magenta', label ='Cluster 5')
plt.title('Asiakasklusterit (hierarkkinen klusterimalli)')
plt.xlabel('Vuositulot(k$)')
plt.ylabel('Kulutuspisteet(1-100')
plt.show()
klusterit | Hierarkkinen klusteri
Ryhmä 1 (punainen), klusteri 2 (sininen), klusteri 3 (vihreä), klusteri 4 (syaani), klusteri 5 (magenta)

Näitä klustereita voidaan pitää kauppakeskuksen asiakassegmenttinä.

Siinä kaikki, mitä tavallisessa hierarkkisessa klusterimallissa on. Tietojoukko sekä kaikki koodit ovat saatavilla Github-osiossa.

Yhteenveto

Kaikissa klusterointiharjoituksissa klustereiden lukumäärän määrittäminen on aikaa vievä prosessi. Koska liiketoiminnan kaupallinen puoli keskittyy enemmän näiden ryhmien merkityksen poimimiseen, on tärkeää visualisoida klusterit kahdessa ulottuvuudessa ja nähdä, eroavatko ne toisistaan. Tämän tavoitteen saavuttamiseksi voidaan käyttää PCA:ta tai tekijäanalyysiä. Tämä on yleinen tapa esitellä lopputuloksia eri sidosryhmille, mikä helpottaa kaikkien tuotteiden kuluttamista.

Loppuhuomautus

Kiitos, että luit!
Toivottavasti pidit artikkelista ja lisäsit tietämystäsi.
Ota rohkeasti yhteyttä minuun on Sähköposti
Jotain, jota ei ole mainittu tai haluat jakaa ajatuksesi? Kommentoi rohkeasti alla ja palaan sinuun.

kirjailijasta

Hardikkumar M. Dhaduk
Dataanalyytikko | Digitaalisen data-analyysin asiantuntija | Datatieteen oppija
Ota minuun yhteyttä Linkedin
Ota minuun yhteyttä Github

Tässä artikkelissa esitetyt tiedotusvälineet eivät ole Analytics Vidhyan omistuksessa ja niitä käytetään tekijän harkinnan mukaan.

Lähde: https://www.analyticsvidhya.com/blog/2021/08/hierarchical-clustering-algorithm-python/

Aikaleima:

Lisää aiheesta Analyysi Vidhya