К-значи груписање у Р са примером

Преглед садржаја:

Anonim

У овом упутству ћете научити

  • Шта је кластер анализа?
  • К-значи алгоритам
  • Оптимално к

Шта је кластер анализа?

Кластер анализа је део учења без надзора . Кластер је група података која дели сличне карактеристике. Можемо рећи да је кластер анализа више о откривању него о предвиђању. Машина тражи сличност података. На пример, анализу кластера можете користити за следећу апликацију:

  • Сегментација купаца: Тражи сличност између група купаца
  • Груписање на берзи: Групне акције на основу перформанси
  • Смањите димензионалност скупа података груписањем запажања са сличним вредностима

Анализа кластера није превише тешка за спровођење и значајна је као и корисна за пословање.

Најупечатљивија разлика између учења под надзором и без надзора лежи у резултатима. Учење без надзора ствара нову променљиву, ознаку, док учење под надзором предвиђа исход. Машина помаже практичару у потрази за означавањем података на основу блиске повезаности. На аналитичару је да искористи групе и да им име.

Направимо пример за разумевање концепта кластерисања. Ради једноставности радимо у две димензије. Имате податке о укупној потрошњи купаца и њиховој старости. Да би побољшао оглашавање, маркетиншки тим жели да шаље циљаније е-поруке својим купцима.

На следећем графикону приказујете укупну потрошњу и старост купаца.

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

У овом тренутку је видљив образац

  1. У доњем левом углу можете видети младе људе са нижом куповном моћи
  2. Горња средина одражава људе који имају посао за који могу приуштити да троши више
  3. Коначно, старији људи са нижим буџетом.

На горњој слици ручно групишете запажања и дефинишете сваку од три групе. Овај пример је донекле директан и изузетно визуелан. Ако су скупу података додата нова запажања, можете их означити у круговима. Круг дефинишете на основу наше просудбе. Уместо тога, можете да користите машинско учење за објективно груписање података.

У овом упутству ћете научити како се користи алгоритам к-значи .

К-значи алгоритам

К-средина је, без сумње, најпопуларнија метода груписања. Истраживачи су алгоритам објавили пре више деценија, а на к-средствима је учињено пуно побољшања.

Алгоритам покушава да пронађе групе минимализујући удаљеност између посматрања, која се називају локалним оптималним решењима. Растојања се мере на основу координата посматрања. На пример, у дводимензионалном простору координате су једноставне и.

Алгоритам ради на следећи начин:

  • Корак 1: Насумично одаберите групе у плану карактеристика
  • Корак 2: Смањите растојање између центра кластера и различитих посматрања ( центроид ). Резултат су групе са запажањима
  • Корак 3: Пребаците почетни центроид на средину координата унутар групе.
  • Корак 4: Смањите растојање према новим центроидима. Стварају се нове границе. Дакле, посматрања ће се премештати из једне групе у другу
  • Понављајте док ниједно посматрање не промени групе

К-значи обично узима еуклидску удаљеност између обележја и обележја:

Доступне су различите мере као што су раздаљина Манхаттан или Минловски дистанце. Имајте на уму да К-средина враћа различите групе сваки пут када покренете алгоритам. Подсетимо се да су прва почетна нагађања насумична и израчунавају растојања док алгоритам не постигне хомогеност унутар група. Односно, к-средина је веома осетљива на први избор, и уколико број опажања и група није мали, готово је немогуће добити исто груписање.

Изаберите број кластера

Још једна потешкоћа која се налази код к-средње вредности је избор броја кластера. Можете да поставите високу вредност, тј. Велики број група, да бисте побољшали стабилност, али можда ћете добити прекомерну количину података. Прекомерно опремање значи да се перформансе модела знатно смањују за нове податке који долазе. Машина је научила мале детаље скупа података и бори се да генералише укупни образац.

Број кластера зависи од природе скупа података, индустрије, пословања и тако даље. Међутим, постоји правило за одабир одговарајућег броја кластера:

са једнаким броју посматрања у скупу података.

Уопштено говорећи, занимљиво је провести време тражећи најбољу вредност која одговара пословним потребама.

За обављање наше анализе кластера користићемо скуп података „Цена личних рачунара“. Овај скуп података садржи 6259 посматрања и 10 карактеристика. Скуп података прати цену од 1993. до 1995. године 486 личних рачунара у САД-у. Променљиве су између осталог цена, брзина, рам, екран и цд.

Наставићете како следи:

  • Увези податке
  • Обучи модел
  • Процените модел

Увези податке

К средство није погодно за променљиве фактора јер се заснива на удаљености, а дискретне вредности не дају значајне вредности. Можете избрисати три категоричке променљиве у нашем скупу података. Поред тога, у овом скупу података не недостају вредности.

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)
Оутпут
## 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… 

Из резимеа статистике можете видети да подаци имају велике вредности. Добра пракса са израчунавањем к средње вредности и удаљености је скалирање података тако да је средња вредност једнака јединици, а стандардна девијација једнака нули.

summary(df)

Излаз:

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

Промените скале променљивим помоћу функције сцале () библиотеке дплир. Трансформација смањује утицај одступања и омогућава упоређивање појединачног запажања са средњом вредношћу. Ако је стандардизована вредност (или з-оцена ) висока, можете бити сигурни да је ово запажање заиста изнад средње вредности (велика з-оцена подразумева да је ова тачка далеко од средње вредности у смислу стандардне девијације. А з- резултат два означава да је вредност 2 стандардне девијације од средње вредности. Напомена, з-оцена следи Гауссову расподелу и симетрична је око средње вредности.

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

Р база има функцију за покретање к средњег алгоритма. Основна функција к средње вредности је:

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

Обучи модел

На слици три сте детаљно објаснили како алгоритам функционише. Сваки корак можете графички видети са сјајним пакетом који је направио Ии Хуи (такође творац Книт фор Рмаркдовн). Анимација пакета није доступна у библиотеци цонда. Можете користити други начин за инсталирање пакета помоћу инсталл.пацкагес („анимација“). Можете да проверите да ли је пакет инсталиран у нашој фасцикли Анацонда.

install.packages("animation") 

Након што учитате библиотеку, додате .ани након кмеанс и Р ће исцртати све кораке. У сврху илустрације, алгоритам покрећете само са промењеним скалама променљивих хд и рам са три кластера.

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

Објашњење кода

  • кмеанс.ани (ресцале_дф [2: 3], 3): Изаберите колоне 2 и 3 скупа података ресцале_дф и покрените алгоритам са к скупова на 3. Нацртајте анимацију.

Анимацију можете протумачити на следећи начин:

  • Корак 1: Р насумично бира три поена
  • Корак 2: Израчунај еуклидску удаљеност и нацртај скупове. Имате једну групу у зеленој боји доле лево, једну велику групу обојену у црно десно и црвену између њих.
  • Корак 3: Израчунајте центроид, тј. Средину кластера
  • Понављајте све док подаци не промене кластер

Алгоритам се конвергирао након седам итерација. Можете покренути к-меан алгоритам у нашем скупу података са пет кластера и назвати га пц_цлустер.

pc_cluster <-kmeans(rescale_df, 5)
  • Листа пц_цлустер садржи седам занимљивих елемената:
  • пц_цлустер $ цлустер: Означава кластер сваког посматрања
  • пц_цлустер $ центри: Кластер центри
  • пц_цлустер $ тотсс: Укупна сума квадрата
  • пц_цлустер $ Витхинсс: Унутар збира квадрата. Број компонената које се враћају једнак је `к`
  • пц_цлустер $ тот.витхинсс: Збир унутрашњости
  • пц_цлустербетвеенсс: Укупан зброј квадрата минус Унутар зброја квадрата
  • пц_цлустер $ сизе: Број посматрања унутар сваког кластера

Користићете збир зброја унутар квадрата (тј. Тот.витхинсс) за израчунавање оптималног броја кластера к. Проналажење к је заиста важан задатак.

Оптимално к

Једна техника за избор најбољег к назива се метода лакта . Ова метода користи хомогеност унутар групе или хетерогеност унутар групе за процену варијабилности. Другим речима, занима вас проценат варијансе који објашњава сваки кластер. Можете очекивати да ће се варијабилност повећавати са бројем гроздова, алтернативно, хетерогеност се смањује. Наш изазов је пронаћи к који је изван опадајућег приноса. Додавање новог кластера не побољшава варијабилност података јер је остало врло мало података за објашњење.

У овом упутству проналазимо ову тачку користећи меру хетерогености. Укупни збир квадрата у кластерима је укупни износ у повратку листе кмеан ().

Можете конструисати графикон лакта и пронаћи оптимални к на следећи начин:

  • Корак 1: Конструисати функцију за израчунавање укупног збира квадрата у оквиру кластера
  • Корак 2: Покрените алгоритам пута
  • Корак 3: Креирајте оквир података са резултатима алгоритма
  • Корак 4: Зацртајте резултате

Корак 1) Конструисати функцију за израчунавање укупног збира квадрата у оквиру кластера

Створите функцију која покреће к-средњи алгоритам и ускладиштите укупан збир у кластерима збир квадрата

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

Објашњење кода

  • функција (к): Подесите број аргумената у функцији
  • кмеанс (ресцале_дф, к): Покрените алгоритам к пута
  • ретурн (кластер $ тот.витхинсс): Спремите укупан збир квадрата у кластерима

Можете тестирати функцију са једнаким 2.

Излаз:

## Try with 2 cluster
kmean_withinss(2)

Излаз:

## [1] 27087.07 

Корак 2) Покрените алгоритам н пута

Користићете функцију саппли () за покретање алгоритма у опсегу од к. Ова техника је бржа од стварања петље и чувања вредности.

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

Објашњење кода

  • мак_к <-20: Подесите максималан број на 20
  • саппли (2: мак_к, кмеан_витхинсс): Покрените функцију кмеан_витхинсс () у опсегу 2: мак_к, тј. 2 до 20.

Корак 3) Направите оквир података са резултатима алгоритма

Након креирања и тестирања наше функције, можете покренути к-меан алгоритам у опсегу од 2 до 20, сачувати вредности тот.витхинсс.

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

Објашњење кода

  • дата.фраме (2: мак_к, всс): Направите оквир података са излазом складишта алгоритма у всс-у

Корак 4) Зацртајте резултате

Нацртате графикон како бисте визуелизовали где је тачка лакта

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

Из графикона можете видети да је оптимално к седам, где крива почиње да има све мањи повраћај.

Једном када добијете наш оптимални к, поново покрећете алгоритам са к једнако 7 и процењујете кластере.

Испитивање кластера

pc_cluster_2 <-kmeans(rescale_df, 7)

Као што је већ поменуто, преосталим занимљивим информацијама можете приступити на листи коју је вратио кмеан ().

pc_cluster_2$clusterpc_cluster_2$centerspc_cluster_2$size 

Евалуациони део је субјективан и ослања се на употребу алгоритма. Наш циљ овде је да окупимо рачунар са сличним карактеристикама. Тип рачунара може посао обављати ручно и груписати рачунар на основу своје стручности. Међутим, процес ће потрајати пуно времена и подложан је грешкама. К-средњи алгоритам може да припреми поље за њега / њу предлажући кластере.

Као претходну процену, можете испитати величину кластера.

pc_cluster_2$size

Излаз:

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

Први кластер се састоји од 608 посматрања, док најмањи кластер, број 4, има само 580 рачунара. Било би добро да постоји хомогеност између кластера, ако не, можда ће бити потребна тања припрема података.

Подаци се дубље сагледавају помоћу средишње компоненте. Редови се односе на нумерацију кластера, а колоне променљиве које алгоритам користи. Вредности су просечна оцена сваког кластера за заинтересовану колону. Стандардизација олакшава тумачење. Позитивне вредности показују да је з-оцена за дати кластер изнад укупне средње вредности. На пример, кластер 2 има највиши просек цена међу свим кластерима.

center <-pc_cluster_2$centerscenter

Излаз:

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

Можете направити гријану мапу помоћу ггплот-а да нам помогне да истакнемо разлику између категорија.

Подразумеване боје ггплота потребно је променити помоћу библиотеке РЦолорБревер. Можете користити библиотеку цонда и код за покретање у терминалу:

цонда инсталл -цр р-рцолорбревер

Да бисте креирали мапу топлоте, настављате у три корака:

  • Направите оквир података са вредностима центра и креирајте променљиву са бројем кластера
  • Преобликујте податке функцијом цоллецт () библиотеке тидир. Желите да трансформишете податке из широког у дугачки.
  • Креирајте палету боја помоћу функције цолорРампПалетте ()

Корак 1) Изградите оквир података

Направимо преобликовани скуп података

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)

Излаз:

## 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) Преобликујте податке

Доњи код креира палету боја које ћете користити за цртање мапе топлоте.

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

Корак 3) Визуелизујте

Можете нацртати графикон и видети како изгледају кластери.

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

Резиме

К-средњи алгоритам можемо сумирати у доњој табели

Пакет

објективан

функцију

расправа

база

Воз к-меан

кмеанс ()

дф, к

Приступни кластер

кмеанс () $ кластер

Кластер центри

кмеанс () $ центри

Кластер величина

кмеанс () $ величина