K-tähendab ClusterR-is koos näitega

Mis on Cluster analüüs?

Cluster analüüs on osa järelevalveta õppimine. Klaster on andmete rühm, millel on sarnased funktsioonid. Võime öelda, et rühmitusanalüüs on rohkem avastamine kui ennustus. Masin otsib andmetes sarnasust. Näiteks saate klastrianalüüsi kasutada järgmise rakenduse jaoks:

  • Klientide segmenteerimine: otsib sarnasust kliendirühmade vahel
  • Aktsiaturgude klasterdamine: Grupi aktsiad tootluste põhjal
  • Vähendage andmestiku dimensioonilisust, rühmitades vaatlused sarnaste väärtustega

ClusterAnalüüsi elluviimine ei ole liiga keeruline ning see on ettevõtte jaoks nii mõttekas kui ka rakendatav.

Kõige silmatorkavam erinevus juhendatud ja juhendamata õppimise vahel peitub tulemustes. Juhendajata õppimine loob uue muutuja, sildi, samas kui juhendatud õpe ennustab tulemust. Masin aitab praktiseerijal andmeid tiheda seotuse alusel märgistada. Analüütiku ülesanne on rühmi ära kasutada ja neile nime anda.

Toome näite, et mõista klastrite kontseptsiooni. Lihtsuse huvides töötame kahemõõtmeliselt. Teil on andmed klientide kogukulu ja nende vanuse kohta. Reklaami parandamiseks soovib turundusmeeskond saata oma klientidele rohkem suunatud e-kirju.

Järgmisel graafikul kujutate kogukulu ja klientide vanust.

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

Cluster Analüüs

Sellel hetkel on näha muster

  1. Vasakpoolses allnurgas näete madalama ostujõuga noori
  2. Ülemine keskmine peegeldab inimesi, kellel on töö, mida nad saavad lubada rohkem kulutada
  3. Lõpuks väiksema eelarvega vanemad inimesed.

Cluster Analüüs

Ülaltoodud joonisel koondate vaatlused käsitsi ja määratlete kõik kolm rühma. See näide on mõneti otsekohene ja väga visuaalne. Kui andmekogumile on lisatud uusi vaatlusi, saate need ringides sildistada. Te määratlete ringi meie hinnangu põhjal. Selle asemel võite kasutada Masinõpe et andmeid objektiivselt rühmitada.

Sellest õpetusest saate teada, kuidas kasutada k-tähendab algoritm.

K-tähendab algoritm

K-keskmine on kahtlemata kõige populaarsem rühmitusmeetod. Teadlased andsid algoritmi välja aastakümneid tagasi ja k-keskmisi on tehtud palju täiustusi.

Algoritm püüab leida rühmi, minimeerides vaatluste vahelist kaugust, nn kohalik optimaalne lahendusi. Vahemaad mõõdetakse vaatluste koordinaatide alusel. Näiteks kahemõõtmelises ruumis on koordinaadid lihtsad ja .

K-tähendab algoritmi

Algoritm töötab järgmiselt:

  • 1. samm: valige funktsiooniplaanist juhuslikult rühmad
  • 2. samm: minimeerige kaugus klastri keskpunkti ja erinevate vaatluste vahel (tsentroid). Tulemuseks on vaatlustega rühmad
  • Samm 3: Shift esialgne tsentroid rühmasiseste koordinaatide keskmisele.
  • 4. samm: minimeerige kaugus vastavalt uutele tsentroididele. Luuakse uued piirid. Seega liiguvad vaatlused ühest rühmast teise
  • Korrake, kuni ükski vaatlus ei muuda rühmi

K-keskmine võtab tavaliselt objekti ja tunnuse vahelise eukleidilise kauguse:

K-tähendab algoritmi

Saadaval on erinevad mõõdud, näiteks Manhattani kaugus või Minlowski kaugus. Pange tähele, et K-keskmine tagastab erinevad rühmad iga kord, kui käivitate algoritmi. Tuletage meelde, et esimesed esialgsed oletused on juhuslikud ja arvutage kaugused, 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 pole väike, on peaaegu võimatu saada sama klastrit.

Valige klastrite arv

Teine k-keskmise raskus on klastrite arvu valik. Stabiilsuse parandamiseks võite määrata suure väärtuse , st suure hulga gruppe, kuid see võib lõppeda liigne sobivus andmetest. Ülepaigutamine tähendab, et mudeli jõudlus väheneb uute tulevaste andmete puhul oluliselt. Masin õppis ära andmekogu pisidetailid ja nägi vaeva üldise mustri üldistamise nimel.

Klastrite arv sõltub andmekogumi olemusest, tööstusest, ärist jne. Siiski on olemas rusikareegel sobiva arvu klastrite valimiseks:

Valige number Clusters

võrdub vaatluste arvuga andmekogumis.

Üldiselt on huvitav kulutada aega, et otsida parimat väärtust, et see sobiks ärivajadustega.

Klasterdamisanalüüsi läbiviimiseks kasutame personaalarvutite hindade andmestikku. See andmestik sisaldab 6259 vaatlust ja 10 funktsiooni. Andmekogum jälgib USA-s 1993 personaalarvuti hinda aastatel 1995–486. Muutujad on muu hulgas hind, kiirus, ram, ekraan, cd.

Te jätkate järgmiselt:

  • Andmete importimine
  • Treeni modelli
  • Hinnake mudelit

Andmete importimine

K keskmine ei sobi faktormuutujate jaoks, kuna see põhineb kaugusel ja diskreetsed väärtused ei anna tähenduslikke väärtusi. Saate meie andmekogus kolm kategoorilist muutujat kustutada. 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  <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...

Kokkuvõtvast statistikast näete, et andmetel on suured väärtused. Hea tava k keskmise ja kauguse arvutamisel on andmete ümbermõõtmine nii, et keskmine oleks võrdne ühega ja standardhälve 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

Muutujate skaala muutmine toimub dplyr teegi funktsiooni scale() abil. Teisendus vähendab kõrvalekallete mõju ja võimaldab võrrelda ainuvaatlust keskmisega. Kui standardväärtus (või z-skoor) on kõrge, võite olla kindel, et see tähelepanek on tõepoolest keskmisest kõrgem (suur z-skoor tähendab, et see punkt on standardhälbe poolest keskmisest kaugel. Z-skoor kaks näitab, et väärtus on 2 standard kõrvalekalded keskmisest. 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 baasil on funktsioon k keskmise algoritmi käivitamiseks. K-keskmise põhifunktsioon on:

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

Treeni modelli

Joonisel 3 kirjeldasite üksikasjalikult, kuidas algoritm töötab. Näete iga sammu graafiliselt Yi Hui (samuti Knit for Rmarkdowni looja) koostatud suurepärase paketi abil. Paketi animatsioon pole conda teegis saadaval. Paketi installimiseks saate kasutada teist viisi koos install.packages("animatsioon") abil. Saate kontrollida, kas pakett on installitud meie Anaconda kaustas.

install.packages("animation")

Pärast teegi laadimist lisate .ani pärast kmeans ja R joonistab kõik sammud. Illustratsiooni eesmärgil käitate algoritmi ainult kolme klastriga muudetud muutujatega hd ja ram.

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

Code Selgitus

  • kmeans.ani(rescale_df[2:3], 3): valige andmestiku rescale_df veerud 2 ja 3 ning käivitage algoritm k komplektiga väärtusele 3. Joonistage animatsioon.

Treenige mudelit

Treenige mudelit

Animatsiooni saate tõlgendada järgmiselt:

  • 1. samm: R valib juhuslikult kolm punkti
  • 2. samm: arvutage välja Eukleidiline kaugus ja joonistage klastrid. Teil on üks roheline kobar all vasakul, üks suur musta värvi kobar paremal ja punane nende vahel.
  • 3. samm: arvutage välja tsentroid, st klastrite keskmine
  • Korrake, kuni andmed ei muuda klastrit

Algoritm lähenes seitsme iteratsiooni järel. Saate käivitada meie viie klastriga andmestiku k-keskmise algoritmi ja nimetada seda pc_cluster.

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

Klastrite optimaalse arvu k arvutamiseks kasutate ruudu sisesumma (st tot.withinss) summat. K leidmine on tõepoolest oluline ülesanne.

Optimaalne k

Ühte tehnikat parima k valimiseks nimetatakse küünarnuki meetod. See meetod kasutab varieeruvuse hindamiseks rühmasisest homogeensust või rühmasisest heterogeensust. Teisisõnu huvitab teid iga klastri seletatav dispersiooni protsent. Võite eeldada, et varieeruvus suureneb koos klastrite arvuga, alternatiivselt väheneb heterogeensus. Meie väljakutse on leida k, mis jääb kahanevatest tuludest kaugemale. 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. Klastrite kogusumma ruutude summa on tot.withinss loendis, mille tagastab kmean().

Saate koostada küünarnuki graafiku ja leida optimaalse k järgmiselt:

  • 1. samm: konstrueerige funktsioon klastrite ruutude summa arvutamiseks
  • 2. samm: käitage algoritmi korda
  • 3. samm: looge andmeraam algoritmi tulemustega
  • 4. samm: joonistage tulemused

Step 1) Koostage funktsioon klastrite ruutude summa arvutamiseks

Loote funktsiooni, mis käivitab k-keskmise algoritmi ja salvestate kogusumma klastrite ruutude summa

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

Code Selgitus

  • function(k): määrab funktsiooni argumentide arvu
  • kmeans(rescale_df, k): Käivitage algoritm k korda
  • return(cluster$tot.withinss): salvestab kogusumma klastrites ruutude summa

Saate funktsiooni testida väärtusega 2.

Väljund:

## Try with 2 cluster
kmean_withinss(2)

Väljund:

## [1] 27087.07

Step 2) Käivitage algoritm n korda

Algoritmi käivitamiseks vahemikus k kasutate funktsiooni sapply(). See tehnika on kiirem kui silmuse loomine ja väärtuse salvestamine.

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

Code 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.

Step 3) Looge andmeraam algoritmi tulemustega

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

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

Code Selgitus

  • data.frame(2:max_k, wss): looge andmeraam wss-is oleva algoritmihoidla väljundiga

Step 4) Joonistage tulemused

Joonistate graafiku, et visualiseerida, kus on küünarnuki punkt

# Plot the graph with gglop
ggplot(elbow, aes(x = X2.max_k, y = wss)) +
    geom_point() +
    geom_line() +
    scale_x_continuous(breaks = seq(1, 20, by = 1))

Optimaalne k

Graafikult on näha, et optimaalne k on seitse, kus kõver hakkab kahanema.

Kui teil on optimaalne k, käivitate algoritmi uuesti, kus k on 7, ja hindate klastreid.

Klastrit uurides

pc_cluster_2 <-kmeans(rescale_df, 7)

Nagu varem mainitud, pääsete juurde ülejäänud huvitavale teabele loendis, mille kmean() tagastab.

pc_cluster_2$cluster
pc_cluster_2$centers
pc_cluster_2$size

Hindamisosa on subjektiivne ja tugineb algoritmi kasutamisele. Meie eesmärk on koguda sarnaste funktsioonidega arvuti. Arvutimees saab seda tööd teha käsitsi ja grupiarvutiga, tuginedes oma teadmistele. Protsess võtab aga palju aega ja on vigadetundlik. K-keskmise algoritm suudab tema jaoks välja ette valmistada, soovitades 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õib olla hea, kui klastrite vahel oleks homogeensus, kui mitte, võib olla vaja õhemat andmete ettevalmistamist.

Keskmise komponendiga saate andmeid põhjalikumalt vaadata. Read viitavad klastri numeratsioonile ja veerud algoritmi poolt kasutatavatele muutujatele. Väärtused on huvitatud veeru iga klastri keskmine tulemus. Standardimine muudab tõlgendamise lihtsamaks. Positiivsed väärtused näitavad, et antud klastri z-skoor on üle üldise keskmise. Näiteks klastris 2 on kõigi klastrite seas kõrgeim keskmine hind.

center <-pc_cluster_2$centers
center

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

Saate luua ggploti abil soojuskaardi, mis aitab meil kategooriate erinevusi esile tuua.

Ggploti vaikevärve tuleb RColorBreweri teegiga muuta. Võite kasutada conda raamatukogu ja terminalis käivitatav kood:

conda install -cr r-rcolorbrewer

Soojuskaardi loomiseks toimige kolmes etapis:

  • Koostage andmeraam keskuse väärtustega ja looge muutuja klastri numbriga
  • Kujundage andmed ümber tidyr teegi funktsiooni kogumine() abil. Soovite andmeid laiadest pikkadeks muuta.
  • Looge värvipalett värvigaRampPalette() funktsioon

Step 1) Looge andmeraam

Loome ümberkujundamise andmestiku

library(tidyr)

# create dataset with the cluster number

cluster <- c(1: 7)
center_df <- data.frame(cluster, center)

# Reshape the data

center_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		

Step 2) Andmete ümberkujundamine

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

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

Samm 3) Visualiseeri

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

# Plot the heat map
ggplot(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()

Uurides Cluster

kokkuvõte

K-keskmise algoritmi saame kokku võtta allolevas tabelis

Pakend Eesmärk funktsioon Argument
baas Treeni k-keskmine kmeans() df, k
Juurdepääsuklaster kmeans()$klaster
Cluster keskused kmeans()$keskused
Suuruste kobar kmeans()$ suurus

Võta see postitus kokku järgmiselt: