V tomto návode sa naučíte
- Čo je to klastrová analýza?
- Algoritmus K-znamená
- Optimálna k
Čo je to klastrová analýza?
Klastrová analýza je súčasťou učenia bez dozoru . Klaster je skupina údajov, ktoré zdieľajú podobné funkcie. Môžeme povedať, že klastrová analýza je viac o objavení ako o predikcii. Zariadenie vyhľadá podobnosť v dátach. Klastrovú analýzu môžete napríklad použiť pre nasledujúcu aplikáciu:
- Segmentácia zákazníkov: hľadá podobnosť medzi skupinami zákazníkov
- Klastrovanie na trhoch s akciami: Skupinové akcie na základe výkonnosti
- Znížte rozmerovosť súboru údajov zoskupením pozorovaní s podobnými hodnotami
Klastrová analýza nie je príliš náročná na implementáciu a je pre podniky zmysluplná a zároveň realizovateľná.
Najvýraznejší rozdiel medzi učením pod dohľadom a nekontrolovaným učením spočíva vo výsledkoch. Štúdium bez dozoru vytvára novú premennú, označenie, zatiaľ čo učenie pod dohľadom predpovedá výsledok. Stroj pomáha odborníkovi pri hľadaní údajov označovať na základe blízkej príbuznosti. Je na analytikovi, aby skupiny využil a pomenoval ich.
Urobme si príklad na pochopenie konceptu klastrovania. Pre jednoduchosť pracujeme v dvoch dimenziách. Máte údaje o celkových výdavkoch zákazníkov a ich veku. Za účelom zlepšenia reklamy chce marketingový tím posielať zákazníkom adresnejšie e-maily.
V nasledujúcom grafe zobrazujete celkové výdavky a vek zákazníkov.
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()
V tomto bode je viditeľný vzor
- Vľavo dole môžete vidieť mladých ľudí s nižšou kúpnou silou
- Horná stredná časť odráža ľudí s prácou, ktorú si môžu dovoliť minúť viac
- Na záver starší ľudia s nižším rozpočtom.
Na vyššie uvedenom obrázku zoskupujete pozorovania ručne a definujete každú z troch skupín. Tento príklad je trochu priamy a vysoko vizuálny. Ak sú k množine údajov pripojené nové pozorovania, môžete ich označiť v kruhoch. Kruh definujete na základe nášho úsudku. Namiesto toho môžete pomocou Machine Learning objektívne zoskupiť údaje.
V tomto výučbe sa dozviete, ako používať algoritmus k-means .
Algoritmus K-znamená
K-mean je bezpochyby najpopulárnejšia klastrová metóda. Vedci tento algoritmus vydali pred desiatkami rokov a v k-means sa urobilo veľa vylepšení.
Algoritmus sa snaží nájsť skupiny minimalizovaním vzdialenosti medzi pozorovaniami, ktoré sa nazývajú lokálne optimálne riešenia. Vzdialenosti sa merajú na základe súradníc pozorovaní. Napríklad v dvojrozmernom priestore sú súradnice jednoduché a.
Algoritmus funguje nasledovne:
- Krok 1: Vyberte skupiny v pláne funkcií náhodne
- Krok 2: Minimalizujte vzdialenosť medzi stredom klastra a rôznymi pozorovaniami ( centroid ). Výsledkom sú skupiny s pozorovaniami
- Krok 3: Posuňte počiatočné ťažisko na priemer súradníc v skupine.
- Krok 4: Minimalizujte vzdialenosť podľa nových centroidov. Vytvárajú sa nové hranice. Pozorovania sa teda budú pohybovať z jednej skupiny do druhej
- Opakujte, kým žiadne pozorovanie nezmení skupiny
K-means zvyčajne berie euklidovskú vzdialenosť medzi objektom a objektom:
K dispozícii sú rôzne opatrenia, ako napríklad vzdialenosť na Manhattane alebo Minlowski. Pamätajte, že K-mean vráti rôzne skupiny pri každom spustení algoritmu. Pripomeňme, že prvé počiatočné odhady sú náhodné a vypočítajte vzdialenosti, kým algoritmus nedosiahne v skupinách homogenitu. To znamená, že k-mean je veľmi citlivý na prvú voľbu, a pokiaľ nie je počet pozorovaní a skupín malý, je takmer nemožné dosiahnuť rovnaké zoskupenie.
Vyberte počet klastrov
Ďalšou ťažkosťou, ktorá sa zistila pri k-mean, je výber počtu zhlukov. Môžete nastaviť vysokú hodnotu, tj veľký počet skupín, aby ste zlepšili stabilitu, ale mohli by ste skončiť preplnením údajov. Preplnenie znamená, že výkon modelu sa pri nových údajoch podstatne zníži. Stroj sa naučil malé detaily súboru údajov a snažil sa zovšeobecniť celkový vzorec.
Počet klastrov závisí od povahy súboru údajov, odvetvia, podnikania a podobne. Existuje však pravidlo pre výber vhodného počtu klastrov:
s rovná počtu pozorovaní v súbore údajov.
Všeobecne možno povedať, že je zaujímavé tráviť čas hľadaním najlepšej hodnoty zodpovedajúcej obchodným potrebám.
Na vykonanie našej klastrovej analýzy použijeme dataset Ceny osobných počítačov. Tento súbor údajov obsahuje 6 259 pozorovaní a 10 funkcií. Tento súbor údajov sleduje cenu 486 osobných počítačov v USA v rokoch 1993 až 1995. Premenné sú okrem iného cena, rýchlosť, ram, obrazovka, cd.
Budete postupovať nasledovne:
- Import údajov
- Trénujte model
- Vyhodnoťte model
Import údajov
K means nie je vhodný pre faktorové premenné, pretože je založený na vzdialenosti a diskrétne hodnoty nevracajú zmysluplné hodnoty. V našom súbore údajov môžete vymazať tri kategorické premenné. Okrem toho v tejto množine údajov nechýbajú žiadne hodnoty.
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ýkon
## 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…
Zo súhrnných štatistík môžete vidieť, že údaje majú veľké hodnoty. Osvedčeným postupom pri výpočte priemeru a vzdialenosti k je zmena mierky údajov tak, aby sa priemer rovnal jednej a štandardná odchýlka sa rovnala nule.
summary(df)
Výkon:
## 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
Premenné zmeníte škály pomocou funkcie scale () knižnice dplyr. Transformácia znižuje vplyv odľahlých hodnôt a umožňuje porovnať jediné pozorovanie so strednou hodnotou. Ak je štandardizovaná hodnota (alebo z-skóre ) vysoká, môžete si byť istí, že toto pozorovanie je skutočne nad priemerom (veľké z-skóre znamená, že tento bod je ďaleko od priemeru, pokiaľ ide o štandardnú odchýlku. skóre dvoch znamená, že hodnota je od štandardnej odchýlky vzdialená 2. Všimnite si, že z-skóre sleduje Gaussovo rozdelenie a je symetrické okolo priemeru.
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))
Základňa R má funkciu na spustenie algoritmu k mean. Základná funkcia k priemeru je:
kmeans(df, k)arguments:-df: dataset used to run the algorithm-k: Number of clusters
Trénujte model
Na obrázku tri ste podrobne opísali, ako algoritmus funguje. Každý krok môžete vidieť graficky pomocou skvelého balíka od Yi Hui (tiež tvorcu Knit for Rmarkdown). Animácia balíka nie je k dispozícii v knižnici conda. Môžete použiť iný spôsob inštalácie balíka pomocou install.packages ("animácia"). Môžete skontrolovať, či je balík nainštalovaný v našom priečinku Anaconda.
install.packages("animation")
Po načítaní knižnice pridáte .ani po kmeans a R vykreslí všetky kroky. Pre ilustráciu spustíte algoritmus iba s premenovanými premennými hd a ram s tromi klastrami.
set.seed(2345)library(animation)kmeans.ani(rescale_df[2:3], 3)
Vysvetlenie kódu
- kmeans.ani (rescale_df [2: 3], 3): Vyberte stĺpce 2 a 3 množiny údajov rescale_df a spustite algoritmus s množinami k na 3. Vykreslite animáciu.
Animáciu môžete interpretovať nasledovne:
- Krok 1: R náhodne vyberie tri body
- Krok 2: Vypočítajte euklidovskú vzdialenosť a nakreslite zhluky. Vľavo dole máte jeden zhluk zelenej farby, vpravo jeden veľký zhluk zafarbený čiernou farbou a medzi nimi červený.
- Krok 3: Vypočítajte ťažisko, tj strednú hodnotu klastrov
- Opakujte, kým sa nezmenia žiadne údaje
Algoritmus sa konvergoval po siedmich iteráciách. Môžete spustiť algoritmus k-mean v našom súbore údajov s piatimi klastrami a nazvať ho pc_cluster.
pc_cluster <-kmeans(rescale_df, 5)
- Zoznam pc_cluster obsahuje sedem zaujímavých prvkov:
- pc_cluster $ cluster: Označuje zoskupenie každého pozorovania
- pc_cluster $ centrá: Centrá klastrov
- pc_cluster $ totss: Celkový súčet štvorcov
- pc_cluster $ withinss: V rámci súčtu štvorcov. Počet návratov komponentov sa rovná `k`
- pc_cluster $ tot.withinss: Súčet v rámci
- pc_clusterbetweenss: Celkový súčet štvorcov mínus v rámci súčtu štvorcov
- pc_cluster $ size: Počet pozorovaní v rámci každého klastra
Súčet vnútorného súčtu štvorca (tj. Totálne do výšky) použijete na výpočet optimálneho počtu klastrov k. Nájsť k je skutočne podstatná úloha.
Optimálna k
Jedna technika na výber najlepšieho sa nazýva lakťová metóda . Táto metóda používa na vyhodnotenie variability vnútroskupinovú homogenitu alebo vnútroskupinovú heterogenitu. Inými slovami, zaujíma vás percento rozptylu vysvetlené každým klastrom. Môžete očakávať, že variabilita sa bude zvyšovať s počtom klastrov, alternatívne sa zníži heterogenita. Našou výzvou je nájsť hodnotu k, ktorá presahuje klesajúce výnosy. Pridanie nového klastra nezlepšuje variabilitu údajov, pretože na vysvetlenie zostáva veľmi málo informácií.
V tomto tutoriáli nájdeme tento bod pomocou miery heterogenity. Celkový súčet druhých mocnín v klastroch je tot. S návratom do zoznamu podľa kmean ().
Môžete zostaviť lakťový graf a nájsť optimálne k nasledovne:
- Krok 1: Zostrojte funkciu na výpočet súčtu druhých mocnín v klastroch
- Krok 2: Spustite časy algoritmu
- Krok 3: Vytvorte dátový rámec s výsledkami algoritmu
- Krok 4: Zostrojte výsledky
Krok 1) Zostrojte funkciu na výpočet súčtu druhých mocnín v klastroch
Vytvoríte funkciu, ktorá spustí algoritmus k-mean, a celkový počet v klastroch uložíte do štvorcov
kmean_withinss <- function(k) {cluster <- kmeans(rescale_df, k)return (cluster$tot.withinss)}
Vysvetlenie kódu
- function (k): Nastaví počet argumentov vo funkcii
- kmeans (rescale_df, k): Spustite algoritmus k krát
- návrat (klaster $ tot.withinss): Uložiť celkový súčet v klastroch súčet štvorcov
Funkciu môžete otestovať s rovnosťou 2.
Výkon:
## Try with 2 cluster
kmean_withinss(2)
Výkon:
## [1] 27087.07
Krok 2) Spustite algoritmus n-krát
Funkciu sapply () použijete na spustenie algoritmu v rozsahu k. Táto technika je rýchlejšia ako vytvorenie slučky a uloženie hodnoty.
# Set maximum clustermax_k <-20# Run algorithm over a range of kwss <- sapply(2:max_k, kmean_withinss)
Vysvetlenie kódu
- max_k <-20: nastavte maximálny počet na 20
- sapply (2: max_k, kmean_withinss): Spustiť funkciu kmean_withinss () v rozsahu 2: max_k, tj 2 až 20.
Krok 3) Vytvorte dátový rámec s výsledkami algoritmu
Po vytvorení a otestovaní našej funkcie môžete spustiť algoritmus k-mean v rozmedzí od 2 do 20, uložiť hodnoty tot.withinss.
# Create a data frame to plot the graphelbow <-data.frame(2:max_k, wss)
Vysvetlenie kódu
- data.frame (2: max_k, wss): Vytvorte dátový rámec s výstupom z úložiska algoritmov v wss
Krok 4) Zostrojte výsledky
Graf vykreslíte, aby ste vizualizovali, kde je bod lakťa
# 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))
Z grafu môžete vidieť, že optimálna hodnota k je sedem, kde krivka začína mať klesajúci výnos.
Keď budete mať naše optimálne k, znovu spustíte algoritmus s k rovná sa 7 a vyhodnotíte zhluky.
Skúmanie klastra
pc_cluster_2 <-kmeans(rescale_df, 7)
Ako sme už spomenuli, k zvyšným zaujímavým informáciám máte prístup v zozname vrátenom príkazom kmean ().
pc_cluster_2$clusterpc_cluster_2$centerspc_cluster_2$size
Hodnotiaca časť je subjektívna a spolieha sa na použitie algoritmu. Naším cieľom je zhromaždiť počítač s podobnými vlastnosťami. Počítačový človek môže robiť prácu ručne a skupinovo na základe svojich odborných znalostí. Tento proces však bude trvať veľa času a bude náchylný na chyby. Algoritmus K-mean mu môže pripraviť pole navrhnutím klastrov.
Ako predbežné hodnotenie môžete preskúmať veľkosť klastrov.
pc_cluster_2$size
Výkon:
## [1] 608 1596 1231 580 1003 699 542
Prvý zhluk sa skladá zo 608 pozorovaní, zatiaľ čo najmenší zhluk číslo 4 má iba 580 počítačov. Možno by bolo dobré mať medzi klastrami homogenitu, ak nie, môže sa vyžadovať redšia príprava údajov.
Získate hlbší pohľad na údaje pomocou stredovej zložky. Riadky sa týkajú číslovania klastra a stĺpcov premenných použitých algoritmom. Hodnoty sú priemerným skóre každého klastra pre stĺpec so záujmom. Štandardizácia uľahčuje interpretáciu. Pozitívne hodnoty naznačujú, že z-skóre pre daný klaster je nad celkovým priemerom. Napríklad klaster 2 má najvyšší cenový priemer zo všetkých klastrov.
center <-pc_cluster_2$centerscenter
Výkon:
## 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
Pomocou ggplot môžete vytvoriť teplotnú mapu, ktorá nám pomôže zvýrazniť rozdiel medzi kategóriami.
Predvolené farby ggplot je potrebné zmeniť pomocou knižnice RColorBrewer. Na spustenie v termináli môžete použiť knižnicu conda a kód:
conda install -cr r-rcolorbrewer
Pri vytváraní teplotnej mapy postupujte podľa troch krokov:
- Zostavte dátový rámec s hodnotami stredu a vytvorte premennú s číslom klastra
- Preformátujte údaje pomocou funkcie collect () knižnice tidyr. Chcete transformovať údaje zo širokého na dlhý.
- Vytvorte paletu farieb pomocou funkcie colorRampPalette ()
Krok 1) Vytvorte dátový rámec
Vytvorme množinu údajov o zmene tvaru
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ýkon:
## 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
Krok 2) Upravte údaje
Nasledujúci kód vytvorí paletu farieb, ktoré použijete na vykreslenie tepelnej mapy.
library(RColorBrewer)# Create the palettehm.palette <-colorRampPalette(rev(brewer.pal(10, 'RdYlGn')),space='Lab')
Krok 3) Vizualizujte
Môžete vykresliť graf a zistiť, ako vyzerajú zhluky.
# 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()
Zhrnutie
Algoritmus k-strednej hodnoty môžeme zhrnúť v nasledujúcej tabuľke
Balíček |
Cieľ |
funkcia |
argument |
---|---|---|---|
základňa |
Vlak k-stred |
kmeans () |
df, k |
Prístupový klaster |
kmeans () $ klaster | ||
Klastrové centrá |
kmeans () $ centier | ||
Veľkostný klaster |
kmeans () $ veľkosť |