A K jelentése az R csoportosulása a példával

Tartalomjegyzék:

Anonim

Ebben az oktatóanyagban megtanulja

  • Mi a klaszterelemzés?
  • A K jelentése algoritmus
  • Optimális k

Mi a klaszterelemzés?

A klaszterelemzés a felügyelet nélküli tanulás része . A fürt egy olyan adatcsoport, amely hasonló tulajdonságokkal rendelkezik. Mondhatjuk, a klaszterelemzés inkább a felfedezésről szól, mint a jóslatról. A gép hasonlóságot keres az adatokban. Például a következő alkalmazáshoz használhatja a fürtelemzést:

  • Ügyfélszegmentálás: Keresi a hasonlóságot az ügyfélcsoportok között
  • Tőzsdei klaszterezés: Csoportos részvény teljesítmény alapján
  • Csökkentse az adatkészlet dimenzióit azáltal, hogy a megfigyeléseket hasonló értékekkel csoportosítja

A klaszterelemzést nem túl nehéz megvalósítani, és értelmes, valamint hasznos az üzleti élet számára.

A legszembetűnőbb különbség a felügyelt és a felügyelet nélküli tanulás között az eredményekben rejlik. A felügyelet nélküli tanulás új változót hoz létre, a címkét, míg a felügyelt tanulás megjósolja az eredményt. A gép segít a gyakorlónak abban, hogy az adatokat szoros rokonság alapján címkézze. Az elemző feladata, hogy felhasználja a csoportokat és nevet adjon nekik.

Tegyünk egy példát a klaszterezés fogalmának megértésére. Az egyszerűség kedvéért két dimenzióban dolgozunk. Adataid vannak az ügyfelek teljes költéseiről és életkorukról. A reklám javítása érdekében a marketing csapat célzottabb e-maileket szeretne küldeni ügyfeleinek.

A következő grafikonon megrajzolja a teljes ráfordítást és az ügyfelek életkorát.

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

Ezen a ponton egy minta látható

  1. A bal alsó sarokban alacsonyabb vásárlóerővel rendelkező fiatalokat láthat
  2. A felső-közép az embereket olyan munkával tükrözi, amelyet megengedhetnek maguknak, hogy többet költsenek
  3. Végül az alacsonyabb költségvetéssel rendelkező idős emberek.

A fenti ábrán kézzel csoportosítja a megfigyeléseket, és meghatározza mindhárom csoportot. Ez a példa kissé egyértelmű és rendkívül látványos. Ha új megfigyeléseket csatolnak az adatkészlethez, felcímkézheti őket a körökön belül. Ön a megítélésünk alapján határozza meg a kört. Ehelyett a Machine Learning segítségével objektíven csoportosíthatja az adatokat.

Ebben az oktatóanyagban megtudhatja, hogyan kell használni a k-mean algoritmust.

A K jelentése algoritmus

A K-átlag kétségtelenül a legnépszerűbb klaszterezési módszer. A kutatók évtizedekkel ezelőtt kiadták az algoritmust, és rengeteg fejlesztést hajtottak végre a k-átlagokon.

Az algoritmus megpróbálja megtalálni a csoportokat a megfigyelések közötti távolság minimalizálásával, az úgynevezett lokális optimális megoldásoknak. A távolságokat a megfigyelések koordinátái alapján mérjük. Például kétdimenziós térben a koordináták egyszerűek és.

Az algoritmus a következőképpen működik:

  • 1. lépés: Véletlenszerűen válasszon csoportokat a funkciótervben
  • 2. lépés: Minimalizálja a fürt közepe és a különböző megfigyelések ( centroid ) közötti távolságot . Megfigyeléseket tartalmazó csoportokat eredményez
  • 3. lépés: Vigye a kezdeti centroidot a csoporton belüli koordináták átlagára.
  • 4. lépés: Minimalizálja a távolságot az új centridák szerint. Új határok jönnek létre. Így a megfigyelések egyik csoportból a másikba kerülnek
  • Addig ismételje, amíg egyetlen megfigyelés sem változtat csoportot

A K-átlag általában az euklideszi távolságot veszi fel a jellemző és a jellemző között:

Különböző mérőszámok állnak rendelkezésre, mint például a manhattani távolság vagy a Minlowski távolság. Ne feledje, hogy a K-átlag különböző csoportokat ad vissza minden alkalommal, amikor az algoritmust futtatja. Emlékezzünk vissza, hogy az első kezdeti találgatások véletlenszerűek, és számítsuk ki a távolságokat, amíg az algoritmus el nem éri a csoportokon belüli homogenitást. Vagyis a k-átlag nagyon érzékeny az első választásra, és hacsak kevés a megfigyelések és a csoportok száma, szinte lehetetlen ugyanazt a klasztert megszerezni.

Válassza ki a fürtök számát

A k-átlagnál egy másik nehézség a klaszterek számának megválasztása. A stabilitás javításához beállíthat egy nagy értéket, azaz nagyszámú csoportot, de előfordulhat, hogy az adatok túlterheltek lesznek . A túlterhelés azt jelenti, hogy a modell teljesítménye jelentősen csökken az új érkező adatok esetében. A gép megtanulta az adatkészlet apró részleteit, és küzd az általános minta általánosításáért.

A klaszterek száma függ az adatkészlet jellegétől, az iparágtól, az üzleti vállalkozásoktól és így tovább. Van azonban egy ökölszabály, amely kiválasztja a megfelelő fürtök számát:

megegyezik az adatkészlet megfigyelésének számával.

Általánosságban elmondható, hogy érdekes időt szánni arra, hogy a legjobb értéket keresse, hogy megfeleljen az üzleti igényeknek.

A klaszterelemzés elvégzéséhez felhasználjuk a Személyi számítógépek árai adatkészletet. Ez az adatkészlet 6259 megfigyelést és 10 jellemzőt tartalmaz. Az adatkészlet 486 személyi számítógép árát figyeli 1993 és 1995 között az Egyesült Államokban. A változók többek között az ár, a sebesség, a ram, a képernyő, a cd.

Az alábbiak szerint jár el:

  • Adatok importálása
  • Képezze ki a modellt
  • Értékelje a modellt

Adatok importálása

A K jelentése nem alkalmas faktorváltozókra, mert a távolságon alapul, és a diszkrét értékek nem adnak vissza értelmes értékeket. Adatkészletünkből törölheti a három kategorikus változót. Ezenkívül ebben az adatkészletben nincsenek hiányzó értékek.

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

Az összefoglaló statisztikákból láthatja, hogy az adatok nagy értékekkel bírnak. A k átlag és távolság kiszámításával bevált gyakorlat az adatok átméretezése úgy, hogy az átlag egyenlő legyen, a szórás pedig nulla.

summary(df)

Kimenet:

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

Átméretezi a változókat a dplyr könyvtár scale () függvényével. Az átalakítás csökkenti a kiugró értékek hatását, és lehetővé teszi az egyetlen megfigyelés összehasonlítását az átlaggal. Ha egy standardizált érték (vagy z-pontszám ) magas, biztos lehet benne, hogy ez a megfigyelés valóban meghaladja az átlagot (egy nagy z-pontszám azt jelenti, hogy ez a pont a szórás szempontjából messze van az átlagtól. A két pontszám azt jelzi, hogy az érték 2 szórástól eltér az átlagtól. Megjegyezzük, hogy a z-pont Gauss-eloszlást követ és szimmetrikus az átlag körül.

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

Az R bázisnak van egy funkciója a k átlag algoritmus futtatására. A k átlag alapvető funkciója:

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

Képezze ki a modellt

A 3. ábrán részletesen bemutatja az algoritmus működését. Az egyes lépéseket grafikusan láthatja Yi Hui (szintén a Knit for Rmarkdown alkotója) remek csomagépítésével. A csomaganimáció nem érhető el a társasházi könyvtárban. A csomag telepítésének másik módját is használhatja az install.packages ("animáció") használatával. Ellenőrizheti, hogy a csomag telepítve van-e az Anaconda mappánkba.

install.packages("animation") 

Miután betöltötted a könyvtárat, kmeans után hozzáadod az .ani fájlt, és R megrajzolja az összes lépést. Szemléltetés céljából csak az átméretezett hd és ram változókkal futtathatja az algoritmust három klaszterrel.

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

Kód Magyarázat

  • kmeans.ani (rescale_df [2: 3], 3): Válassza ki a rescale_df adatsor 2. és 3. oszlopát, és futtassa az algoritmust k halmazával 3-ra. Rajzolja fel az animációt.

Az animációt a következőképpen értelmezheti:

  • 1. lépés: R véletlenszerűen választ három pontot
  • 2. lépés: Számítsa ki az euklideszi távolságot, és rajzolja meg a klasztereket. A bal alsó sarokban van egy zöld fürtje, jobbra egy fekete színű nagy fürt és köztük egy piros.
  • 3. lépés: Számítsa ki a centroidot, azaz a klaszterek átlagát
  • Ismételje meg, amíg egyetlen adat sem változik a fürtön

Az algoritmus hét iteráció után konvergált. Öt klaszterrel futtathatja az adatkészletünk k-mean algoritmusát, és hívhatja pc_clusternek.

pc_cluster <-kmeans(rescale_df, 5)
  • A pc_cluster lista hét érdekes elemet tartalmaz:
  • pc_cluster $ cluster: Minden megfigyelés fürtjét jelzi
  • pc_cluster $ centerek: A fürt központok
  • pc_cluster $ totss: A négyzetek teljes összege
  • pc_cluster $ withinss: A négyzet összegén belül. A visszatérő komponensek száma megegyezik a `k'-vel
  • pc_cluster $ tot.withinss: A withinss összege
  • pc_clusterbetweenss: A négyzet összege mínusz A négyzet összege
  • pc_cluster $ size: Megfigyelések száma az egyes fürtökön belül

A négyzet belüli összegének összegét (azaz a tot.withinss-et) használja a k klaszterek optimális számának kiszámításához. A k megtalálása valóban jelentős feladat.

Optimális k

A legjobb k kiválasztásának egyik technikáját könyök módszernek nevezzük . Ez a módszer a variabilitás értékeléséhez a csoporton belüli vagy a csoporton belüli heterogenitást használja. Más szavakkal, érdekli az egyes fürtök által megmagyarázott variancia százalékos aránya. Arra számíthat, hogy a változékonyság a klaszterek számával növekszik, vagy a heterogenitás csökken. Az a kihívásunk, hogy megtaláljuk azt a k értéket, amely meghaladja a csökkenő hozamot. Új fürt hozzáadása nem javítja az adatok változékonyságát, mert nagyon kevés információ marad magyarázható.

Ebben az oktatóanyagban ezt a pontot találjuk meg a heterogenitás mérésével. A fürtökön belüli összesített négyzetek összege a listában megadott tot.withinss kmean () értékkel tér vissza.

Az alábbiak szerint elkészítheti a könyökdiagramot, és megtalálja az optimális k értéket:

  • 1. lépés: Készítsen egy függvényt a fürtökön belüli összesítés kiszámításához
  • 2. lépés: Futtassa az algoritmusokat
  • 3. lépés: Hozzon létre egy adatkeretet az algoritmus eredményeivel
  • 4. lépés: ábrázolja az eredményeket

1. lépés : Készítsen egy függvényt a fürtökön belüli összesítés kiszámításához

Létrehozza azt a függvényt, amely a k-átlag algoritmust futtatja, és az összeget a fürtök négyzetösszegén belül tárolja

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

Kód Magyarázat

  • function (k): Állítsa be az argumentumok számát a függvényben
  • kmeans (rescale_df, k): Futtassa az algoritmust k-szer
  • return (cluster $ tot.withinss): Az összeget a klaszterek négyzetösszegén belül tárolja

A funkciót egyenlő 2-vel tesztelheti.

Kimenet:

## Try with 2 cluster
kmean_withinss(2)

Kimenet:

## [1] 27087.07 

2. lépés: Futtassa az algoritmust n-szer

A sapply () függvény segítségével futtathatja az algoritmust k tartományban. Ez a technika gyorsabb, mint egy hurok létrehozása és az érték tárolása.

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

Kód Magyarázat

  • max_k <-20: Állítsa a maximális számot 20-ra
  • sapply (2: max_k, kmean_withinss): Futtassa a kmean_withinss () függvényt 2: max_k, azaz 2-20 tartományban.

3. lépés: Hozzon létre egy adatkeretet az algoritmus eredményeivel

A létrehozás és a funkciónk tesztelése után futtathatja a k-átlag algoritmust 2 és 20 közötti tartományban, tárolhatja a tot.withinss értékeket.

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

Kód Magyarázat

  • data.frame (2: max_k, wss): Hozzon létre egy adatkeretet az algoritmus tároló kimenetével a wss-ben

4. lépés: Ábrázolja az eredményeket

Megrajzolja a grafikont, hogy megnézze, hol van a könyökpont

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

A grafikonból láthatja, hogy az optimális k hetes, ahol a görbe csökkenő megtérülést mutat.

Miután megkapta az optimális k-t, újra futtatja az algoritmust k-val 7-el, és kiértékeli a klasztereket.

A klaszter vizsgálata

pc_cluster_2 <-kmeans(rescale_df, 7)

Amint azt korábban említettük, a kmean () segítségével visszaadott listában lévő további érdekes információkat elérheti.

pc_cluster_2$clusterpc_cluster_2$centerspc_cluster_2$size 

Az értékelési rész szubjektív és az algoritmus használatára támaszkodik. Célunk, hogy hasonló funkciókkal rendelkező számítógépeket gyűjtsünk össze. Egy számítógépes fickó kézzel végezheti a munkát, és szakértelme alapján csoportosíthatja a számítógépet. A folyamat azonban sok időt vesz igénybe, és hibára hajlamos lesz. A K-átlag algoritmus klaszterek javaslatával előkészítheti számára a terepet.

Előzetes értékelésként megvizsgálhatja a klaszterek méretét.

pc_cluster_2$size

Kimenet:

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

Az első klaszter 608 megfigyelésből áll, míg a legkisebb klaszter, a 4. számú, csak 580 számítógépet tartalmaz. Jó lehet a klaszterek közötti homogenitás, ha nem, akkor vékonyabb adatok előkészítésére lehet szükség.

Mélyebben megismerheti az adatokat a központi komponenssel. A sorok a fürt számozására, az oszlopok pedig az algoritmus által használt változókra utalnak. Az értékek az egyes fürtök átlagos pontszámai az érdekelt oszlopban. A szabványosítás megkönnyíti az értelmezést. A pozitív értékek azt jelzik, hogy egy adott klaszter z-pontszáma meghaladja a teljes átlagot. Például a 2. klaszter rendelkezik a legmagasabb árátlaggal az összes klaszter közül.

center <-pc_cluster_2$centerscenter

Kimenet:

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

A ggplot segítségével létrehozhat egy hőtérképet, amely segít kiemelni a kategóriák közötti különbséget.

A ggplot alapértelmezett színeit meg kell változtatni az RColorBrewer könyvtárral. A terminálon történő indításhoz használhatja a conda könyvtárat és a kódot:

conda install -cr r-rcolorbrewer

Hőtérkép létrehozásához három lépésben kell eljárnia:

  • Hozzon létre egy adatkeretet a központ értékeivel, és hozzon létre egy változót a fürt számával
  • Átalakítsa az adatokat a tidyr könyvtár collect () függvényével. Az adatokat szélesről hosszúra szeretné átalakítani.
  • Készítse el a színpalettát a colorRampPalette () függvénnyel

1. lépés: Hozzon létre egy adatkeretet

Hozzuk létre az átformálandó adatkészletet

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)

Kimenet:

## 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. lépés: Átalakítsa az adatokat

Az alábbi kód létrehozza a színpalettát, amelyet a hőtérkép ábrázolásához használ.

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

3. lépés: Vizualizálás

Ábrázolhatja a grafikont, és láthatja, hogy néznek ki a fürtök.

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

Összegzés

Az alábbi táblázatban összefoglalhatjuk a k-átlag algoritmust

Csomag

Célkitűzés

funkció

érv

bázis

Vonat k-átlag

kmeans ()

df, k

Hozzáférési fürt

kmeans () $ klaszter

Klaszterközpontok

kmeans () $ központok

Méretcsoport

kmeans () $ méret