V tej vadnici boste izvedeli
- Kaj je grozdna analiza?
- K-pomeni algoritem
- Optimalna k
Kaj je grozdna analiza?
Analiza grozdov je del nenadzorovanega učenja . Grozd je skupina podatkov, ki imajo podobne funkcije. Lahko rečemo, da je analiza grozdov bolj odkrivanje kot napoved. Naprava išče podobnost v podatkih. Analizo grozdov lahko na primer uporabite za naslednjo aplikacijo:
- Segmentacija strank: išče podobnost med skupinami strank
- Grupiranje na delniških trgih: Skupinske delnice na podlagi uspešnosti
- Zmanjšajte dimenzionalnost nabora podatkov z združevanjem opazovanj s podobnimi vrednostmi
Analize grozdov ni preveč težko izvesti in je tako smiselna kot tudi uporabna za poslovanje.
Najbolj presenetljiva razlika med nadzorovanim in nenadzorovanim učenjem je v rezultatih. Nenadzorovano učenje ustvarja novo spremenljivko, oznako, medtem ko nadzorovano učenje napoveduje rezultat. Naprava pomaga izvajalcu pri iskanju podatkov na podlagi tesne povezanosti. Na analitiku je, da uporabi skupine in jim da ime.
Naredimo primer za razumevanje koncepta združevanja v skupine. Zaradi poenostavitve delamo v dveh dimenzijah. Na voljo imate podatke o skupni porabi strank in njihovi starosti. Za izboljšanje oglaševanja želi marketinška skupina svojim strankam poslati bolj ciljno usmerjena e-poštna sporočila.
Na naslednjem grafu narišete skupno porabo in starost strank.
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()
Na tej točki je viden vzorec
- Spodaj levo lahko vidite mlade z nižjo kupno močjo
- Zgornji srednji del odraža ljudi s službo, za katero si lahko privoščijo več
- Končno tudi starejši ljudje z nižjim proračunom.
Na zgornji sliki opazovanja združujete ročno in definirate vsako od treh skupin. Ta primer je nekoliko preprost in zelo vizualen. Če so naboru podatkov dodana nova opazovanja, jih lahko označite v krogih. Krog določite na podlagi naše presoje. Namesto tega lahko s strojnim učenjem objektivno združite podatke.
V tej vadnici boste izvedeli, kako uporabljati algoritem k-pomeni .
K-pomeni algoritem
K-povprečje je nedvomno najbolj priljubljena metoda združevanja v skupine. Raziskovalci so algoritem izdali pred desetletji, na področju k-sredstev pa je bilo narejenih veliko izboljšav.
Algoritem poskuša najti skupine z zmanjšanjem razdalje med opazovanji, ki se imenuje lokalne optimalne rešitve. Razdalje se merijo na podlagi koordinat opazovanja. Na primer, v dvodimenzionalnem prostoru so koordinate preproste in.
Algoritem deluje na naslednji način:
- 1. korak: Naključno izberite skupine v načrtu funkcij
- 2. korak: Zmanjšajte razdaljo med središčem gruče in različnimi opazovanji ( centroid ). Rezultat so skupine z opazovanji
- 3. korak: Začetni centroid premaknite na sredino koordinat znotraj skupine.
- 4. korak: Zmanjšajte razdaljo v skladu z novimi centroidi. Ustvarijo se nove meje. Tako se bodo opazovanja selila iz ene skupine v drugo
- Ponavljajte, dokler nobeno opazovanje ne spremeni skupin
K-pomeni običajno zavzame evklidsko razdaljo med značilnostjo in značilnostjo:
Na voljo so različni ukrepi, na primer razdalja do Manhattna ali razdalja Minlowski. Upoštevajte, da K-mean vrne različne skupine vsakič, ko zaženete algoritem. Spomnimo se, da so prva začetna ugibanja naključna in izračunajo razdalje, dokler algoritem ne doseže homogenosti znotraj skupin. To pomeni, da je k-povprečje zelo občutljivo na prvo izbiro in če je število opazovanj in skupin majhno, je skoraj nemogoče doseči isto gručiranje.
Izberite število gruč
Druga težava, ki jo najdemo pri k-povprečju, je izbira števila grozdov. Za izboljšanje stabilnosti lahko nastavite visoko vrednost, tj. Veliko število skupin, vendar lahko na koncu dobite preveč podatkov. Prekomerno opremljanje pomeni, da se zmogljivost modela znatno zmanjša za nove prihajajoče podatke. Stroj se je naučil majhnih podrobnosti nabora podatkov in si prizadeval za posploševanje celotnega vzorca.
Število grozdov je odvisno od narave nabora podatkov, panoge, poslovanja itd. Vendar obstaja pravilo, da izberete ustrezno število grozdov:
z enakim številu opazovanj v naboru podatkov.
Na splošno je zanimivo preživljati čase za iskanje najboljše vrednosti, ki ustreza poslovnim potrebam.
Za izvedbo naše analize grozdov bomo uporabili nabor podatkov Cene osebnih računalnikov. Ta nabor podatkov vsebuje 6259 opazovanj in 10 funkcij. Podatkovni niz upošteva ceno 486 osebnih računalnikov v ZDA od leta 1993 do 1995. Spremenljivke so med drugim cena, hitrost, ram, zaslon, cd.
Nadaljevali boste, kot sledi:
- Uvozi podatke
- Trenirajte model
- Ocenite model
Uvozi podatke
K pomeni, da ni primeren za faktor spremenljivke, ker temelji na razdalji in diskretne vrednosti ne vrnejo smiselnih vrednosti. V našem naboru podatkov lahko izbrišete tri kategorične spremenljivke. Poleg tega v tem naboru podatkov manjkajo vrednosti.
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)Izhod
## 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…
Iz povzetka statistike lahko vidite, da imajo podatki velike vrednosti. Dobra praksa pri izračunu povprečja k in razdalje je prilagoditev podatkov tako, da je srednja vrednost enaka enoti, standardni odklon pa enak nič.
summary(df)
Izhod:
## 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
Spremenljivke spremenite s funkcijo scale () knjižnice dplyr. Preoblikovanje zmanjšuje vpliv izstopajočih in omogoča primerjavo samo opazovanja s povprečjem. Če je standardizirana vrednost (ali z-rezultat ) visoka, ste lahko prepričani, da je to opazovanje res nad povprečjem (velik z-rezultat pomeni, da je ta točka v smislu standardnega odklona daleč od povprečja. A z- rezultat dva pomeni, da je vrednost od standardne deviacije oddaljena od povprečja 2. Z-rezultat sledi Gaussovi porazdelitvi in je simetričen okoli srednje vrednosti.
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 base ima funkcijo za zagon algoritma k mean. Osnovna funkcija k povprečja je:
kmeans(df, k)arguments:-df: dataset used to run the algorithm-k: Number of clusters
Trenirajte model
Na sliki tri ste podrobno opisali delovanje algoritma. Vsak korak lahko vidite grafično z odličnim paketom, ki ga je sestavil Yi Hui (tudi ustvarjalec Knit for Rmarkdown). Animacija paketov ni na voljo v knjižnici conda. Paket lahko uporabite tudi za namestitev paketa z install.packages ("animacija"). Ali je paket nameščen, lahko preverite v naši mapi Anaconda.
install.packages("animation")
Ko naložite knjižnico, dodate .ani po kmeans in R bo izrisal vse korake. Za ponazoritev algoritem zaženete samo s spremenjenimi spremenljivkami hd in ram s tremi grozdi.
set.seed(2345)library(animation)kmeans.ani(rescale_df[2:3], 3)
Razlaga kode
- kmeans.ani (rescale_df [2: 3], 3): Izberite stolpca 2 in 3 nabora podatkov rescale_df in zaženite algoritem s k nabori na 3. Naredite animacijo.
Animacijo si lahko razlagate tako:
- 1. korak: R naključno izbere tri točke
- 2. korak: Izračunaj evklidsko razdaljo in nariši grozde. Spodaj levo imate eno kopico v zeleni barvi, desno desno v črni barvi, rdečo pa med njimi.
- 3. korak: Izračunajte centroid, tj. Sredino grozdov
- Ponavljajte, dokler nobena skupina ne spremeni podatkovne skupine
Algoritem se je združil po sedmih ponovitvah. V našem naboru podatkov lahko s petimi gručami zaženete algoritem k-mean in ga pokličete pc_cluster.
pc_cluster <-kmeans(rescale_df, 5)
- Seznam pc_cluster vsebuje sedem zanimivih elementov:
- pc_cluster $ cluster: Označuje skupino vsakega opazovanja
- pc_cluster $ centri: središča grozda
- pc_cluster $ totss: Skupna vsota kvadratov
- pc_cluster $ Withinss: znotraj vsote kvadratov. Število vrnjenih komponent je enako "k"
- pc_cluster $ tot.withinss: Vsota notranjosti
- pc_clusterbetweenss: Skupna vsota kvadrata minus Vsota kvadrata
- pc_cluster $ size: Število opazovanj znotraj vsake skupine
Za izračun optimalnega števila grozdov k boste uporabili vsoto znotraj vsote kvadrata (tj. Tot.withinss). Iskanje k je resnično pomembna naloga.
Optimalna k
Ena izmed tehnik za izbiro najboljšega k se imenuje komolčna metoda . Ta metoda za ugotavljanje spremenljivosti uporablja homogenost znotraj skupine ali heterogenost znotraj skupine. Z drugimi besedami, zanima vas odstotek variance, ki ga pojasni posamezna skupina. Pričakujete lahko, da se bo variabilnost povečala s številom skupin, heterogenost pa se bo zmanjšala. Naš izziv je najti k, ki presega donose, ki se zmanjšujejo. Dodajanje nove gruče ne izboljša spremenljivosti podatkov, ker je za razlago treba prepustiti le malo informacij.
V tej vadnici to točko najdemo z uporabo merila heterogenosti. Skupna vsota kvadratov skupin znotraj skupin je tot.withinss v vrnitvi seznama s kmean ().
Graf komolcev lahko sestavite in poiščete optimalni k, kot sledi:
- Korak 1: Sestavite funkcijo za izračun vsote vsote kvadratov znotraj skupin
- 2. korak: Zaženite čas algoritma
- 3. korak: Ustvarite podatkovni okvir z rezultati algoritma
- 4. korak: Nanesite rezultate
Korak 1) Sestavite funkcijo za izračun vsote vsote kvadratov znotraj skupin
Ustvarite funkcijo, ki zažene algoritem k-mean, in vsoto shranite znotraj vsote kvadratov grozdov
kmean_withinss <- function(k) {cluster <- kmeans(rescale_df, k)return (cluster$tot.withinss)}
Razlaga kode
- funkcija (k): nastavite število argumentov v funkciji
- kmeans (rescale_df, k): Zaženite algoritem k krat
- return (gruča $ tot.withinss): Vsoto kvadratov shrani v skupino vsot
Funkcijo lahko preizkusite z enakim 2.
Izhod:
## Try with 2 cluster
kmean_withinss(2)
Izhod:
## [1] 27087.07
2. korak) Zaženite algoritem n-krat
Funkcijo sapply () boste uporabili za zagon algoritma v obsegu k. Ta tehnika je hitrejša od ustvarjanja zanke in shranjevanja vrednosti.
# Set maximum clustermax_k <-20# Run algorithm over a range of kwss <- sapply(2:max_k, kmean_withinss)
Razlaga kode
- max_k <-20: Nastavite največje število na 20
- sapply (2: max_k, kmean_withinss): Zaženite funkcijo kmean_withinss () v obsegu 2: max_k, tj. 2 do 20.
Korak 3) Ustvarite podatkovni okvir z rezultati algoritma
Po ustvarjanju in testiranju naše funkcije lahko algoritem k-mean zaženete v območju od 2 do 20, shranite vrednosti tot.withinss.
# Create a data frame to plot the graphelbow <-data.frame(2:max_k, wss)
Razlaga kode
- data.frame (2: max_k, wss): Ustvarite podatkovni okvir z izhodom shrambe algoritmov v wss
Korak 4) Nanesite rezultate
Graf narišete tako, da vizualizira, kje je komolčna točka
# 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))
Iz grafa lahko vidite, da je optimalni k sedem, kjer ima krivulja vse manjši donos.
Ko dobite naš optimalni k, znova zaženete algoritem s k, ki je enak 7, in ocenite grozde.
Preučevanje grozda
pc_cluster_2 <-kmeans(rescale_df, 7)
Kot smo že omenili, lahko dostopate do preostalih zanimivih informacij na seznamu, ki ga vrne kmean ().
pc_cluster_2$clusterpc_cluster_2$centerspc_cluster_2$size
Ocenjevalni del je subjektiven in temelji na uporabi algoritma. Naš cilj tukaj je zbrati računalnik s podobnimi funkcijami. Računalnik lahko delo opravi ročno in na podlagi svojega strokovnega znanja združuje računalnike. Vendar bo postopek trajal veliko časa in bo nagnjen k napakam. K-srednji algoritem mu lahko pripravi polje tako, da predlaga grozde.
Kot predhodno oceno lahko preučite velikost grozdov.
pc_cluster_2$size
Izhod:
## [1] 608 1596 1231 580 1003 699 542
Prvo skupino sestavlja 608 opazovanj, medtem ko ima najmanjša kopica, številka 4, le 580 računalnikov. Morda bi bilo dobro imeti homogenost med grozdi, če ne, bo morda potrebna tanjša priprava podatkov.
Podatke dobite poglobljeno s sredinsko komponento. Vrstice se nanašajo na oštevilčenje grozda, stolpci pa na spremenljivke, ki jih uporablja algoritem. Vrednosti so povprečna ocena posamezne skupine za zadevni stolpec. Standardizacija olajša razlago. Pozitivne vrednosti kažejo, da je z-rezultat za določeno skupino nad splošno povprečjem. Na primer, grozd 2 ima najvišje povprečje cen med vsemi grozdi.
center <-pc_cluster_2$centerscenter
Izhod:
## 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
Z ggplotom lahko ustvarite toplotni zemljevid, ki nam bo pomagal poudariti razliko med kategorijami.
Privzete barve ggplota je treba spremeniti s knjižnico RColorBrewer. Knjižnico conda in kodo lahko uporabite za zagon v terminalu:
conda install -cr r-rcolorbrewer
Če želite ustvariti toplotni zemljevid, nadaljujte v treh korakih:
- Zgradite podatkovni okvir z vrednostmi središča in ustvarite spremenljivko s številko gruče
- Podatke preoblikujte s funkcijo collect () knjižnice tidyr. Podatke želite spremeniti iz širokih v dolge.
- Ustvarite paleto barv s funkcijo colorRampPalette ()
1. korak) Zgradite podatkovni okvir
Ustvarimo preoblikovani nabor podatkov
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)
Izhod:
## 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. korak) Preoblikujte podatke
Spodnja koda ustvarja paleto barv, ki jih boste uporabili za risanje toplotne karte.
library(RColorBrewer)# Create the palettehm.palette <-colorRampPalette(rev(brewer.pal(10, 'RdYlGn')),space='Lab')
3. korak) Vizualizirajte
Graf lahko narišete in si ogledate, kako izgledajo grozdi.
# 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()
Povzetek
K-povprečni algoritem lahko povzamemo v spodnji tabeli
Paket |
Cilj |
funkcijo |
prepir |
---|---|---|---|
osnova |
Vlak k-mean |
kmeans () |
df, k |
Dostopna grozd |
kmeans () $ gruča | ||
Centri grozdov |
kmeans () $ centrov | ||
Velikostna kopica |
kmeans () $ velikost |