Выберите минимальное количество соседей в Kmeans - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь выбрать лучший алгоритм для «кластеризации» в моих данных, у меня проблема в том, что, если я выбираю случайное число K, очевидно, что у каждого кластера есть n-наблюдений. Моя проблема: возможно определить минимальное количество наблюдений в каждом кластере? например, в кластере № 5 у меня есть только 1 наблюдение, могу ли яопределить минимальное количество из 5 наблюдений для каждого кластера?Теперь это мой код.

base <- readxl::read_xlsx("C:/Users/Data.xlsx","Sheet1")

base_cl <- select(base, 
                  Id = ID, 
                  companyId = companyId, 
                  Revenue = Selected_Revenue, 
                  EBITDA = Selected_EBITDA,
                  Liabilities = Selected_Liabilities,
                  Employees = Selected_Employees,
                  W_Ind = "W Industry", 
                  Cap_Ind = "CAPIndustry",
                  Debt_Assets = "Selected_D/A",
                  Debt_Equity = "Selected_D/E", 
                  Retention = Retention_AL,
                  Limit = Limit_AL,
                  Exposure = Exposure_AL,
                  LPremium = Liab_Premuim_AL,
                  lob = GL_R
)

base_cl <- base_cl %>%
  filter(lob == "1") %>%
  drop_na(Revenue)%>%
  drop_na(EBITDA)%>%
  drop_na(Limit)%>%
  drop_na(Debt_Assets)%>%
  drop_na(Debt_Equity) %>%
  drop_na(Exposure) %>%
  drop_na(LPremium) %>%
  drop_na(Employees)


base_cl_2 <- base_cl %>%
  dplyr::group_by(WTW_Ind) %>%
  dplyr::summarize(Revenue = sum(Revenue), 
                   EBITDA = sum(EBITDA),
                   Liabilities = sum(Liabilities),
                   Retention = sum(Retention),
                   Limit = sum(Limit),
                   D_A = sum(Debt_Assets), 
                   D_E = sum(Debt_Equity),
                   Exposure = sum(Exposure),
                   LPremium = sum(LPremium),
                   Employees = sum(Employees))%>%
  drop_na(WTW_Ind)

base_cl_2$Retention[is.na(base_cl_2$Retention)] <- 0
value <- base_cl_2$WTW_Ind
base_cl_2 <- select(base_cl_2, -WTW_Ind)
rownames(base_cl_2) <- value


my_data <- base_cl_2
head(my_data, n = 4)


res.dist <- get_dist(my_data, stand = TRUE, method = "pearson")

fviz_dist(res.dist, show_labels = TRUE, 
          gradient = list(low = "#00AFBB", mid = "white", high = "#FC4E07"))


fviz_nbclust(my_data, kmeans, method = "gap_stat") # silhouette,gap_stat

set.seed(123)

km.res <- kmeans(my_data,5, nstart = 25)
# Visualize
fviz_cluster(km.res, data = my_data,
             ellipse.type = "convex",
             palette = "jco",
             ggtheme = theme_minimal())


# Compute PAM
pam.res <- pam(my_data, 5) ## More than 4 are innecesary
# Visualize
fviz_cluster(pam.res)

test <- pam(base_cl_2, 7)
str(si <- silhouette(test))
(ssi <- summary(si))
plot(si) # silhouette plot
...