R模型中K模式聚类的稳定性

时间:2018-03-19 10:15:01

标签: r cluster-analysis k-means categorical-data

我必须在分类数据中创建聚类。我使用以下k模式代码来制作聚类,并使用elbow方法检查最佳聚类数:

set.seed(100000)

cluster.results <-kmodes(data_cluster, 5 ,iter.max = 100, weighted = FALSE ) 

print(cluster.results)

k.max <- 20

wss <- sapply(1:k.max, 
              function(k){set.seed(100000)
                sum(kmodes(data_cluster, k, iter.max = 100 ,weighted = FALSE)$withindiff)})

wss

plot(1:k.max, wss,
     type="b", pch = 19, frame = FALSE, 
     xlab="Number of clusters K",
     ylab="Total within-clusters sum of squares")

我的问题是:

  1. Kmodes中是否有其他方法可用于检查最佳群集数量?
  2. 每个种子都给出了不同大小的节点,因此我尝试使用不同的种子,并将种子设置为最小的总和,这种方法是否正确?
  3. 如何检查我的群集是否稳定?
  4. 我想在新数据(另一年)中应用/预测此群集。怎么做?
  5. 是否有其他方法可以对分类数据进行聚类?

2 个答案:

答案 0 :(得分:0)

希望这会有所帮助:

install.packages( "NbClust", dependencies = TRUE )
library ( NbClust )

Data_Sim <- rbind ( matrix ( rbinom ( 250, 2, 0.25 ), ncol = 5 ),
  matrix ( rbinom (250, 2, 0.75 ), ncol = 5 ))
colnames ( Data_Sim ) <- letters [ 1:5 ]

Clusters <- NbClust ( Data_Sim, diss = NULL, distance = "euclidean",
  min.nc = 2, max.nc = 10, method = "kmeans", index = "all",
  alphaBeale = 0.1 )

hist ( Clusters$Best.nc [ 1, ], breaks = max ( na.omit (
  Clusters$Best.nc [ 1, ])))

答案 1 :(得分:0)

我的回答只涉及问题5.

您可以使用mixutre模型对分类数据进行聚类(例如,参见潜类模型)。标准方法考虑多项分布的混合。

经典信息标准(如BIC或ICL)可用于自动选择群集数量。

混合物允许计算新观察的分类概率,从而量化错误分类的风险。

如果您对此方法感兴趣,可以使用R包VarSelLCM。要对分类数据进行聚类,您的数据集必须是data.frame,并且每个变量必须存储在因子中。

以下是代码示例(群集数量允许介于1和6之间)

require(VarSelLCM)

    out <- VarSelCluster(data_cluster, 1:6, vbleSelec=FALSE)

    summary(out)

    VarSelShiny(out)