Lopullinen opas hierarkkiseen klusterointiin Pythonilla ja Scikit-Learn PlatoBlockchain Data Intelligencellä. Pystysuuntainen haku. Ai.

Lopullinen opas hierarkkiseen klusterointiin Pythonilla ja Scikit-Learnillä

esittely

Tässä oppaassa keskitymme toteuttamaan Hierarkkinen klusterointialgoritmi Scikit-Learnin kanssa markkinointiongelman ratkaisemiseksi.

Luettuasi oppaan ymmärrät:

  • Milloin hierarkkista klusterointia käytetään
  • Tietojoukon visualisointi ymmärtääksesi, sopiiko se klusterointiin
  • Ominaisuuksien esikäsittely ja uusien ominaisuuksien suunnittelu tietojoukon perusteella
  • Kuinka pienentää tietojoukon ulottuvuutta PCA:lla
  • Dendrogrammin käyttäminen ja lukeminen eri ryhmille
  • Mitä erilaisia ​​linkitystapoja ja etäisyysmittauksia käytetään dendrogrammeihin ja klusterointialgoritmeihin?
  • Mitä ovat agglomeratiiviset ja jakautuvat klusterointistrategiat ja miten ne toimivat
  • Agglomeratiivisen hierarkkisen klusteroinnin toteuttaminen Scikit-Learnin avulla
  • Mitkä ovat yleisimmät ongelmat klusterointialgoritmien kanssa ja miten ne ratkaistaan?

Huomautus: Voit ladata muistikirjan, joka sisältää kaiken tämän oppaan koodin tätä.

Motivoiminen

Kuvittele skenaario, jossa olet osa datatieteen tiimiä, joka on yhteydessä markkinointiosastoon. Markkinointi on kerännyt asiakkaiden ostodataa jo jonkin aikaa, ja he haluavat kerätyn tiedon perusteella ymmärtää, onko yhtäläisyyksiä asiakkaiden välillä. Nämä yhtäläisyydet jakavat asiakkaat ryhmiin, ja asiakasryhmien luominen auttaa kampanjoiden, kampanjoiden, konversioiden kohdistamisessa ja parempien asiakassuhteiden rakentamisessa.

Voitko auttaa määrittämään, mitkä asiakkaat ovat samanlaisia? Kuinka moni heistä kuuluu samaan ryhmään? Ja kuinka monta eri ryhmää on?

Yksi tapa vastata näihin kysymyksiin on käyttää a klustereiden Algoritmi, kuten K-Means, DBSCAN, Hierarchical Clustering jne. Yleisesti ottaen klusterointialgoritmit löytävät yhtäläisyyksiä datapisteiden välillä ja ryhmittelevät ne.

Tässä tapauksessa markkinointitietomme ovat melko pieniä. Meillä on tietoa vain 200 asiakkaasta. Markkinointitiimin kannalta on tärkeää, että voimme selkeästi selittää heille, miten klusterien lukumäärän perusteella päätökset tehtiin, ja siten selittää heille, kuinka algoritmi käytännössä toimii.

Koska tietomme ovat pieniä ja selitettävyys on tärkeä tekijä, voimme hyödyntää Hierarkkinen klusterointi tämän ongelman ratkaisemiseksi. Tämä prosessi tunnetaan myös nimellä Hierarchical Clustering Analysis (HCA).

Yksi HCA:n eduista on, että se on tulkittavissa ja toimii hyvin pienissä aineistoissa.

Toinen asia, joka on otettava huomioon tässä skenaariossa, on, että HCA on valvomatta algoritmi. Kun ryhmittelemme tietoja, meillä ei ole tapaa varmistaa, että tunnistamme oikein, että käyttäjä kuuluu tiettyyn ryhmään (emme tunne ryhmiä). Meillä ei ole tarroja, joihin voisimme verrata tuloksiamme. Jos tunnistimme ryhmät oikein, markkinointiosasto vahvistaa sen myöhemmin päivittäin (mitataan sellaisilla mittareilla kuin ROI, konversioprosentit jne.).

Nyt kun olemme ymmärtäneet ongelman, jota yritämme ratkaista, ja kuinka se ratkaistaan, voimme alkaa tarkastella tietojamme!

Lyhyt tutkiva tietojen analyysi

Huomautus: Voit ladata tässä oppaassa käytetyn tietojoukon tätä.

Kun olet ladannut tietojoukon, huomaa, että se on a CSV (pilkuilla erotetut arvot) tiedosto nimeltä shopping-data.csv. Tietojen tutkimisen ja käsittelyn helpottamiseksi lataamme sen a DataFrame Pandaa käyttämällä:

import pandas as pd


path_to_file = 'home/projects/datasets/shopping-data.csv'
customer_data = pd.read_csv(path_to_file)

Marketing kertoi keränneensä 200 asiakastietuetta. Voimme tarkistaa, ovatko ladatut tiedot täydellisiä 200 rivillä käyttämällä shape attribuutti. Se kertoo meille, kuinka monta riviä ja saraketta meillä on vastaavasti:

customer_data.shape

Tämä johtaa:

(200, 5)

Loistava! Tietomme sisältävät 200 riviä (asiakastiedot) ja meillä on myös 5 saraketta (ominaisuudet). Nähdäksemme, mitä ominaisuuksia markkinointiosasto on kerännyt asiakkailta, näemme sarakkeiden nimet columns attribuutti. Voit tehdä sen suorittamalla:

customer_data.columns

Yllä oleva skripti palauttaa:

Index(['CustomerID', 'Genre', 'Age', 'Annual Income (k$)',
       'Spending Score (1-100)'],
      dtype='object')

Tässä näemme, että markkinointi on luonut a CustomerID, keräsi Genre, Age, Annual Income (tuhansissa dollareissa) ja a Spending Score 1-100 jokaista 200 asiakasta kohti. Kun pyydettiin selvennystä, he sanoivat, että arvot Spending Score sarake ilmaisee, kuinka usein henkilö kuluttaa rahaa ostoskeskuksessa asteikolla 1-100. Toisin sanoen, jos asiakkaan pistemäärä on 0, hän ei koskaan käytä rahaa, ja jos pistemäärä on 100, olemme juuri havainneet eniten kuluttava.

Katsotaanpa nopeasti tämän pistemäärän jakautumista tarkistaaksemme tietojoukossamme olevien käyttäjien kulutustottumukset. Siellä ovat Pandat hist() menetelmä tulee avuksi:

customer_data['Spending Score (1-100)'].hist()

img

Katsomalla histogrammia näemme, että yli 35 asiakkaan pisteet ovat välillä 40 ja 60, niin alle 25:llä on pisteitä välillä 70 ja 80. Suurin osa asiakkaistamme on siis tasapainoisia kuluttajia, jota seuraavat kohtalaisesti tai paljon kuluttajat. Voimme myös nähdä, että sen jälkeen on rivi 0, jakauman vasemmalla puolella ja toinen rivi ennen numeroa 100 jakauman oikealla puolella. Nämä tyhjät kohdat tarkoittavat luultavasti sitä, että jakelu ei sisällä ei-kuluttajia, joiden pistemäärä olisi 0, ja että ei myöskään ole paljon kuluttajia, joiden pistemäärä on 100.

Tarkistaaksemme, onko tämä totta, voimme tarkastella jakauman minimi- ja maksimiarvoja. Nämä arvot löytyvät helposti osana kuvaavaa tilastoa, joten voimme käyttää describe() menetelmä muiden numeeristen arvojen jakaumien ymmärtämiseksi:


customer_data.describe().transpose()

Tämä antaa meille taulukon, josta voimme lukea tietojoukkomme muiden arvojen jakaumia:

 						count 	mean 	std 		min 	25% 	50% 	75% 	max
CustomerID 				200.0 	100.50 	57.879185 	1.0 	50.75 	100.5 	150.25 	200.0
Age 					200.0 	38.85 	13.969007 	18.0 	28.75 	36.0 	49.00 	70.0
Annual Income (k$) 		200.0 	60.56 	26.264721 	15.0 	41.50 	61.5 	78.00 	137.0
Spending Score (1-100) 	200.0 	50.20 	25.823522 	1.0 	34.75 	50.0 	73.00 	99.0

Hypoteesimme vahvistuu. The min arvo Spending Score is 1 ja max on 99. Meillä ei siis ole 0 or 100 pisteiden kuluttajia. Katsotaanpa sitten transponoidun muut sarakkeet describe pöytä. Kun katsot mean ja std sarakkeita, voimme nähdä sen Age Ishayoiden opettaman mean is 38.85 ja std on noin 13.97. Sama tapahtuu Annual Income, Jossa mean of 60.56 ja std 26.26, Ja Spending Score kanssa mean of 50 ja std of 25.82. Kaikille ominaisuuksille, mean on kaukana keskihajonnasta, mikä osoittaa datamme vaihtelevuus on suuri.

Ymmärtääksemme paremmin, kuinka tietomme vaihtelevat, piirretään Annual Income jakelu:

customer_data['Annual Income (k$)'].hist()

Mikä antaa meille:

img

Huomaa histogrammissa, että suurin osa tiedoistamme, yli 35 asiakasta, on keskittynyt numeron lähelle 60, meidän mean, vaaka-akselilla. Mutta mitä tapahtuu, kun siirrymme jakelun päitä kohti? Vasemmalle päin 60.560 dollarin keskiarvosta seuraava arvo, jonka kohtaamme, on 34.300 dollaria – keskiarvo (60.560 dollaria) miinus standardivaihtelu (26.260 dollaria). Jos siirrymme kauempana datajakauman vasemmalle puolelle, pätee samanlainen sääntö, vähennämme nykyisestä arvosta (26.260 34.300 dollaria) vakiomuunnelman (8.040 60 dollaria). Siksi kohtaamme arvon 8 dollaria. Huomaa, kuinka tietomme muuttuivat nopeasti 26.260 XNUMX dollarista XNUMX XNUMX dollariin. Se "hyppää" XNUMX dollaria joka kerta – vaihtelee paljon, ja siksi meillä on niin suuri vaihtelu.

img

Datan vaihtelevuus ja koko ovat tärkeitä klusterointianalyysissä, koska useimpien klusterointialgoritmien etäisyysmittaukset ovat herkkiä datan suuruuksille. Kokoero voi muuttaa klusterointituloksia saamalla yhden pisteen näyttämään lähempänä tai kauempana toisesta kuin se todellisuudessa on, mikä vääristää todellista tietojen ryhmittelyä.

Toistaiseksi olemme nähneet tietojemme muodon, osan sen jakaumista ja kuvaavat tilastot. Pandasin avulla voimme myös luetella tietotyyppejämme ja nähdä, ovatko kaikki 200 riviämme täytetty. null arvot:

customer_data.info()

Tämä johtaa:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 200 entries, 0 to 199
Data columns (total 5 columns):
 #   Column                  Non-Null Count  Dtype 
---  ------                  --------------  ----- 
 0   CustomerID              200 non-null    int64 
 1   Genre                   200 non-null    object
 2   Age                     200 non-null    int64 
 3   Annual Income (k$)      200 non-null    int64 
 4   Spending Score (1-100)  200 non-null    int64 
dtypes: int64(4), object(1)
memory usage: 7.9+ KB

Täällä voimme nähdä, että niitä ei ole null arvot tiedoissa ja että meillä on vain yksi kategorinen sarake – Genre. Tässä vaiheessa on tärkeää pitää mielessä, mitkä ominaisuudet vaikuttavat mielenkiintoisilta lisättäväksi klusterointimalliin. Jos haluamme lisätä malliimme Genre-sarakkeen, meidän on muutettava sen arvot kategorinen että numeerinen.

Katsotaanpa miten Genre täyttyy vilkaisemalla nopeasti datamme viittä ensimmäistä arvoa:

customer_data.head() 

Tämä johtaa:

    CustomerID 	Genre 	Age 	Annual Income (k$) 	Spending Score (1-100)
0 	1 			Male 	19 		15 					39
1 	2 			Male 	21 		15 					81
2 	3 			Female 	20 		16 					6
3 	4 			Female 	23 		16 					77
4 	5 			Female 	31 		17 					40

Näyttää siltä, ​​​​että sillä on vain Female ja Male luokat. Voimme olla varmoja siitä tarkastelemalla sen ainutlaatuisia arvoja unique:

customer_data['Genre'].unique()

Tämä vahvistaa oletuksemme:

array(['Male', 'Female'], dtype=object)

Toistaiseksi tiedämme, että meillä on vain kaksi genreä, jos aiomme käyttää tätä ominaisuutta mallissamme, Male voitaisiin muuttaa muotoon 0 ja Female että 1. Tärkeää on myös tarkistaa genrejen välinen suhde, jotta nähdään, ovatko ne tasapainossa. Voimme tehdä sen kanssa value_counts() menetelmä ja sen perustelut normalize=True näyttää prosenttiosuuden välillä Male ja Female:

customer_data['Genre'].value_counts(normalize=True)

Tämä tuottaa:

Female    0.56
Male      0.44
Name: Genre, dtype: float64

Meillä on aineistossa 56 % naisista ja 44 % miehistä. Niiden välinen ero on vain 16 %, ja tietomme eivät ole 50/50, mutta ovat tarpeeksi tasapainoinen ei aiheuta ongelmia. Jos tulokset olisivat 70/30, 60/40, olisi voinut olla tarpeen joko kerätä lisää dataa tai käyttää jonkinlaista datan lisäystekniikkaa, jotta tämä suhde olisi tasapainoisempi.

Tähän asti kaikki ominaisuudet, mutta Age, on tutkittu lyhyesti. Missä asioissa Age, on yleensä mielenkiintoista jakaa se roskakoriin, jotta asiakkaat voidaan segmentoida heidän ikäryhmiensä perusteella. Jos teemme niin, meidän on muutettava ikäluokat yhdeksi numeroksi ennen kuin lisäämme ne malliimme. Näin 15-20-vuotiskategorian sijaan laskemme, kuinka monta asiakasta alueella on 15-20 luokka, ja se olisi numero uudessa sarakkeessa nimeltä 15-20.

Neuvo: Tässä oppaassa esitämme vain lyhyen tutkivan data-analyysin. Mutta voit mennä pidemmälle ja sinun pitäisi mennä pidemmälle. Voit nähdä, onko tuloeroissa ja pisteytyseroja genren ja iän perusteella. Tämä ei ainoastaan ​​rikasta analyysiä, vaan johtaa parempiin mallituloksiin. Jos haluat mennä syvemmälle tutkivaan data-analyysiin, tutustu artikkeliin EDA:n luku "Käytännöllinen asunnon hintaennuste – koneoppiminen Pythonissa" Ohjattu projekti.

Arvailtuaan, mitä voitaisiin tehdä kategorisella – tai kategorisella – Genre ja Age sarakkeita, sovelletaan sitä, mistä on keskusteltu.

Koodausmuuttujat ja ominaisuussuunnittelu

Aloitetaan jakamalla Age ryhmiin, jotka vaihtelevat 10, niin että meillä on 20-30, 30-40, 40-50 ja niin edelleen. Koska nuorin asiakkaamme on 15-vuotias, voimme aloittaa 15-vuotiaasta ja lopettaa 70-vuotiaana, joka on tiedoissa vanhimman asiakkaan ikä. Alkaen klo 15 ja päättyen klo 70, meillä olisi 15-20, 20-30, 30-40, 40-50, 50-60 ja 60-70 välit.

Ryhmään tai astia Age arvot näihin intervalleihin, voimme käyttää Pandaa cut() tapa leikata ne roskakoriin ja määrittää sitten laatikot uuteen Age Groups sarake:

intervals = [15, 20, 30, 40, 50, 60, 70]
col = customer_data['Age']
customer_data['Age Groups'] = pd.cut(x=col, bins=intervals)


customer_data['Age Groups'] 

Tämä johtaa:

0      (15, 20]
1      (20, 30]
2      (15, 20]
3      (20, 30]
4      (30, 40]
         ...   
195    (30, 40]
196    (40, 50]
197    (30, 40]
198    (30, 40]
199    (20, 30]
Name: Age Groups, Length: 200, dtype: category
Categories (6, interval[int64, right]): [(15, 20] < (20, 30] < (30, 40] < (40, 50] < (50, 60] < (60, 70]]

Huomaa, että sarakearvoja tarkasteltaessa on myös rivi, joka määrittää, että meillä on 6 luokkaa ja näyttää kaikki binned-tietovälit. Tällä tavalla olemme luokitelleet aiemmin numeeriset tietomme ja luoneet uuden Age Groups ominaisuus.

Ja kuinka monta asiakasta meillä on kussakin kategoriassa? Tiedämme sen nopeasti ryhmittelemällä sarakkeen ja laskemalla arvot kanssa groupby() ja count():

customer_data.groupby('Age Groups')['Age Groups'].count()

Tämä johtaa:

Age Groups
(15, 20]    17
(20, 30]    45
(30, 40]    60
(40, 50]    38
(50, 60]    23
(60, 70]    17
Name: Age Groups, dtype: int64

On helppo huomata, että suurin osa asiakkaista on 30-40-vuotiaita, seuraavina 20-30-vuotiaita ja sitten 40-50-vuotiaita asiakkaita. Tämä on myös hyvää tietoa markkinointiosastolle.

Tällä hetkellä meillä on kaksi kategorista muuttujaa, Age ja Genre, jotka meidän on muutettava numeroiksi voidaksemme käyttää mallissamme. On monia eri tapoja tehdä tämä muutos – käytämme Pandoja get_dummies() menetelmä, joka luo uuden sarakkeen kullekin aikavälille ja genrelle ja täyttää sen arvot sitten 0:lla ja 1:llä - tällaista operaatiota kutsutaan one-hot koodaus. Katsotaan miltä se näyttää:


customer_data_oh = pd.get_dummies(customer_data)

customer_data_oh 

Tämä antaa meille esikatselun tuloksena olevasta taulukosta:

img

Tuloksen avulla on helppo nähdä, että sarake Genre jaettiin sarakkeisiin - Genre_Female ja Genre_Male. Kun asiakas on nainen, Genre_Female on yhtä suuri kuin 1, ja kun asiakas on mies, se on yhtä suuri 0.

Myös Age Groups sarake jaettiin 6 sarakkeeseen, yksi kullekin aikavälille, kuten Age Groups_(15, 20], Age Groups_(20, 30], ja niin edelleen. Samalla tavalla kuin Genre, kun asiakas on 18-vuotias, Age Groups_(15, 20] arvo on 1 ja kaikkien muiden sarakkeiden arvo on 0.

- etu yhden kuuman koodauksen ansiosta sarakearvojen esittäminen on yksinkertaista, joten on yksinkertaista ymmärtää, mitä tapahtuu – kun taas haitta on, että olemme nyt luoneet 8 lisäsaraketta yhteenvetona jo olemassa olevien sarakkeiden kanssa.

varoitus: Jos sinulla on tietojoukko, jossa yksi-hot-koodattujen sarakkeiden määrä ylittää rivien määrän, on parasta käyttää toista koodausmenetelmää tietojen ulottuvuusongelmien välttämiseksi.

One-hot-koodaus lisää myös nollia tietoihimme, mikä tekee niistä harvempia, mikä voi olla ongelma joillekin algoritmeille, jotka ovat herkkiä datan harvakseltaan.

Klusteritarpeisiimme one-hot-koodaus näyttää toimivan. Mutta voimme piirtää tiedot nähdäksemme, onko meillä todella erillisiä ryhmiä, joita voimme ryhmitellä.

Peruspiirros ja ulottuvuuden vähentäminen

Tietojoukossamme on 11 saraketta, ja on joitakin tapoja, joilla voimme visualisoida tiedot. Ensimmäinen on piirtämällä se 10-ulotteiseksi (onnea sen kanssa). Kymmenen, koska Customer_ID saraketta ei oteta huomioon. Toinen on piirtämällä alkuperäiset numeeriset piirteemme, ja kolmas on muuttamalla 10 ominaisuuttamme kahdeksi – siten suorittamalla ulottuvuuden pienennyksen.

Jokaisen dataparin piirtäminen

Koska 10 ulottuvuuden piirtäminen on hieman mahdotonta, valitsemme toisen lähestymistavan – piirrämme alkuperäiset piirteemme. Voimme valita niistä kaksi klusterointianalyysiämme. Yksi tapa nähdä kaikki tietoparimme yhdistettynä on Seaborn pairplot():

import seaborn as sns


customer_data = customer_data.drop('CustomerID', axis=1)

sns.pairplot(customer_data)

Mikä näyttää:

img

Yhdellä silmäyksellä voimme havaita sirontakaaviot, joissa näyttää olevan dataryhmiä. Yksi, joka vaikuttaa mielenkiintoiselta, on hajontakaavio, joka yhdistää Annual Income ja Spending Score. Huomaa, että muiden muuttujien sirontakaavioiden välillä ei ole selvää eroa. Enimmillään voimme ehkä kertoa, että pisteessä on kaksi erillistä pisteen keskittymää Spending Score vs Age sirontakaavio.

Molemmat hajakuvaajat koostuvat Annual Income ja Spending Score ovat pohjimmiltaan samat. Voimme nähdä sen kahdesti, koska x- ja y-akselit vaihdettiin. Katsomalla mitä tahansa niistä, voimme nähdä, mikä näyttää olevan viisi erilaista ryhmää. Piirretään vain nämä kaksi ominaisuutta Seabornilla scatterplot() katsomaan tarkemmin:

sns.scatterplot(x=customer_data['Annual Income (k$)'],
                y=customer_data['Spending Score (1-100)'])

img

Tarkemmin katsomalla voimme erottaa 5 erilaista tietoryhmää. Vaikuttaa siltä, ​​että asiakkaamme voidaan ryhmitellä sen mukaan, kuinka paljon he tienaavat vuodessa ja kuinka paljon he kuluttavat. Tämä on toinen tärkeä kohta analyysissämme. On tärkeää, että otamme huomioon vain kaksi ominaisuutta asiakkaidemme ryhmittelyssä. Mikään muu tieto, joka meillä on heistä, ei sisälly yhtälöön. Tämä antaa analyysille merkityksen – jos tiedämme, kuinka paljon asiakas ansaitsee ja kuluttaa, voimme helposti löytää tarvitsemamme yhtäläisyydet.

img

Sepä hienoa! Toistaiseksi meillä on jo kaksi muuttujaa mallin rakentamiseksi. Sen lisäksi, mitä tämä edustaa, se tekee mallista myös yksinkertaisemman, vähävaraisemman ja selitettävän.

Tutustu käytännönläheiseen, käytännölliseen Gitin oppimisoppaaseemme, jossa on parhaat käytännöt, alan hyväksymät standardit ja mukana tuleva huijauslehti. Lopeta Git-komentojen googlailu ja oikeastaan oppia se!

Huomautus: Tietotiede suosii yleensä mahdollisimman yksinkertaisia ​​lähestymistapoja. Ei vain siksi, että se on helpompi selittää yritykselle, vaan myös siksi, että se on suorempi – 2 ominaisuuden ja selitettävän mallin ansiosta on selvää, mitä malli tekee ja miten se toimii.

Datan piirtäminen PCA:n käytön jälkeen

Näyttää siltä, ​​että toinen lähestymistapamme on luultavasti paras, mutta katsotaanpa myös kolmatta lähestymistapaamme. Siitä voi olla hyötyä, kun emme pysty kuvaamaan dataa, koska sillä on liian monta ulottuvuutta, tai kun tietokeskittymiä tai selkeää erottelua ryhmissä ei ole. Kun tällaisia ​​tilanteita ilmenee, on suositeltavaa yrittää pienentää datamittoja menetelmällä, jota kutsutaan Pääkomponenttianalyysi (PCA).

Huomautus: Useimmat ihmiset käyttävät PCA:ta mittasuhteiden vähentämiseen ennen visualisointia. On olemassa muita menetelmiä, jotka auttavat tietojen visualisoinnissa ennen klusterointia, kuten Density-Based Spatial Clustering of Applications with Noise (DBSCAN) ja Itseorganisoituvat kartat (SOM) klusterointi. Molemmat ovat klusterointialgoritmeja, mutta niitä voidaan käyttää myös tietojen visualisointiin. Koska klusterointianalyysillä ei ole kultaista standardia, on tärkeää vertailla erilaisia ​​visualisointeja ja erilaisia ​​algoritmeja.

PCA pienentää tietojemme kokoa samalla kun yrittää säilyttää mahdollisimman suuren osan tiedoista. Otetaan ensin käsitys siitä, miten PCA toimii, ja sitten voimme valita kuinka moneen dataulottuvuuteen pienennämme datamme.

Jokaisen ominaisuusparin osalta PCA tarkistaa, vastaavatko yhden muuttujan suuremmat arvot toisen muuttujan suurempia arvoja, ja se tekee saman pienemmille arvoille. Joten se olennaisesti laskee, kuinka paljon ominaisuuden arvot vaihtelevat toistensa suhteen – kutsumme sitä niiden arvoiksi kovarianssi. Nämä tulokset järjestetään sitten matriisiin, jolloin saadaan a kovarianssimatriisi.

Saatuaan kovarianssimatriisin PCA yrittää löytää lineaarisen yhdistelmän ominaisuuksia, jotka selittävät sen parhaiten – se sopii lineaarisiin malleihin, kunnes se tunnistaa sen, joka selittää maksimi varianssin määrä.

Huomautuksia: PCA on lineaarinen muunnos, ja lineaarisuus on herkkä datan mittakaavalle. Siksi PCA toimii parhaiten, kun kaikki data-arvot ovat samalla asteikolla. Tämä voidaan tehdä vähentämällä sarake tarkoittaa arvoistaan ​​ja jakamalla tulos sen keskihajonnalla. Sitä kutsutaan tietojen standardointi. Varmista ennen PCA:n käyttöä, että tiedot on skaalattu! Jos et ole varma kuinka, lue meidän "Ominaisuustietojen skaalaus Scikit-Learnin avulla koneoppimiseen Pythonissa"!

Parhaalla löydetyllä viivalla (lineaarisella yhdistelmällä) PCA saa akseliensa suunnat, ns ominaisvektorit, ja sen lineaariset kertoimet, ominaisarvot. Ominaisuusvektorien ja ominaisarvojen yhdistelmä – tai akselisuunnat ja kertoimet – ovat Pääkomponentit PCA:sta. Ja silloin voimme valita ulottuvuuksien määrän kunkin ominaisuuden selitetyn varianssin perusteella ymmärtämällä, mitkä pääkomponentit haluamme säilyttää tai hylätä sen perusteella, kuinka paljon varianssia ne selittävät.

Saatuaan pääkomponentit PCA muodostaa ominaisvektoreiden avulla piirrevektorin, joka suuntaa datan uudelleen alkuperäisistä akseleista pääkomponenttien edustamille akseleille – näin datamitat pienennetään.

Huomautus: Yksi tärkeä yksityiskohta, joka on otettava huomioon tässä, on se, että PCA:n lineaarisen luonteensa vuoksi se keskittää suurimman osan selitetystä varianssista ensimmäisiin pääkomponentteihin. Joten kun tarkastellaan selitettyä varianssia, yleensä kaksi ensimmäistä komponenttiamme riittävät. Mutta se voi joissain tapauksissa olla harhaanjohtavaa – joten yritä jatkaa erilaisten kaavioiden ja algoritmien vertailua klusteroinnin aikana nähdäksesi, onko niillä samanlaisia ​​tuloksia.

Ennen PCA:n soveltamista meidän on valittava seuraavista Age sarake tai Age Groups sarakkeita aiemmin koodatussa datassamme. Koska molemmat sarakkeet edustavat samaa tietoa, sen lisääminen kahdesti vaikuttaa datan varianssiin. Jos Age Groups sarake on valittuna, poista se Age sarakkeessa Pandaa käyttäen drop() menetelmää ja määritä se uudelleen customer_data_oh muuttuja:

customer_data_oh = customer_data_oh.drop(['Age'], axis=1)
customer_data_oh.shape 

Nyt tiedoissamme on 10 saraketta, mikä tarkoittaa, että voimme saada yhden pääkomponentin sarakkeelta ja valita, kuinka monta niistä käytämme mittaamalla, kuinka paljon yhden uuden ulottuvuuden käyttöönotto selittää enemmän datan varianssia.

Tehdään se Scikit-Learnin kanssa PCA. Laskemme kunkin ulottuvuuden selitetyn varianssin antamalla explained_variance_ratio_ , ja katso sitten niiden kumulatiivista summaa cumsum() :

from sklearn.decomposition import PCA

pca = PCA(n_components=10)
pca.fit_transform(customer_data_oh)
pca.explained_variance_ratio_.cumsum()

Kumulatiiviset selitetyt varianssimme ovat:

array([0.509337  , 0.99909504, 0.99946364, 0.99965506, 0.99977937,
       0.99986848, 0.99993716, 1.        , 1.        , 1.        ])

Näemme, että ensimmäinen ulottuvuus selittää 50 % tiedoista, ja yhdistettynä toiseen ulottuvuuteen ne selittävät 99 %. Tämä tarkoittaa, että kaksi ensimmäistä ulottuvuutta selittävät jo 2 % tiedoistamme. Joten voimme soveltaa PCA:ta kahdella komponentilla, hankkia pääkomponentit ja piirtää ne:

from sklearn.decomposition import PCA

pca = PCA(n_components=2)
pcs = pca.fit_transform(customer_data_oh)

pc1_values = pcs[:,0]
pc2_values = pcs[:,1]
sns.scatterplot(x=pc1_values, y=pc2_values)

img

Datakaavio PCA:n jälkeen on hyvin samanlainen kuin käyrä, joka käyttää vain kahta saraketta tiedoista ilman PCA:ta. Huomaa, että ryhmiä muodostavat pisteet ovat lähempänä ja hieman keskittyneempiä PCA:n jälkeen kuin ennen.

img

Hierarkkisen rakenteen visualisointi dendrogrammeilla

Toistaiseksi olemme tutkineet dataa, koodattuja kategorisia sarakkeita, päättäneet mitkä sarakkeet soveltuvat klusterointiin ja vähentäneet tietojen ulottuvuutta. Kaaviot osoittavat, että tiedoissamme on 5 klusteria, mutta on myös toinen tapa visualisoida pisteiden välisiä suhteita ja auttaa määrittämään klustereiden lukumäärää – luomalla dendrogrammi (yleensä väärin kirjoitettu dendogrammina). dendro välineet puu latinaksi.

- dendrogrammi on tulos tietojoukon pisteiden linkittämisestä. Se on visuaalinen esitys hierarkkisesta klusterointiprosessista. Ja miten hierarkkinen klusterointiprosessi toimii? No… se riippuu – luultavasti vastaus, jonka olet jo kuullut paljon Data Sciencessä.

Hierarkkisen klusteroinnin ymmärtäminen

Kun Hierarchical Clustering Algorithm (HCA) alkaa linkittää pisteitä ja löytää klustereita, se voi ensin jakaa pisteet 2 suureen ryhmään ja jakaa sitten kumpikin näistä kahdesta ryhmästä pienempään kahteen ryhmään, joissa on yhteensä 2 ryhmää, mikä on eripuraisuutta aiheuttava ja ylhäältä alas lähestyä.

Vaihtoehtoisesti se voi toimia päinvastoin – se voi tarkastella kaikkia datapisteitä, löytää 2 pistettä, jotka ovat lähempänä toisiaan, linkittää ne ja sitten etsiä muita pisteitä, jotka ovat lähimpänä näitä linkitettyjä pisteitä, ja jatkaa kahden ryhmän rakentamista. alkaen alhaalta ylös. Kumpi on agglomeratiivista lähestymistapaa kehitämme.

Agglomeratiivisen hierarkkisen klusteroinnin vaiheet

Jotta agglomeratiivinen lähestymistapa olisi vielä selkeämpi, on olemassa vaiheita Agglomerative Hierarchical Clustering (AHC) algoritmi:

  1. Käsittele aluksi jokaista datapistettä yhtenä klusterina. Siksi klusterien lukumäärä alussa on K – kun taas K on kokonaisluku, joka edustaa datapisteiden määrää.
  2. Muodosta klusteri yhdistämällä kaksi lähintä datapistettä, jolloin syntyy K-1-klusteri.
  3. Muodosta lisää klustereita yhdistämällä kaksi lähintä klusteria, jolloin syntyy K-2-klusteri.
  4. Toista edellä mainitut kolme vaihetta, kunnes muodostuu yksi iso klusteri.

Huomautuksia: Yksinkertaistamisen vuoksi sanomme "kaksi lähintä" datapistettä vaiheissa 2 ja 3. Mutta on enemmän tapoja yhdistää pisteitä, kuten näemme hieman.

Jos käännät ACH-algoritmin vaiheet 4:stä 1:een, ne olisivat vaiheet *Divisive Hierarchical Clustering (DHC)*.

Huomaa, että HCA:t voivat olla joko jakavia ja ylhäältä alaspäin tai agglomeratiivisia ja alhaalta ylös. Ylhäältä alas suuntautuva DHC-lähestymistapa toimii parhaiten, kun klustereita on vähemmän, mutta suurempia, joten se on laskennallisesti kalliimpaa. Toisaalta alhaalta ylöspäin suuntautuva AHC-lähestymistapa sopii, kun sinulla on useita pienempiä klustereita. Se on laskennallisesti yksinkertaisempi, enemmän käytetty ja saatavilla.

Huomautus: Joko ylhäältä alas tai alhaalta ylös, klusterointiprosessin dendrogrammiesitys alkaa aina jakamisesta kahteen ja päättyy jokaisen yksittäisen pisteen erotteluun, kun sen taustalla oleva rakenne on binääripuu.

Piirretään asiakastietodendrogrammimme visualisoidaksemme datan hierarkkiset suhteet. Tällä kertaa käytämme scipy kirjasto dendrogrammin luomiseksi tietojoukollemme:

import scipy.cluster.hierarchy as shc
import matplotlib.pyplot as plt

plt.figure(figsize=(10, 7))
plt.title("Customers Dendrogram")


selected_data = customer_data_oh.iloc[:, 1:3]
clusters = shc.linkage(selected_data, 
            method='ward', 
            metric="euclidean")
shc.dendrogram(Z=clusters)
plt.show()

Skriptin tulos näyttää tältä:

img

Yllä olevassa skriptissä olemme luoneet klusterit ja aliklusterit pisteillämme, määrittäneet kuinka pisteemme linkittäisivät (soveltamalla ward menetelmällä) ja kuinka mitata pisteiden välinen etäisyys (käyttäen euclidean metrinen).

Dendrogrammin kuvaajalla voidaan visualisoida kuvatut DHC- ja AHC-prosessit. Jos haluat visualisoida ylhäältä alas -lähestymistavan, aloita dendrogrammin yläosasta ja mene alas ja tee päinvastoin aloittamalla alaspäin ja siirtymällä ylöspäin visualisoidaksesi alhaalta ylös -lähestymistavan.

Kytkentämenetelmät

On monia muita kytkentämenetelmiä. Kun ymmärrät enemmän niiden toiminnasta, voit valita tarpeisiisi sopivan. Lisäksi jokainen niistä tuottaa erilaisia ​​​​tuloksia sovellettaessa. Klusterianalyysissä ei ole kiinteää sääntöä, jos mahdollista, tutki ongelman luonnetta nähdäksesi mikä sopii parhaiten, testaa erilaisia ​​menetelmiä ja tarkasta tulokset.

Jotkut kytkentämenetelmistä ovat:

  • Yksittäinen kytkentä: kutsutaan myös nimellä Lähin naapuri (NN). Klusterien välinen etäisyys määritellään niiden lähimpien jäsenten välisellä etäisyydellä.

img

  • Täydellinen kytkentä: kutsutaan myös nimellä Kaukaisin naapuri (FN), Kauimpana pisteen algoritmitai Voor Hees -algoritmi. Klusterien välinen etäisyys määritellään niiden kauimpana olevien jäsenten välisellä etäisyydellä. Tämä menetelmä on laskennallisesti kallis.

img

  • Keskimääräinen kytkentä: tunnetaan myös UPGMA (Painottamaton pariryhmämenetelmä aritmeettisella keskiarvolla). Kunkin klusterin pistemäärän prosenttiosuus lasketaan suhteessa kahden klusterin pistemäärään, jos ne yhdistettäisiin.

img

  • Painotettu kytkentä: tunnetaan myös WPGMA (Painotettu pariryhmämenetelmä aritmeettisella keskiarvolla). Kahden klusterin yksittäiset pisteet vaikuttavat pienemmän ja suuremman klusterin väliseen etäisyyteen.
  • Keskusliitos: kutsutaan myös nimellä UPGMC (Painottamaton pariryhmämenetelmä, jossa käytetään sentroideja). Jokaiselle klusterille lasketaan kaikkien pisteiden keskiarvolla määritetty piste (keskipiste), ja klusterien välinen etäisyys on niiden keskipisteiden välinen etäisyys.

img

  • Osaston kytkentä: Tunnetaan myös MISSQ (Neliöiden summan minimilisäys). Se määrittää kahden klusterin välisen etäisyyden, laskee neliövirheen summan (ESS) ja valitsee peräkkäin seuraavat klusterit pienemmän ESS:n perusteella. Wardin menetelmä pyrkii minimoimaan ESS:n kasvun jokaisessa vaiheessa. Siksi virheiden minimoiminen.

img

Etäisyysmittarit

Linkityksen lisäksi voimme myös määrittää joitain eniten käytettyjä etäisyysmittareita:

  • Euklidinen: kutsutaan myös nimellä Pythagoraan tai suoraviivainen etäisyys. Se laskee kahden avaruuden pisteen välisen etäisyyden mittaamalla niiden välillä kulkevan janan pituuden. Se käyttää Pythagoraan lausetta ja etäisyysarvo on tulos (C) yhtälöstä:

$$
c^2 = a^2 + b^2
$$

  • Manhattan: kutsutaan myös Kaupunkikortteli, taksi etäisyys. Se on kahden pisteen kaikkien ulottuvuuksien mittojen absoluuttisten erojen summa. Jos nämä mitat ovat kaksi, se on analogista oikealle ja sitten vasemmalle kävellessä yhden korttelin.

img

  • Minkowski: se on yleistys sekä Euklidisen että Manhattanin etäisyyksistä. Se on tapa laskea etäisyydet absoluuttisten erojen perusteella Minkowski-metriikan järjestykseen p. Vaikka se on määritelty mille tahansa p> 0, sitä käytetään harvoin muille arvoille kuin 1, 2 ja ∞ (ääretön). Minkowskin etäisyys on sama kuin Manhattanin etäisyys kun p = 1, ja sama kuin Euklidinen etäisyys kun p = 2.

$$
Dleft(X,Yright) = vasen(summa_{i=1}^n |x_i-y_i|^pright)^{frac{1}{p}}
$$

img

  • Chebyshev: tunnetaan myös Shakkilauta etäisyys. Se on Minkowskin etäisyyden ääritapaus. Kun käytämme parametrin arvona ääretöntä p (p = ∞), päädymme metriikkaan, joka määrittelee etäisyyden suurimmaksi absoluuttiseksi eroksi koordinaattien välillä.
  • Kosini: se on kulmakosinin etäisyys kahden pistesarjan tai vektorin välillä. Kosinin samankaltaisuus on vektorien pistetulo jaettuna niiden pituuksien tulolla.
  • Jaccard: mittaa äärellisten pistejoukkojen samankaltaisuutta. Se määritellään pisteiden kokonaismääränä (kardinaliteetti) yhteisissä pisteissä kussakin joukossa (leikkauspiste) jaettuna molempien sarjojen kokonaispisteiden (liitos) pisteiden kokonaismäärällä (kardinaliteetti).
  • Jensen-Shannon: perustuu Kullback-Leibler-hajaantumiseen. Se ottaa huomioon pisteiden todennäköisyysjakaumat ja mittaa näiden jakaumien samankaltaisuutta. Se on suosittu todennäköisyyslaskennan ja tilastotieteen menetelmä.

Olemme valinneet Osasto ja Euklidinen dendrogrammille, koska ne ovat yleisimmin käytetty menetelmä ja mittari. Ne antavat yleensä hyviä tuloksia, koska Ward linkittää pisteitä virheiden minimoimisen perusteella, ja Euklidinen toimii hyvin pienemmissä mitoissa.

Tässä esimerkissä työskentelemme kahden markkinointitietojen ominaisuuden (sarakkeen) ja 200 havainnon tai rivin kanssa. Koska havaintojen määrä on suurempi kuin piirteiden määrä (200 > 2), työskentelemme matalaulotteisessa avaruudessa.

Kun ominaisuuksien määrä (F) on suurempi kuin havaintojen määrä (N) - useimmiten kirjoitettuna f >> N, se tarkoittaa, että meillä on suurikokoinen tila.

Jos ottaisimme mukaan enemmän attribuutteja, joten meillä on yli 200 ominaisuutta, euklidinen etäisyys ei ehkä toimi kovin hyvin, koska sillä olisi vaikeuksia mitata kaikkia pieniä etäisyyksiä erittäin suuressa tilassa, joka vain kasvaa. Toisin sanoen euklidisen etäisyyden lähestymistavalla on vaikeuksia käsitellä dataa niukkuus. Tämä on ongelma, jota kutsutaan ulottuvuuden kirous. Etäisyysarvot tulisivat niin pieniksi, että ne "laimentuvat" suuremmassa tilassa, vääristyivät, kunnes niistä tulee nolla.

Huomautus: Jos kohtaat tietojoukon f >> s, käytät todennäköisesti muita etäisyysmittareita, kuten Mahalanobis etäisyys. Vaihtoehtoisesti voit myös pienentää tietojoukon mittoja käyttämällä Pääkomponenttianalyysi (PCA). Tämä ongelma on yleinen varsinkin biologisten sekvensointitietojen klusteroinnissa.

Olemme jo keskustelleet mittareista, yhteyksistä ja siitä, kuinka kukin niistä voi vaikuttaa tuloksiimme. Jatketaan nyt dendrogrammianalyysiä ja katsotaan, kuinka se voi antaa meille viitteen tietojoukossamme olevien klustereiden määrästä.

Mielenkiintoisen määrän klustereita löytäminen dendrogrammista on sama asia kuin suurimman vaaka-avaruuden löytäminen, jossa ei ole pystysuoraa viivaa (tila, jossa on pisimmät pystyviivat). Tämä tarkoittaa, että klusterien välillä on enemmän eroa.

Voimme piirtää vaakaviivan, joka kulkee pisimmän etäisyyden läpi:

plt.figure(figsize=(10, 7))
plt.title("Customers Dendogram with line")
clusters = shc.linkage(selected_data, 
            method='ward', 
            metric="euclidean")
shc.dendrogram(clusters)
plt.axhline(y = 125, color = 'r', linestyle = '-')

img

Kun vaakaviiva on löydetty, laskemme, kuinka monta kertaa se ylitti pystysuorat viivat – tässä esimerkissä 5 kertaa. Joten 5 näyttää olevan hyvä osoitus niiden klustereiden määrästä, joiden välillä on suurin etäisyys.

Huomautuksia: Dendrogrammia tulee pitää vain viitteenä, kun sitä käytetään valittaessa klusterien lukumäärää. Se voi helposti saada tämän numeron pois, ja siihen vaikuttavat täysin linkin tyyppi ja etäisyysmittarit. Kun tehdään syvällistä klusterianalyysiä, on suositeltavaa tarkastella dendrogrammeja, joissa on erilaisia ​​yhteyksiä ja mittareita, ja tarkastella tuloksia, jotka on saatu kolmella ensimmäisellä rivillä, joissa klusterien välinen etäisyys on suurin.

Agglomeratiivisen hierarkkisen klusteroinnin toteuttaminen

Alkuperäisten tietojen käyttäminen

Toistaiseksi olemme laskeneet tietojoukollemme ehdotetun klusterimäärän, joka tukee alkuperäistä analyysiämme ja PCA-analyysiämme. Nyt voimme luoda agglomeratiivisen hierarkkisen klusterointimallimme Scikit-Learnin avulla AgglomerativeClustering ja selvitä markkinointipisteiden tarrat labels_:

from sklearn.cluster import AgglomerativeClustering

clustering_model = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward')
clustering_model.fit(selected_data)
clustering_model.labels_

Tämä johtaa:

array([4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3,
       4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 1,
       4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 0, 2, 0, 2,
       1, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 2, 1, 2, 0, 2, 0, 2, 0, 2,
       0, 2, 0, 2, 0, 2, 1, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2,
       0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2,
       0, 2])

Olemme tutkineet paljon päästäksemme tähän pisteeseen. Ja mitä nämä etiketit tarkoittavat? Tässä jokainen tietomme piste on merkitty ryhmäksi 0–4:

data_labels = clustering_model.labels_
sns.scatterplot(x='Annual Income (k$)', 
                y='Spending Score (1-100)', 
                data=selected_data, 
                hue=data_labels,
                pallete="rainbow").set_title('Labeled Customer Data')

img

Tämä on viimeinen klusteritietomme. Näet värikoodatut datapisteet viiden klusterin muodossa.

Datapisteet oikeassa alakulmassa (tunniste: 0, violetit datapisteet) kuuluvat asiakkaille, joilla on korkea palkka mutta alhainen kulutus. Nämä ovat asiakkaita, jotka käyttävät rahansa huolellisesti.

Vastaavasti oikeassa yläkulmassa olevat asiakkaat (tunniste: 2, vihreät datapisteet), ovat asiakkaita, joilla on korkeat palkat ja korkeat menot. Tällaisia ​​asiakkaita yritykset kohdistavat.

Asiakkaat keskellä (tunniste: 1, siniset tietopisteet) ovat ne, joilla on keskimääräiset tulot ja keskimääräiset menot. Eniten asiakkaita kuuluu tähän kategoriaan. Yritykset voivat myös kohdistaa nämä asiakkaat, koska heitä on valtava määrä.

Asiakkaat vasemmassa alakulmassa (tunniste: 4, punainen) ovat asiakkaita, joilla on alhaiset palkat ja alhaiset menot. Heidät voidaan houkutella tarjoamalla tarjouksia.

Ja lopuksi asiakkaat ylävasemmalla (tunniste: 3, oranssit datapisteet) ovat korkeatuloisia ja vähäisiä kuluja, jotka ovat ihanteellisesti markkinoinnin kohteena.

PCA:n tuloksen käyttäminen

Jos olisimme eri skenaariossa, jossa meidän täytyisi vähentää datan ulottuvuutta. Voisimme myös helposti piirtää klusteroidut PCA-tulokset. Tämä voidaan tehdä luomalla toinen agglomeratiivinen klusterointimalli ja hankkimalla tietonimike jokaiselle pääkomponentille:

clustering_model_pca = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward')
clustering_model_pca.fit(pcs)

data_labels_pca = clustering_model_pca.labels_

sns.scatterplot(x=pc1_values, 
                y=pc2_values,
                hue=data_labels_pca,
                palette="rainbow").set_title('Labeled Customer Data Reduced with PCA')

img

Huomaa, että molemmat tulokset ovat hyvin samanlaisia. Suurin ero on, että ensimmäinen tulos alkuperäisillä tiedoilla on paljon helpompi selittää. On selvää, että asiakkaat voidaan jakaa viiteen ryhmään vuositulojen ja kulutuspisteiden perusteella. Vaikka PCA-lähestymistavassa otamme kaikki ominaisuudet huomioon, niin paljon kuin voimme tarkastella kunkin niistä selittämää varianssia, tämä on vaikeampi käsittää, varsinkin kun raportoimme markkinointiosastolle.

Mitä vähiten meidän on muutettava tietojamme, sitä parempi.

Jos sinulla on erittäin suuri ja monimutkainen tietojoukko, jossa sinun on suoritettava ulottuvuuden vähentäminen ennen klusterointia – yritä analysoida kunkin ominaisuuden ja niiden jäännösten välisiä lineaarisia suhteita PCA:n käytön varmuuskopioimiseksi ja prosessin selittävyyden parantamiseksi. Luomalla lineaarisen mallin ominaisuusparia kohden voit ymmärtää, miten ominaisuudet toimivat vuorovaikutuksessa.

Jos datamäärä on niin suuri, on mahdotonta piirtää piirrepareja, valita tiedoistasi mahdollisimman tasapainoinen ja lähellä normaalijakaumaa oleva näyte ja suorittaa ensin analyysi otoksesta, ymmärtää se, hienosäätää se – ja käytä sitä myöhemmin koko tietojoukossa.

Voit aina valita erilaisia ​​klusterointivisualisointitekniikoita tietojesi luonteen mukaan (lineaarinen, epälineaarinen) ja tarvittaessa yhdistää tai testata niitä kaikkia.

Yhteenveto

Klusterointitekniikka voi olla erittäin kätevä, kun on kyse merkitsemättömästä tiedosta. Koska suurin osa todellisen maailman tiedoista on nimeämätöntä ja tietojen merkitseminen aiheuttaa korkeampia kustannuksia, klusterointitekniikoita voidaan käyttää merkitsemättömien tietojen merkitsemiseen.

Tässä oppaassa olemme tuoneet todellisen datatieteen ongelman, sillä klusterointitekniikoita käytetään laajalti markkinointianalyysissä (ja myös biologisessa analyysissä). Olemme myös selittäneet monia tutkimusvaiheita hyvän hierarkkisen klusterointimallin saavuttamiseksi ja dendrogrammien lukemisen ja pohtineet, onko PCA välttämätön vaihe. Päätavoitteemme on, että jotkin sudenkuopat ja erilaiset skenaariot, joissa voimme löytää hierarkkisen klusteroinnin, katetaan.

Hyvää klusterointia!

Aikaleima:

Lisää aiheesta Stackabus