我必须在分类数据中创建聚类。我使用以下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")
我的问题是:
答案 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)