K nozīmē klasterizāciju R ar piemēru

Satura rādītājs:

Anonim

Šajā apmācībā jūs uzzināsiet

  • Kas ir klastera analīze?
  • K nozīmē algoritmu
  • Optimālais k

Kas ir klastera analīze?

Klasteru analīze ir daļa no nepieskatītas mācīšanās . Klasteris ir datu grupa, kurai ir līdzīgas funkcijas. Mēs varam teikt, ka klasteru analīze ir vairāk saistīta ar atklājumiem, nevis prognozēm. Iekārta meklē datu līdzību. Piemēram, klastera analīzi varat izmantot šādai lietojumprogrammai:

  • Klientu segmentēšana: meklē līdzību starp klientu grupām
  • Fondu tirgus kopas: Grupas akcijas, balstoties uz rezultātiem
  • Samaziniet datu kopas dimensiju, grupējot novērojumus ar līdzīgām vērtībām

Klasteru analīzi nav pārāk grūti īstenot, un tā ir jēgpilna, kā arī piemērota uzņēmējdarbībai.

Spilgtākā atšķirība starp uzraudzīto un nepieskatīto mācīšanos slēpjas rezultātos. Nepieskatīta mācīšanās rada jaunu mainīgo - apzīmējumu, savukārt uzraudzīta mācīšanās paredz rezultātu. Iekārta palīdz praktizētājam mēģinājumos iezīmēt datus, pamatojoties uz tuvu radniecību. Analītiķa ziņā ir izmantot grupas un piešķirt tām vārdu.

Sniegsim piemēru, lai izprastu kopu jēdzienu. Vienkāršības labad mēs strādājam divās dimensijās. Jūsu rīcībā ir dati par klientu kopējiem tēriņiem un viņu vecumu. Lai uzlabotu reklamēšanu, mārketinga komanda vēlas nosūtīt mērķtiecīgākus e-pastus saviem klientiem.

Šajā diagrammā jūs uzzīmējat kopējos tēriņus un klientu vecumu.

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

Šajā brīdī ir redzams modelis

  1. Apakšējā kreisajā stūrī jūs varat redzēt jauniešus ar zemāku pirktspēju
  2. Augšējā vidusdaļa atspoguļo cilvēkus ar darbu, kuru viņi var atļauties tērēt vairāk
  3. Visbeidzot, vecāki cilvēki ar zemāku budžetu.

Iepriekš redzamajā attēlā novērojumus klasterizē ar rokām un definē katru no trim grupām. Šis piemērs ir nedaudz vienkāršs un ļoti vizuāls. Ja datu kopai ir pievienoti jauni novērojumi, varat tos iezīmēt lokos. Jūs definējat apli, pamatojoties uz mūsu spriedumu. Tā vietā, lai objektīvi sagrupētu datus, varat izmantot mašīnmācīšanos.

Šajā apmācībā jūs uzzināsiet, kā izmantot k-mean algoritmu.

K nozīmē algoritmu

K-mean, bez šaubām, ir vispopulārākā klasterizācijas metode. Pētnieki pirms vairākiem gadu desmitiem izlaida algoritmu, un k-nozīmē ir veikti daudzi uzlabojumi.

Algoritms mēģina atrast grupas, samazinot attālumu starp novērojumiem, ko sauc par vietējiem optimālajiem risinājumiem. Attālumus mēra, pamatojoties uz novērojumu koordinātām. Piemēram, divdimensiju telpā koordinātas ir vienkāršas un.

Algoritms darbojas šādi:

  • 1. solis: nejauši izvēlieties grupas funkciju plānā
  • 2. solis: samaziniet attālumu starp kopas centru un dažādiem novērojumiem ( centroidā ). Tā rezultātā ir grupas ar novērojumiem
  • 3. solis: Pārvietojiet sākotnējo centroidu uz vidējo koordinātu skaitu grupā.
  • 4. solis: samaziniet attālumu atbilstoši jaunajiem centraīdiem. Tiek izveidotas jaunas robežas. Tādējādi novērojumi pārvietosies no vienas grupas uz otru
  • Atkārtojiet, līdz neviens novērojums nemaina grupas

K-nozīmē parasti veic Eiklida attālumu starp pazīmi un pazīmi:

Ir pieejami dažādi mērījumi, piemēram, Manhetenas attālums vai Minlovska attālums. Ņemiet vērā, ka K-mean atgriež dažādas grupas katru reizi, kad palaižat algoritmu. Atgādinām, ka pirmie sākotnējie minējumi ir nejauši un aprēķina attālumus, līdz algoritms sasniedz viendabīgumu grupās. Tas ir, k-vidējais ir ļoti jutīgs pret pirmo izvēli, un, ja vien novērojumu un grupu skaits nav mazs, gandrīz nav iespējams iegūt tādu pašu kopu.

Atlasiet kopu skaitu

Vēl viena grūtība, kas konstatēta ar k-mean, ir kopu skaita izvēle. Lai uzlabotu stabilitāti, jūs varat iestatīt augstu vērtību, ti, lielu skaitu grupu, taču jūs varat iegūt pārāk daudz datu. Pārspīlēšana nozīmē, ka modeļa veiktspēja ievērojami samazinās attiecībā uz jauniem datiem. Iekārta uzzināja mazo datu kopas detaļu un cīnās, lai vispārinātu vispārējo modeli.

Kopu skaits ir atkarīgs no datu kopas veida, nozares, uzņēmējdarbības un tā tālāk. Tomēr pastāv īkšķis, lai izvēlētos atbilstošu kopu skaitu:

ar vienāds ar novērojumu skaitu datu kopā.

Vispārīgi runājot, ir interesanti pavadīt laiku, lai meklētu labāko cenu, kas atbilst biznesa vajadzībām.

Lai veiktu klasterizācijas analīzi, mēs izmantosim datu klāstu Personālo datoru cenas. Šajā datu kopā ir 6259 novērojumi un 10 funkcijas. Datu kopa novēro 486 personālo datoru cenu no 1993. līdz 1995. gadam ASV. Mainīgie lielumi ir cena, ātrums, ram, ekrāns, cd.

Jūs rīkosieties šādi:

  • Importēt datus
  • Apmāciet modeli
  • Novērtējiet modeli

Importēt datus

K nozīmē nav piemērots faktoru mainīgajiem, jo ​​tas ir balstīts uz attālumu un diskrētās vērtības neatgriež nozīmīgas vērtības. Trīs kategoriskos mainīgos varat izdzēst mūsu datu kopā. Turklāt šajā datu kopā nav trūkstošu vērtību.

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)
Rezultāts
## 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… 

No kopsavilkuma statistikas datiem var redzēt, ka datiem ir lielas vērtības. Laba prakse ar k vidējā un attāluma aprēķināšanu ir datu pārmērīšana, lai vidējais būtu vienāds ar vienu un standartnovirze būtu vienāda ar nulli.

summary(df)

Izeja:

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

Maināt mainīgos ar dplyr bibliotēkas funkciju scale (). Transformācija samazina izņēmumu ietekmi un ļauj salīdzināt vienīgo novērojumu ar vidējo. Ja standartizētā vērtība (vai z-rādītājs ) ir augsta, varat būt pārliecināts, ka šis novērojums patiešām pārsniedz vidējo (liels z-rādītājs nozīmē, ka šis punkts ir tālu no vidējā standarta novirzes izteiksmē. Rezultāts divi norāda, ka vērtība ir 2 standarta novirzes no vidējā. Ņemiet vērā, ka z rādītājs seko Gausa sadalījumam un ir simetrisks ap vidējo.

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 bāzei ir funkcija palaist k vidējo algoritmu. K vidējās vērtības pamatfunkcija ir:

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

Apmāciet modeli

Trešajā attēlā jūs sīki aprakstījāt, kā darbojas algoritms. Katru soli varat redzēt grafiski, izmantojot lielisko Yi Hui (arī Knit for Rmarkdown radītāja) pakotnes veidošanu. Kompleksā animācija konda bibliotēkā nav pieejama. Jūs varat izmantot citu pakotnes instalēšanas veidu ar install.packages ("animācija"). Jūs varat pārbaudīt, vai pakotne ir instalēta mūsu mapē Anaconda.

install.packages("animation") 

Pēc bibliotēkas ielādes jūs pievienojat .ani aiz kmeans, un R noformēs visas darbības. Ilustratīvam nolūkam jūs darbināt algoritmu tikai ar mainītiem mainīgajiem lielumiem hd un ram ar trim kopām.

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

Kods Paskaidrojums

  • kmeans.ani (rescale_df [2: 3], 3): Atlasiet rescale_df datu kopas 2. un 3. kolonnu un palaidiet algoritmu ar k kopu uz 3. Uzzīmējiet animāciju.

Animāciju var interpretēt šādi:

  • 1. solis: R nejauši izvēlas trīs punktus
  • 2. solis: Aprēķiniet Eiklida attālumu un uzzīmējiet kopas. Jums ir viena kopa zaļā krāsā apakšējā kreisajā stūrī, viena liela krāsa melnā krāsā labajā pusē un sarkanā starp tām.
  • 3. solis: Aprēķiniet centroidu, ti, kopu vidējo vērtību
  • Atkārtojiet, līdz neviens datu klasteris nemainās

Algoritms saplūda pēc septiņām atkārtojumiem. Jūs varat palaist k-mean algoritmu mūsu datu kopā ar piecām kopām un nosaukt to par pc_cluster.

pc_cluster <-kmeans(rescale_df, 5)
  • Sarakstā pc_cluster ir septiņi interesanti elementi:
  • pc_cluster $ cluster: norāda katra novērojuma kopu
  • pc_cluster $ centri: kopas centri
  • pc_cluster $ totss: Kopējā kvadrātu summa
  • pc_cluster $ withinss: Kvadrāta summas robežās. Atgriežamo komponentu skaits ir vienāds ar `k`
  • pc_cluster $ tot.withinss: withinss summa
  • pc_clusterbetweenss: Kvadrāta kopējā summa mīnus Kvadrāta summā
  • pc_cluster $ size: Novērojumu skaits katrā klasterī

Lai aprēķinātu optimālo kopu skaitu k, jūs izmantosiet kvadrāta summas summu (ti, tot.withinss). K atrašana patiešām ir būtisks uzdevums.

Optimālais k

Vienu paņēmienu, kā izvēlēties labāko k, sauc par elkoņa metodi . Lai novērtētu mainīgumu, šajā metodē tiek izmantota grupas homogenitāte vai grupas iekšējā neviendabība. Citiem vārdiem sakot, jūs interesē dispersijas procentuālais daudzums, ko izskaidro katrs klasteris. Var sagaidīt, ka mainīgums palielināsies līdz ar kopu skaitu, kā arī neviendabīgums samazinās. Mūsu izaicinājums ir atrast k, kas pārsniedz atdeves samazināšanos. Jauna klastera pievienošana neuzlabo datu mainīgumu, jo skaidrošanai ir atlicis ļoti maz informācijas.

Šajā apmācībā mēs atrodam šo punktu, izmantojot neviendabīguma mēru. Kopsummu kopa klasteros kvadrātu summa ir summa. Withinss sarakstā atgriežas pēc kmean ().

Jūs varat izveidot elkoņa grafiku un atrast optimālo k šādi:

  • 1. solis: izveidojiet funkciju, lai aprēķinātu kopējo daudzumu kopās kvadrātu kopsummā
  • 2. solis: palaidiet algoritma reizes
  • 3. solis: izveidojiet datu rāmi ar algoritma rezultātiem
  • 4. solis: uzzīmējiet rezultātus

1. solis. Konstruējiet funkciju, lai aprēķinātu kopējo daudzumu kopās kvadrātu kopsummā

Jūs izveidojat funkciju, kas vada algoritmu k-mean, un kopējo summu glabā kopu kvadrātu summā

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

Kods Paskaidrojums

  • funkcija (k): iestatiet argumenta skaitu funkcijā
  • kmeans (rescale_df, k): palaidiet algoritmu k reizes
  • atgriešanās (klasteris $ tot.withinss): kopējo summu uzglabā klasteru kvadrātu summā

Funkciju var pārbaudīt ar vienādu ar 2.

Izeja:

## Try with 2 cluster
kmean_withinss(2)

Izeja:

## [1] 27087.07 

2. solis. Palaidiet algoritmu n reizes

Jūs izmantosiet funkciju sapply (), lai palaistu algoritmu k diapazonā. Šī tehnika ir ātrāka nekā cikla izveide un vērtības saglabāšana.

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

Kods Paskaidrojums

  • max_k <-20: iestatiet maksimālo skaitu līdz 20
  • sapply (2: max_k, kmean_withinss): Palaidiet funkciju kmean_withinss () diapazonā 2: max_k, ti, no 2 līdz 20.

3. solis) Izveidojiet datu rāmi ar algoritma rezultātiem

Pēc izveides un mūsu funkcijas pārbaudes jūs varat palaist k-mean algoritmu diapazonā no 2 līdz 20, saglabāt total.withinss vērtības.

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

Kods Paskaidrojums

  • data.frame (2: max_k, wss): izveidojiet datu rāmi ar algoritma krātuves izvadi wss

4. solis. Uzzīmējiet rezultātus

Jūs uzzīmējat diagrammu, lai vizualizētu, kur atrodas elkoņa punkts

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

No grafika jūs varat redzēt optimālo k ir septiņi, kur līknei sāk samazināties atdeve.

Kad esat ieguvis optimālo k, jūs atkārtoti palaižat algoritmu ar k vienāds ar 7 un novērtējat kopas.

Klastera pārbaude

pc_cluster_2 <-kmeans(rescale_df, 7)

Kā minēts iepriekš, jūs varat piekļūt atlikušajai interesantajai informācijai sarakstā, ko atdod kmean ().

pc_cluster_2$clusterpc_cluster_2$centerspc_cluster_2$size 

Novērtēšanas daļa ir subjektīva un balstās uz algoritma izmantošanu. Mūsu mērķis šeit ir apkopot datoru ar līdzīgām funkcijām. Datoru puisis var paveikt darbu ar rokām un grupēt datoru, pamatojoties uz viņa pieredzi. Tomēr process prasīs daudz laika un būs pakļauts kļūdām. K-vidējais algoritms var sagatavot lauku viņam / viņai, piedāvājot kopas.

Kā iepriekšēju novērtējumu varat pārbaudīt kopu lielumu.

pc_cluster_2$size

Izeja:

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

Pirmo kopu veido 608 novērojumi, savukārt mazākajā klasterī ar 4. numuru ir tikai 580 datori. Var būt labi, ja klasteri ir viendabīgi, ja nē, var būt nepieciešama plānāka datu sagatavošana.

Jūs varat dziļāk apskatīt datus, izmantojot centrālo komponentu. Rindas attiecas uz klastera numerāciju un kolonnas uz algoritma izmantotajiem mainīgajiem. Vērtības ir katras klastera vidējais rezultāts ieinteresētajai kolonnai. Standartizācija atvieglo interpretāciju. Pozitīvas vērtības norāda, ka z-rādītājs konkrētajam kopumam pārsniedz kopējo vidējo. Piemēram, 2. klasterim ir visaugstākā cenu vidējā vērtība starp visām kopām.

center <-pc_cluster_2$centerscenter

Izeja:

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

Jūs varat izveidot siltuma karti ar ggplot, lai palīdzētu mums izcelt atšķirību starp kategorijām.

Ggplot noklusējuma krāsas jāmaina ar RColorBrewer bibliotēku. Lai palaistu terminālā, varat izmantot conda bibliotēku un kodu:

conda install -cr r-rcolorbrewer

Lai izveidotu siltuma karti, veiciet trīs darbības:

  • Izveidojiet datu rāmi ar centra vērtībām un izveidojiet mainīgo ar kopas numuru
  • Pārveidojiet datus ar tidyr bibliotēkas funkciju collect (). Jūs vēlaties pārveidot datus no plaša uz ilgu.
  • Izveidojiet krāsu paleti, izmantojot funkciju colorRampPalette ()

1. solis. Izveidojiet datu rāmi

Izveidosim pārveidošanas datu kopu

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)

Izeja:

## 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. solis. Pārveidojiet datus

Zemāk esošais kods izveido krāsu paleti, kuru izmantosiet, lai uzzīmētu siltuma karti.

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

3. solis) Vizualizējiet

Jūs varat uzzīmēt diagrammu un redzēt, kā kopas izskatās.

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

Kopsavilkums

Mēs varam apkopot k-vidējo algoritmu zemāk esošajā tabulā

Iepakojums

Mērķis

funkciju

arguments

bāze

Vilciens k-vidējais

kmeans ()

df, k

Piekļuves kopa

kmeans () $ kopa

Klasteru centri

kmeans () $ centri

Izmēru kopa

kmeans () $ lielums