Кластеризация и построение множественных Kmeans с использованием facetwrap - PullRequest
0 голосов
/ 30 января 2020

Я хотел бы спросить, как автоматизировать несколько кластеров K-средних для одного и того же набора данных - я хочу создать несколько кластеров kmean, когда число кластеров будет меняться, а затем отобразить результат, используя facet_wrap

Так что один могу подсказать, какое количество кластеров кажется наиболее подходящим.

Я могу сделать это, если код очень от руки - можно ли его как-то автоматизировать:


library(tidyverse)
Y <- mtcars %>% select(hp, disp)

kme1 <- kmeans(Y, 3)
kme2 <- kmeans(Y, 4)
kme3 <- kmeans(Y, 5)
kme4 <- kmeans(Y, 6)

A <- broom::augment(kme1, Y) %>% 
  mutate(num_clust = 3)
B <- broom::augment(kme2, Y) %>% 
  mutate(num_clust = 4)
C <- broom::augment(kme3, Y) %>% 
  mutate(num_clust = 5)
D <- broom::augment(kme4, Y) %>% 
  mutate(num_clust = 6)

rbind(A, B, C, D) %>% 
  ggplot(aes(hp, disp)) + 
  geom_point(aes(color = .cluster)) + 
  stat_ellipse(aes(x=hp,y=disp,fill=factor(.cluster)),
               geom="polygon", level=0.95, alpha=0.2) + 
  facet_wrap(~num_clust)

1 Ответ

2 голосов
/ 30 января 2020

Вы можете использовать purrr::map и варианты:

library(tidyverse)
Y <- mtcars %>% select(hp, disp)

map(set_names(3:6), ~kmeans(Y, .x)) %>% 
  map(broom::augment, Y) %>% 
  imap(~mutate(.x, num_clust = .y)) %>% 
  bind_rows() %>% 
  ggplot(aes(hp, disp)) + 
  geom_point(aes(color = .cluster)) + 
  stat_ellipse(aes(x=hp,y=disp,fill=factor(.cluster)),
               geom="polygon", level=0.95, alpha=0.2) + 
  facet_wrap(~num_clust)
...