Tässä opetusohjelmassa opit
- Mikä on klusterianalyysi?
- K tarkoittaa algoritmia
- Optimaalinen k
Mikä on klusterianalyysi?
Klusterianalyysi on osa valvomatonta oppimista . Klusteri on joukko tietoja, joilla on samanlaisia ominaisuuksia. Voimme sanoa, että klusterointi-analyysi on enemmän löydöstä kuin ennustuksesta. Kone etsii tiedoista samankaltaisuutta. Voit esimerkiksi käyttää klusterianalyysiä seuraavassa sovelluksessa:
- Asiakassegmentti: etsii samankaltaisuutta asiakasryhmien välillä
- Osakemarkkinoiden klusterointi: Ryhmän osakkeet suorituskyvyn perusteella
- Vähennä tietojoukon ulottuvuutta ryhmittelemällä havainnot samanlaisilla arvoilla
Klusterointianalyysiä ei ole liian vaikea toteuttaa, ja se on mielekästä ja käytännöllistä yrityksille.
Silmiinpistävin ero valvotun ja valvomattoman oppimisen välillä on tuloksissa. Valvomaton oppiminen luo uuden muuttujan, tunnisteen, kun taas valvottu oppiminen ennustaa tuloksen. Kone auttaa harjoittajaa etsimään tiedot läheisen sukulaisuuden perusteella. Analyytikon tehtävä on käyttää ryhmiä ja antaa niille nimi.
Annetaan esimerkki klusteroinnin käsitteen ymmärtämiseksi. Yksinkertaisuuden vuoksi työskentelemme kahdessa ulottuvuudessa. Sinulla on tietoja asiakkaiden kokonaiskulutuksesta ja heidän ikästään. Mainonnan parantamiseksi markkinointitiimi haluaa lähettää kohdennettuja sähköposteja asiakkailleen.
Seuraavassa kaaviossa piirretään kokonaiskulutus ja asiakkaiden ikä.
library(ggplot2)df <- data.frame(age = c(18, 21, 22, 24, 26, 26, 27, 30, 31, 35, 39, 40, 41, 42, 44, 46, 47, 48, 49, 54),spend = c(10, 11, 22, 15, 12, 13, 14, 33, 39, 37, 44, 27, 29, 20, 28, 21, 30, 31, 23, 24))ggplot(df, aes(x = age, y = spend)) +geom_point()
Kuvio on näkyvissä tässä vaiheessa
- Vasemmassa alakulmassa näet nuoria, joilla on pienempi ostovoima
- Ylä-keskiosa kuvaa ihmisiä, joilla on varaa viettää enemmän
- Lopuksi, vanhemmat ihmiset, joilla on pienempi budjetti.
Yllä olevassa kuvassa ryhmittelet havainnot käsin ja määrität kaikki kolme ryhmää. Tämä esimerkki on hieman suoraviivainen ja erittäin visuaalinen. Jos tietojoukkoon liitetään uusia havaintoja, voit merkitä ne piireihin. Määrität ympyrän tuomiomme perusteella. Sen sijaan voit käyttää koneoppimista tietojen objektiiviseen ryhmittelyyn.
Tässä opetusohjelmassa opit käyttämään k-mean -algoritmia.
K tarkoittaa algoritmia
K-keskiarvo on epäilemättä suosituin klusterointimenetelmä. Tutkijat julkaisivat algoritmin vuosikymmeniä sitten, ja k-keskiarvoihin on tehty paljon parannuksia.
Algoritmi yrittää löytää ryhmiä minimoimalla havaintojen väliset etäisyydet, joita kutsutaan paikallisiksi optimaalisiksi ratkaisuiksi. Etäisyydet mitataan havaintojen koordinaattien perusteella. Esimerkiksi kaksiulotteisessa tilassa koordinaatit ovat yksinkertaisia ja.
Algoritmi toimii seuraavasti:
- Vaihe 1: Valitse piirustukset ryhmästä satunnaisesti
- Vaihe 2: Pienennä klusterikeskuksen ja eri havaintojen välinen etäisyys ( sentroidi ). Se johtaa ryhmiin, joissa on havaintoja
- Vaihe 3: Siirrä alkuperäinen sentroidi ryhmän koordinaattien keskiarvoon.
- Vaihe 4: Pienennä etäisyys uusien keskipisteiden mukaan. Uudet rajat luodaan. Siten havainnot siirtyvät ryhmästä toiseen
- Toista, kunnes mikään havainto ei muuta ryhmää
K-keskiarvo ottaa yleensä euklidisen etäisyyden ominaisuuden ja ominaisuuden välillä:
Saatavilla on erilaisia mittoja, kuten Manhattanin tai Minlowskin etäisyys. Huomaa, että K-keskiarvo palauttaa eri ryhmät joka kerta, kun suoritat algoritmin. Muistathan, että ensimmäiset alkuperäiset arvailut ovat satunnaisia, ja laske etäisyydet, kunnes algoritmi saavuttaa homogeenisuuden ryhmissä. Toisin sanoen k-keskiarvo on hyvin herkkä ensimmäiselle valinnalle, ja ellei havaintojen ja ryhmien määrä ole pieni, on lähes mahdotonta saada sama klusterointi.
Valitse klustereiden määrä
Toinen k-keskiarvon kanssa havaittu vaikeus on klustereiden lukumäärän valinta. Voit asettaa vakauden parantamiseksi korkean arvon, eli suuren määrän ryhmiä, mutta saatat päätyä liikaa tietoihin. Ylikunto tarkoittaa, että mallin suorituskyky heikkenee huomattavasti uuden tulevan datan osalta. Kone oppi pienet tietojoukon yksityiskohdat ja kamppailee yleisen mallin yleistämiseksi.
Klustereiden määrä riippuu tietojoukon luonteesta, toimialasta, liiketoiminnasta ja niin edelleen. On kuitenkin nyrkkisääntö, jonka avulla voit valita sopivan määrän klustereita:
kanssa yhtä suuri kuin tietojoukon havaintojen lukumäärä.
Yleisesti ottaen on mielenkiintoista viettää aikoja etsimään parasta vastinetta liiketoiminnan tarpeisiin.
Käytämme henkilökohtaisten tietokoneiden hinnat -tietojoukkoa klusterianalyysin suorittamiseen. Tämä tietojoukko sisältää 6259 havaintoa ja 10 ominaisuutta. Aineisto noudattaa 486 henkilökohtaisen tietokoneen hintaa vuosina 1993-1995 Yhdysvalloissa. Muuttujat ovat hinta, nopeus, ram, näyttö, CD.
Toimi seuraavasti:
- Tuo tietoja
- Harjoittele mallia
- Arvioi malli
Tuo tietoja
K tarkoittaa ei sovellu tekijämuuttujiin, koska se perustuu etäisyyteen eikä erilliset arvot palauta merkityksellisiä arvoja. Voit poistaa kolme kategorista muuttujaa tietojoukostamme. Lisäksi tässä tietojoukossa ei ole puuttuvia arvoja.
library(dplyr)PATH <-"https://raw.githubusercontent.com/guru99-edu/R-Programming/master/computers.csv"df <- read.csv(PATH) %>%select(-c(X, cd, multi, premium))glimpse(df)Tuotos
## Observations: 6, 259## Variables: 7## $ price < int > 1499, 1795, 1595, 1849, 3295, 3695, 1720, 1995, 2225, 2… ##$ speed < int > 25, 33, 25, 25, 33, 66, 25, 50, 50, 50, 33, 66, 50, 25,… ##$ hd < int > 80, 85, 170, 170, 340, 340, 170, 85, 210, 210, 170, 210… ##$ ram < int > 4, 2, 4, 8, 16, 16, 4, 2, 8, 4, 8, 8, 4, 8, 8, 4, 2, 4,… ##$ screen < int > 14, 14, 15, 14, 14, 14, 14, 14, 14, 15, 15, 14, 14, 14,… ##$ ads < int > 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,… ## $ trend1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
Yhteenvetotilastoista näet, että tiedoilla on suuria arvoja. Hyvä käytäntö k-keskiarvon ja etäisyyden laskemisen kanssa on skaalata tiedot uudelleen siten, että keskiarvo on yhtä ja keskihajonta nolla.
summary(df)
Tuotos:
## price speed hd ram## Min. : 949 Min. : 25.00 Min. : 80.0 Min. : 2.000## 1st Qu.:1794 1st Qu.: 33.00 1st Qu.: 214.0 1st Qu.: 4.000 `## Median :2144 Median : 50.00 Median : 340.0 Median : 8.000## Mean :2220 Mean : 52.01 Mean : 416.6 Mean : 8.287## 3rd Qu.:2595 3rd Qu.: 66.00 3rd Qu.: 528.0 3rd Qu.: 8.000## Max. :5399 Max. :100.00 Max. :2100.0 Max. :32.000## screen ads trend## Min. :14.00 Min. : 39.0 Min. : 1.00## 1st Qu.:14.00 1st Qu.:162.5 1st Qu.:10.00## Median :14.00 Median :246.0 Median :16.00## Mean :14.61 Mean :221.3 Mean :15.93## 3rd Qu.:15.00 3rd Qu.:275.0 3rd Qu.:21.50## Max. :17.00 Max. :339.0 Max. :35.00
Muutat muuttujat dplyr-kirjaston scale () -toiminnolla. Muunnos vähentää poikkeamien vaikutusta ja mahdollistaa ainoan havainnon vertaamisen keskiarvoon. Jos standardoitu arvo (tai z-pisteet ) on korkea, voit olla varma, että tämä havainto on todellakin keskiarvon yläpuolella (suuri z-piste tarkoittaa, että tämä piste on kaukana keskiarvosta keskihajonnan suhteen. Kahden pistemäärä osoittaa, että arvo on 2 standardipoikkeamaa keskiarvosta. Huomaa, että z-piste seuraa Gaussin jakaumaa ja on symmetrinen keskiarvon ympäri.
rescale_df <- df % > %mutate(price_scal = scale(price),hd_scal = scale(hd),ram_scal = scale(ram),screen_scal = scale(screen),ads_scal = scale(ads),trend_scal = scale(trend)) % > %select(-c(price, speed, hd, ram, screen, ads, trend))
R-emäksellä on k-algoritmin suorittamisen funktio. K-keskiarvon perustoiminto on:
kmeans(df, k)arguments:-df: dataset used to run the algorithm-k: Number of clusters
Harjoittele mallia
Kuvassa 3 esität yksityiskohtaisesti algoritmin toiminnan. Näet jokaisen vaiheen graafisesti Yi Huin (myös Knit for Rmarkdown -sovelluksen luojan) upealla pakettirakenteella. Pakettianimaatio ei ole käytettävissä huoneistokirjastossa. Voit käyttää toista tapaa asentaa paketti install.packages-ohjelmalla ("animaatio"). Voit tarkistaa, onko paketti asennettu Anaconda-kansioon.
install.packages("animation")
Kun olet ladannut kirjaston, lisäät .ani kmeanin jälkeen ja R piirtää kaikki vaiheet. Havainnollistamista varten suoritat algoritmin vain uudelleen skaalatuilla muuttujilla hd ja ram kolmella klusterilla.
set.seed(2345)library(animation)kmeans.ani(rescale_df[2:3], 3)
Koodin selitys
- kmeans.ani (rescale_df [2: 3], 3): Valitse rescale_df-tietojoukon sarakkeet 2 ja 3 ja suorita algoritmi k-sarjoilla 3. Piirrä animaatio.
Voit tulkita animaation seuraavasti:
- Vaihe 1: R valitsee satunnaisesti kolme pistettä
- Vaihe 2: Laske euklidinen etäisyys ja piirrä klusterit. Sinulla on yksi vihreä klusteri vasemmassa alakulmassa, yksi iso mustalla värillinen klusteri oikealla ja punainen niiden välillä.
- Vaihe 3: Laske sentroidi eli klustereiden keskiarvo
- Toista, kunnes mikään tieto ei muutu klusterissa
Algoritmi yhtyi seitsemän iteraation jälkeen. Voit ajaa k-mean -algoritmin tietojoukossa viidellä klusterilla ja kutsua sitä pc_clusteriksi.
pc_cluster <-kmeans(rescale_df, 5)
- Luettelossa pc_cluster on seitsemän mielenkiintoista elementtiä:
- pc_cluster $ cluster: Ilmaisee kunkin havainnon klusterin
- pc_cluster $ keskukset: Klusteri keskittyy
- pc_cluster $ totss: Neliöiden summa
- pc_cluster $ withinss: Neliön summan sisällä. Palautettavien komponenttien lukumäärä on yhtä suuri kuin `k`
- pc_cluster $ tot.withinss: Sisältöjen summa
- pc_clusterbetweenss: Neliön summa miinus Neliön summa
- pc_cluster $ size: Tarkkailumäärä kussakin klusterissa
Lasketaan klustereiden k optimaalinen määrä käyttämällä neliön sisäisen summan summaa (ts. Tot.withinss). K: n löytäminen on todellakin merkittävä tehtävä.
Optimaalinen k
Yksi tekniikka valita paras k kutsutaan kyynärpäämenetelmäksi . Tässä menetelmässä käytetään ryhmän sisäistä homogeenisuutta tai ryhmän sisäistä heterogeenisyyttä vaihtelun arvioimiseksi. Toisin sanoen olet kiinnostunut kunkin klusterin selittämästä varianssin prosenttiosuudesta. Voit odottaa vaihtelevuuden kasvavan klustereiden määrän mukana, tai heterogeenisyys vähenee. Haasteena on löytää k, joka on laskevan tuoton ulkopuolella. Uuden klusterin lisääminen ei paranna tietojen vaihtelevuutta, koska vain vähän tietoja on jäljellä selitettäväksi.
Tässä opetusohjelmassa löydämme tämän pisteen heterogeenisyyden mittauksella. Neliöiden summa klustereiden sisällä on luettelossa palautettu summa. Withinss kmean ().
Voit muodostaa kyynärkaavion ja löytää optimaalisen k seuraavasti:
- Vaihe 1: Muodosta funktio laskemaan kokonaisuus ryhmien sisällä neliöiden summa
- Vaihe 2: Suorita algoritmin ajat
- Vaihe 3: Luo datakehys algoritmin tuloksilla
- Vaihe 4: Piirrä tulokset
Vaihe 1) Rakenna funktio laskemaan kokonaisuus ryhmien sisällä neliöiden summa
Luodaan funktio, joka suorittaa k-keskialgoritmin ja tallentaa kokonaismäärän klustereiden neliösumman sisällä
kmean_withinss <- function(k) {cluster <- kmeans(rescale_df, k)return (cluster$tot.withinss)}
Koodin selitys
- function (k): Aseta funktion argumenttien määrä
- kmeans (rescale_df, k): Suorita algoritmi k kertaa
- return (klusteri $ tot.withinss): Tallenna summa klusterien neliösumman sisällä
Voit testata toimintoa yhtälöllä 2.
Tuotos:
## Try with 2 cluster
kmean_withinss(2)
Tuotos:
## [1] 27087.07
Vaihe 2) Suorita algoritmi n kertaa
Voit käyttää algoritmia k: n alueella käyttämällä sapply () -toimintoa. Tämä tekniikka on nopeampi kuin luoda silmukka ja tallentaa arvo.
# Set maximum clustermax_k <-20# Run algorithm over a range of kwss <- sapply(2:max_k, kmean_withinss)
Koodin selitys
- max_k <-20: Aseta enimmäismääräksi 20
- sapply (2: max_k, kmean_withinss): Suorita funktio kmean_withinss () alueella 2: max_k, eli 2-20.
Vaihe 3) Luo datakehys algoritmin tuloksista
Luomisen ja toimintojemme testaamisen jälkeen voit suorittaa k-keskiarvon algoritmin välillä 2 - 20, tallentaa summa. Arvot.
# Create a data frame to plot the graphelbow <-data.frame(2:max_k, wss)
Koodin selitys
- data.frame (2: max_k, wss): Luo datakehys, jossa on algoritmivaraston tulosteet wss: ssä
Vaihe 4) Piirrä tulokset
Piirrät kaavion visualisoidaksesi missä on kyynärpiste
# Plot the graph with gglopggplot(elbow, aes(x = X2.max_k, y = wss)) +geom_point() +geom_line() +scale_x_continuous(breaks = seq(1, 20, by = 1))
Kaaviosta näet, että optimaalinen k on seitsemän, jossa käyrällä on aleneva pienenevä tuotto.
Kun sinulla on optimaalinen k, suoritat algoritmin k: lla yhtä kuin 7 ja arvioit klusterit.
Tutkitaan klusteria
pc_cluster_2 <-kmeans(rescale_df, 7)
Kuten aiemmin mainittiin, voit käyttää jäljellä olevaa mielenkiintoista tietoa luettelossa, jonka palauttaa kmean ().
pc_cluster_2$clusterpc_cluster_2$centerspc_cluster_2$size
Arviointiosa on subjektiivinen ja perustuu algoritmin käyttöön. Tavoitteenamme on kerätä tietokone, jolla on samanlaiset ominaisuudet. Tietokonepoika voi tehdä työn käsin ja ryhmittää tietokoneen asiantuntemuksensa perusteella. Prosessi vie kuitenkin paljon aikaa ja on altis virheille. K-keskimääräinen algoritmi voi valmistaa kentän hänelle ehdottamalla klustereita.
Ennakkoarviointina voit tarkastella klustereiden kokoa.
pc_cluster_2$size
Tuotos:
## [1] 608 1596 1231 580 1003 699 542
Ensimmäinen klusteri koostuu 608 havainnosta, kun taas pienimmällä klusterilla, numero 4, on vain 580 tietokonetta. Voi olla hyvä olla homogeeninen klustereiden välillä, jos ei, ohuempi tietojen valmistelu saattaa olla tarpeen.
Saat syvällisemmän kuvan datasta keskikomponentin avulla. Rivit viittaavat klusterin numerointiin ja sarakkeet algoritmin käyttämiin muuttujiin. Arvot ovat kunkin klusterin keskimääräinen pistemäärä kiinnostuneelle sarakkeelle. Standardointi tekee tulkinnasta helpompaa. Positiiviset arvot osoittavat, että tietyn klusterin z-pisteet ovat yleisen keskiarvon yläpuolella. Esimerkiksi klusterilla 2 on korkein hintakeskiarvo kaikista klustereista.
center <-pc_cluster_2$centerscenter
Tuotos:
## price_scal hd_scal ram_scal screen_scal ads_scal trend_scal## 1 -0.6372457 -0.7097995 -0.691520682 -0.4401632 0.6780366 -0.3379751## 2 -0.1323863 0.6299541 0.004786730 2.6419582 -0.8894946 1.2673184## 3 0.8745816 0.2574164 0.513105797 -0.2003237 0.6734261 -0.3300536## 4 1.0912296 -0.2401936 0.006526723 2.6419582 0.4704301 -0.4132057## 5 -0.8155183 0.2814882 -0.307621003 -0.3205176 -0.9052979 1.2177279## 6 0.8830191 2.1019454 2.168706085 0.4492922 -0.9035248 1.2069855## 7 0.2215678 -0.7132577 -0.318050275 -0.3878782 -1.3206229 -1.5490909
Voit luoda ggplotilla lämpökartan, jotta voimme korostaa luokkien välistä eroa.
Ggplotin oletusvärejä on vaihdettava RColorBrewer-kirjastolla. Voit käyttää Conda-kirjastoa ja koodia käynnistääksesi terminaalissa:
conda install -cr r-rcolorbrewer
Luo lämpökartta seuraavalla tavalla:
- Rakenna datakehys keskuksen arvoilla ja luo muuttuja klusterin numerolla
- Muuta tiedot uudelleen tidyr-kirjaston keräystoiminnolla. Haluat muuttaa tietoja laajasta pitkään.
- Luo väripaletti colorRampPalette () -toiminnolla
Vaihe 1) Rakenna tietokehys
Luodaan muotoilutietojoukko uudelleen
library(tidyr)# create dataset with the cluster numbercluster <- c(1: 7)center_df <- data.frame(cluster, center)# Reshape the datacenter_reshape <- gather(center_df, features, values, price_scal: trend_scal)head(center_reshape)
Tuotos:
## cluster features values## 1 1 price_scal -0.6372457## 2 2 price_scal -0.1323863## 3 3 price_scal 0.8745816## 4 4 price_scal 1.0912296## 5 5 price_scal -0.8155183## 6 6 price_scal 0.8830191
Vaihe 2) Muotoile tiedot uudelleen
Alla oleva koodi luo väripaletin, jota käytetään piirtämään lämpökartta.
library(RColorBrewer)# Create the palettehm.palette <-colorRampPalette(rev(brewer.pal(10, 'RdYlGn')),space='Lab')
Vaihe 3) Visualisoi
Voit piirtää kaavion ja nähdä, miltä klusterit näyttävät.
# Plot the heat mapggplot(data = center_reshape, aes(x = features, y = cluster, fill = values)) +scale_y_continuous(breaks = seq(1, 7, by = 1)) +geom_tile() +coord_equal() +scale_fill_gradientn(colours = hm.palette(90)) +theme_classic()
Yhteenveto
Voimme tiivistää k-keskiarvon algoritmin alla olevassa taulukossa
Paketti |
Tavoite |
toiminto |
Perustelu |
---|---|---|---|
pohja |
Juna k-keskiarvo |
kmeans () |
df, k |
Access-klusteri |
kmeans () $ klusteri | ||
Klusterikeskukset |
kmeans () $ keskukset | ||
Koko klusteri |
kmeans () $ koko |