K tähendab klastrimist R-s koos näitega

Lang L: none (table-of-contents):

Anonim

Selles õpetuses saate teada

  • Mis on klastrianalüüs?
  • K tähendab algoritmi
  • Optimaalne k

Mis on klastrianalüüs?

Klastrianalüüs on osa järelevalveta õppimisest . Klaster on rühm andmeid, millel on sarnased funktsioonid. Võime öelda, et klastrianalüüs on pigem avastamine kui ennustus. Masin otsib andmetest sarnasust. Näiteks võite klastrianalüüsi kasutada järgmise rakenduse jaoks:

  • Klientide segmentimine: otsib kliendigruppide vahelist sarnasust
  • Börsiklasterdamine: kontserni aktsiad tootluse põhjal
  • Vähendage andmekogumi mõõtmeid, rühmitades vaatlused sarnaste väärtustega

Klastrianalüüsi pole liiga keeruline rakendada ning see on ettevõtluse jaoks nii sisukas kui ka rakendatav.

Kõige silmatorkavam erinevus juhendatava ja järelevalveta õppimise vahel peitub tulemustes. Järelevalveta õppimine loob uue muutuja sildi, samas kui juhendatud õppimine ennustab tulemust. Masin aitab harjutajal püüda andmeid siltide põhjal tuvastada. Analüütiku ülesanne on gruppe kasutada ja neile nimi anda.

Toome näite klastrite mõiste mõistmiseks. Lihtsuse huvides töötame kahes dimensioonis. Teil on andmeid klientide kogukulu ja nende vanuse kohta. Reklaami täiustamiseks soovib turundusmeeskond saata oma klientidele sihipärasemaid e-kirju.

Järgmisel graafikul esitate kogukulud ja klientide vanuse.

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()

Selles kohas on muster nähtav

  1. Vasakus alanurgas näete väiksema ostujõuga noori
  2. Ülemine keskosa kajastab inimesi, kellel on töö, mida nad saavad endale lubada rohkem kulutada
  3. Lõpuks väiksema eelarvega vanemad inimesed.

Ülaloleval joonisel rühmitate vaatlused käsitsi ja määrate kõik kolm rühma. See näide on mõnevõrra sirgjooneline ja väga visuaalne. Kui andmekogumile on lisatud uusi tähelepanekuid, saate need sildidesse märkida. Te määrate ringi meie hinnangu põhjal. Selle asemel saate masinaõppe abil andmeid objektiivselt rühmitada.

Selles õpetuses saate teada, kuidas k-tähendab algoritmi kasutada.

K tähendab algoritmi

K-keskmine on kahtlemata kõige populaarsem klastrimeetod. Teadlased lasid algoritmi välja aastakümneid tagasi ja k-keskkonda on palju parandatud.

Algoritm püüab leida rühmi, minimeerides vaatluste vahelist kaugust, mida nimetatakse kohalikeks optimaalseteks lahendusteks. Vahemaad mõõdetakse vaatluste koordinaatide põhjal. Näiteks kahemõõtmelises ruumis on koordinaadid lihtsad ja.

Algoritm töötab järgmiselt:

  • 1. samm: valige funktsiooniplaanist juhuslikult rühmad
  • 2. samm: minimeerige klastri keskme ja erinevate vaatluste ( tsentroid ) vaheline kaugus . Selle tulemuseks on vaatlustega rühmad
  • 3. samm: nihutage esialgne tsentroid rühma koordinaatide keskmisele.
  • 4. samm: minimeerige vahemaa uute tsentriidide järgi. Luuakse uued piirid. Seega liiguvad vaatlused ühest rühmast teise
  • Korrake, kuni ükski vaatlus ei vaheta gruppe

K-keskmine võtab tavaliselt Eukleidese kauguse tunnuse ja tunnuse vahel:

Saadaval on erinevad mõõdud, näiteks Manhattani või Minlowski vahemaa. Pange tähele, et K-keskmine tagastab iga algoritmi käivitamisel erinevad rühmad. Tuletame meelde, et esimesed esialgsed oletused on juhuslikud ja arvutage vahemaad, kuni algoritm saavutab rühmades homogeensuse. See tähendab, et k-keskmine on esimese valiku suhtes väga tundlik ja kui vaatluste ja rühmade arv on väike, on sama klastrite saamine peaaegu võimatu.

Valige klastrite arv

Teine raskus, mis leiti k-keskmise puhul, on klastrite arvu valik. Stabiilsuse parandamiseks võite seada suure väärtuse, st suure hulga gruppe, kuid võite lõpuks saada andmeülekande . Ülemäärane paigaldamine tähendab, et uute tulemuste korral väheneb mudeli jõudlus oluliselt. Masin õppis andmekogumi vähe üksikasju ja võitleb üldise mustri üldistamise nimel.

Klastrite arv sõltub andmekogumi olemusest, tööstusharust, ärist ja muust. Sobiva arvu klastrite valimiseks kehtib rusikareegel:

võrdub andmestiku vaatluste arvuga.

Üldiselt on huvitav veeta aega, et otsida parimat väärtust, et see vastaks ettevõtte vajadustele.

Klastrianalüüsi tegemiseks kasutame personaalarvutite hindade andmekogumit. See andmekogum sisaldab 6259 vaatlust ja 10 funktsiooni. Andmekogum jälgib USA ajavahemikus 1993–1995 486 personaalarvuti hinda. Muutujad on muu hulgas hind, kiirus, ram, ekraan, cd.

Te jätkate järgmiselt:

  • Andmete importimine
  • Treenige mudelit
  • Hinnake mudelit

Andmete importimine

K tähendab, et see ei sobi tegurimuutujate jaoks, kuna see põhineb kaugusel ja diskreetsed väärtused ei anna tähendusrikkaid väärtusi. Meie andmestikust saate kustutada kolm kategoorilist muutujat. Pealegi pole selles andmestikus puuduvaid väärtusi.

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)
Väljund
## 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,… ## $ trend  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1… 

Kokkuvõtlikust statistikast näete, et andmetel on suured väärtused. Hea tava k keskmise ja kauguse arvutamisel on andmete skaala muutmine nii, et keskmine oleks võrdne ühe ja standardhälve võrdne nulliga.

summary(df)

Väljund:

## 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

Muutate muutujad dplyri teegi funktsiooniga scale (). Teisendamine vähendab kõrvalarvude mõju ja võimaldab võrrelda ainsat vaatlust keskmisega. Kui standardiseeritud väärtus (või z-skoor ) on kõrge, võite olla kindel, et see tähelepanek on tõepoolest üle keskmise (suur z-skoor tähendab, et see punkt on standardhälbe poolest keskmisest kaugel. A z- skoor kaks näitab, et väärtus on 2 standardhälvet keskmisest eemal. Pange tähele, et z-skoor järgib Gaussi jaotust ja on keskmise ümber sümmeetriline.

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-alusel on funktsioon k keskmise algoritmi käitamiseks. K keskmise põhifunktsioon on:

kmeans(df, k)arguments:-df: dataset used to run the algorithm-k: Number of clusters

Treenige mudelit

Joonisel 3 kirjeldate algoritmi toimimist. Kõiki samme näete graafiliselt koos suurepärase paketiehitusega, mille autor on Yi Hui (ka Knit for Rmarkdown looja). Pakettanimatsioon pole konda teegis saadaval. Paketi installimiseks install.packages'iga ("animatsioon") saate kasutada muud moodi. Saate kontrollida, kas pakett on meie kaustas Anaconda installitud.

install.packages("animation") 

Pärast teegi laadimist lisate kmeanide järel .ani ja R joonistab kõik sammud. Illustreerimise eesmärgil käivitate algoritmi ainult kolme klastriga muudetud skaalaga hd ja ram.

set.seed(2345)library(animation)kmeans.ani(rescale_df[2:3], 3)

Koodi selgitus

  • kmeans.ani (rescale_df [2: 3], 3): Valige andmekogumi rescale_df veerud 2 ja 3 ning käivitage algoritm k komplektiga 3. Joonistage animatsioon.

Animatsiooni saate tõlgendada järgmiselt:

  • 1. samm: R valib juhuslikult kolm punkti
  • 2. samm: arvutage Eukleidese kaugus ja joonistage klastrid. Vasakus alanurgas on üks rohelist klastrit, paremal üks musta värviga suur klaster ja nende vahel punane.
  • 3. samm: arvutage tsentroid, st klastrite keskmine
  • Korrake, kuni ükski teave klastrit ei muuda

Algoritm koondus pärast seitset iteratsiooni. Võite viie klastriga käivitada meie andmekogumis k-keskmise algoritmi ja nimetada seda pc_clusteriks.

pc_cluster <-kmeans(rescale_df, 5)
  • Nimekiri pc_cluster sisaldab seitset huvitavat elementi:
  • pc_cluster $ cluster: näitab iga vaatluse klastrit
  • pc_cluster $ keskused: klastri keskused
  • pc_cluster $ totss: ruutude summa
  • pc_cluster $ withinss: Ruudu summa piires. Tagastatavate komponentide arv on võrdne `k`-ga
  • pc_cluster $ tot.withinss: Sisestuste summa
  • pc_clusterbetweenss: Ruudu summa miinus Ruutu summa summa
  • pc_cluster $ size: vaatluste arv igas klastris

Klastrite k optimaalse arvu arvutamiseks kasutate ruudu summa summat (st. Tot.withinss). K leidmine on tõepoolest sisuline ülesanne.

Optimaalne k

Ühte tehnikat parima k valimiseks nimetatakse küünarnuki meetodiks . Selles meetodis kasutatakse varieeruvuse hindamiseks rühmasisest homogeensust või rühmasisest heterogeensust. Teisisõnu, teid huvitab dispersioonide protsent, mida iga klaster selgitab. Võite eeldada, et varieeruvus suureneb koos klastrite arvuga, alternatiivina väheneb heterogeensus. Meie väljakutseks on leida k, mis ületab kahanevat tulu. Uue klastri lisamine ei paranda andmete varieeruvust, sest selgitamiseks on jäänud väga vähe teavet.

Selles õpetuses leiame selle punkti heterogeensuse mõõtmise abil. Ruutude summa klastrites kokku on loendis tagastatav summa.withinss kmean () järgi.

Võite konstrueerida küünarnuki graafiku ja leida optimaalse k järgmiselt:

  • 1. samm: konstrueerige funktsioon, et arvutada ruutude summa klastrite piires
  • 2. samm: käivitage algoritmi korrad
  • 3. samm: looge algoritmi tulemustega andmeraam
  • 4. samm: joonistage tulemused üles

Samm 1) Konstrueerige funktsioon, et arvutada ruutude summa klastrite piires

Loote funktsiooni, mis käitab k-keskmise algoritmi, ja salvestate summa ruutude summa klastrite hulka

kmean_withinss <- function(k) {cluster <- kmeans(rescale_df, k)return (cluster$tot.withinss)}

Koodi selgitus

  • function (k): määrake funktsiooni argumentide arv
  • kmeans (rescale_df, k): käivitage algoritm k korda
  • return (klaster $ tot.withinss): kogusumma salvestatakse klastrite ruutude summana

Funktsiooni saab testida võrdsega 2.

Väljund:

## Try with 2 cluster
kmean_withinss(2)

Väljund:

## [1] 27087.07 

2. samm. Käivitage algoritm n korda

Algoritmi käitamiseks vahemikus k kasutate funktsiooni sapply (). See tehnika on kiirem kui tsükli loomine ja väärtuse salvestamine.

# Set maximum clustermax_k <-20# Run algorithm over a range of kwss <- sapply(2:max_k, kmean_withinss)

Koodi selgitus

  • max_k <-20: määrake maksimaalseks arvuks 20
  • sapply (2: max_k, kmean_withinss): käivitage funktsioon kmean_withinss () vahemikus 2: max_k, st 2 kuni 20.

3. samm. Looge algoritmi tulemustega andmeraam

Pärast loomist ja meie funktsiooni testimist saate k-keskmise algoritmi käivitada vahemikus 2 kuni 20, salvestada väärtused tot.withinss.

# Create a data frame to plot the graphelbow <-data.frame(2:max_k, wss)

Koodi selgitus

  • data.frame (2: max_k, wss): looge andmeraam algoritmipoe väljundiga wss-s

4. samm. Joonistage tulemused

Graafiku abil saate visualiseerida, kus on küünarnukk

# 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))

Graafikult näete, et optimaalne k on seitse, kus kõveral on vähenev tulu.

Kui teie optimaalne k on käes, käivitate algoritmi k-ga 7 ja hindate klastreid.

Klastri uurimine

pc_cluster_2 <-kmeans(rescale_df, 7)

Nagu juba varem mainitud, pääsete juurde kmean () abil tagastatud loendis olevale ülejäänud huvitavale teabele.

pc_cluster_2$clusterpc_cluster_2$centerspc_cluster_2$size 

Hindamisosa on subjektiivne ja tugineb algoritmi kasutamisele. Meie eesmärk on siin koguda sarnaste funktsioonidega arvutit. Arvutikutt saab seda tööd teha käsitsi ja rühmitada arvuti oma teadmiste põhjal. Protsess võtab aga palju aega ja on veaohtlik. K-keskmine algoritm võib tema jaoks välja valmistada, pakkudes klastreid.

Eelhinnanguna saate uurida klastrite suurust.

pc_cluster_2$size

Väljund:

## [1] 608 1596 1231 580 1003 699 542

Esimene klaster koosneb 608 vaatlusest, samas kui väikseimas klastris number 4 on ainult 580 arvutit. Võimalik, et klastrite vahel on homogeensus, kui mitte, võib vaja minna õhemat andmete ettevalmistamist.

Saate andmeid keskosaga sügavamalt uurida. Ridad viitavad klastri nummerdamisele ja veerud algoritmi kasutatavatele muutujatele. Väärtused on iga klastri keskmine skoor huvitatud veeru kohta. Standardimine muudab tõlgendamise lihtsamaks. Positiivsed väärtused näitavad, et antud klastri z-skoor on üldisest keskmisest kõrgem. Näiteks on 2. klastris kõigi klastrite seas kõrgeim hinnakeskmine.

center <-pc_cluster_2$centerscenter

Väljund:

## 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

Võite luua ggploti abil soojuskaardi, mis aitab meil esile tuua kategooriate vahelise erinevuse.

Ggploti vaikevärve tuleb muuta RColorBreweri teegiga. Terminalis käivitamiseks saate kasutada kondakogu ja koodi:

conda install -cr r-rcolorbrewer

Soojuskaardi loomiseks jätkake kolmes etapis:

  • Ehitage keskuse väärtustega andmeraam ja looge klastri numbriga muutuja
  • Andmed kujundage ümber tidyr teegi funktsiooniga collect (). Soovite andmeid teisendada laiest pikaks.
  • Funktsiooniga colorRampPalette () saate luua värvipaleti

Samm 1) Koostage andmeraam

Loome ümberkujundatud andmekogumi

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)

Väljund:

## 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

2. samm . Andmed kujundage ümber

Allolev kood loob värvipaleti, mida kasutate kuumakaardi joonistamiseks.

library(RColorBrewer)# Create the palettehm.palette <-colorRampPalette(rev(brewer.pal(10, 'RdYlGn')),space='Lab')

3. samm. Visualiseerige

Saate graafiku koostada ja vaadata, kuidas klastrid välja näevad.

# 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()

Kokkuvõte

K-keskmise algoritmi võime kokku võtta allolevas tabelis

Pakett

Eesmärk

funktsioon

argument

alus

Rong k-keskmine

kmeans ()

df, k

Juurdepääsuklaster

kmeans () $ klaster

Klastrikeskused

kmeans () $ keskused

Suuruskobar

kmeans () $ suurus