Найдите количество кластеров, используя функцию clusGAP в R

#r #cluster-analysis #hierarchical-clustering

#r #кластерный анализ #иерархическая кластеризация

Вопрос:

Не могли бы вы помочь мне найти идеальное количество кластеров с помощью clusGap функции? В этой ссылке есть аналогичный пример: https://www.rdocumentation.org/packages/factoextra/versions/1.0.7/topics/fviz_nbclust

Но я хотел бы сделать это для моего случая. Мой код приведен ниже:

 library(cluster)

df <- structure(
list(Propertie = c(1,2,3,4,5,6,7,8), Latitude = c(-24.779225, -24.789635, -24.763461, -24.794394, -24.747102,-24.781307,-24.761081,-24.761084),
Longitude = c(-49.934816, -49.922324, -49.911616, -49.906262, -49.890796,-49.8875254,-49.8875254,-49.922244),
waste = c(526, 350, 526, 469, 285, 433, 456,825)),class = "data.frame", row.names = c(NA, -8L))

df<-scale(df)

hcluster = clusGap(df, FUN = hcut, K.max = 100, B = 50)
Clustering k = 1,2,..., K.max (= 100): .. Error in sil.obj[, 1:3] : incorrect number of dimensions
 

Ответ №1:

Проблема здесь в том, что вы указали K.max значение 100, однако в вашем наборе данных всего восемь наблюдений. Как указано в clusGap документации, K.max
максимальное количество кластеров для рассмотрения, следовательно, в вашем случае K.max не может быть больше семи.

Мне неясно, подходит ли кластеризация для набора данных такого небольшого размера. Тем не менее, пожалуйста, смотрите Ниже рабочую реализацию. Я изменил plot_clusgap функцию из пакета R / Bioconductor phyloseq для визуализации результатов.

 library(data.table)
library(cluster)
library(factoextra) # for hcut function

df <- data.table(properties = c(1,2,3,4,5,6,7,8),
                latitude = c(-24.779225, -24.789635, -24.763461, -24.794394, -24.747102,-24.781307,-24.761081,-24.761084),
                longitude = c(-49.934816, -49.922324, -49.911616, -49.906262, -49.890796,-49.8875254,-49.8875254,-49.922244),
                waste = c(526, 350, 526, 469, 285, 433, 456,825))

df <- scale(df)

# perform clustering, B = 500 is recommended
hcluster = clusGap(df, FUN = hcut, K.max = 7, B = 500)

# extract results
dat <- data.table(hcluster$Tab)
dat[, k := .I]

# visualize gap statistic
p <- ggplot(dat, aes(k, gap))   geom_line()   geom_point(size = 3)  
  geom_errorbar(aes(ymax = gap   SE.sim, ymin = gap - SE.sim), width = 0.25)  
  ggtitle("Clustering Results")  
  labs(x = "Number of Clusters", y = "Gap Statistic")  
  theme(plot.title = element_text(size = 16, hjust = 0.5, face = "bold"),
        axis.title = element_text(size = 12, face = "bold"))
 

Вот результирующая цифра:

Результаты кластеризации, созданные приведенным выше сценарием.

Я должен отметить, что все значения статистики разрыва отрицательны. Это указывает на то, что оптимальное количество кластеров равно k = 1 (т. Е. Без кластеризации).