【发布时间】:2017-12-16 23:49:07
【问题描述】:
我正在尝试对具有 69 列和 1000 行的数据帧执行 k-means。首先,我需要先使用 Davies-Bouldin 指数来确定最佳聚类数。这个算法要求输入应该是矩阵的形式,我先用了这段代码:
totalm <- data.matrix(total)
后跟以下代码(Davies-Bouldin 索引)
clusternumber<-0
max_cluster_number <- 30
#Davies Bouldin algorithm
library(clusterCrit)
smallest <-99999
for(b in 2:max_cluster_number){
a <-99999
for(i in 1:200){
cl <- kmeans(totalm,b)
cl<-as.numeric(cl)
intCriteria(totalm,cl$cluster,c("dav"))
if(intCriteria(totalm,cl$cluster,c("dav"))$davies_bouldin < a){
a <- intCriteria(totalm,cl$cluster,c("dav"))$davies_bouldin }
}
if(a<smallest){
smallest <- a
clusternumber <-b
}
}
print("##clusternumber##")
print(clusternumber)
print("##smallest##")
print(smallest)
我不断收到此错误:(list) 对象不能被强制输入“double”。 我该如何解决这个问题?
可重现的例子:
a <- c(0,0,1,0,1,0,0)
b <- c(0,0,1,0,0,0,0)
c <- c(1,1,0,0,0,0,1)
d <- c(1,1,0,0,0,0,0)
total <- cbind(a,b,c,d)
【问题讨论】:
标签: r cluster-analysis k-means