2014-04-20 29 views
0

我正在使用10842个推文数对一组文本数据运行k均值聚类。我设置了k设定5,我得到了我的集群按以下k-means聚类 - 为什么所有相​​同的聚类?

cluster1中:预定航班NA

Cluster2中:机票预订NA

cluster3:机票预订NA

cluster4:机票预订NA

cluster5:预订航班NA

我不易懂nd为什么所有的集群都是相同的?

myCorpus<-Corpus(VectorSource(myCorpus$text)) 
myCorpusCopy<-myCorpus 
myCorpus<-tm_map(myCorpus,stemDocument) 
myCorpus<-tm_map(myCorpus,stemCompletion,dictionary=myCorpusCopy) 
myTdm<-TermDocumentMatrix(myCorpus,control=list(wordLengths=c(1,Inf))) 
myTdm2<-removeSparseTerms(myTdm,sparse=0.95) 
m2<-as.matrix(myTdm2) 
m3<-t(m2) 
set.seed(122) 
k<-5 
kmeansResult<-kmeans(m3,k) 
round(kmeansResult$centers,digits=3) 

for(i in 1:k){ 
cat(paste("cluster",i,":",sep="")) 
s<-sort(kmeansResult$centers[i,],decreasing=T) 
cat(names(s)[1:3],"\n") 
} 

回答

0

请记住,K-means聚类要求您预先指定簇的数量(相比之下,比如说,层次聚类)。如果不能访问数据集(因此无法重现您在此处介绍的内容),那么您获得看似同类群集的最明显原因是您事先指定的群集数量存在问题。

最直接的解决方案是尝试R中的NbClust包以确定适合您数据的群集数量。

下面是一个使用玩具的数据集给你如何进行一个想法的示例代码:

# install.packages("NbClust") 
library(NbClust) 
set.seed(1234) 
df <- rbind(matrix(rnorm(100,sd=0.1),ncol=2), 
    matrix(rnorm(100,mean=1,sd=0.2),ncol=2), 
    matrix(rnorm(100,mean=5,sd=0.1),ncol=2), 
    matrix(rnorm(100,mean=7,sd=0.2),ncol=2)) 

# "scree" plots on appropriate number of clusters (you should look 
# for a bend in the graph) 
nc <- NbClust(df, min.nc=2, max.nc=20, method="kmeans") 
table(nc$Best.n[1,]) 

# creating a bar chart to visualize results on appropriate number 
# of clusters 
barplot(table(nc$Best.n[1,]), 
     xlab="Number of Clusters", ylab="Number of Criteria", 
     main="Number of Clusters Chosen by Criteria") 

如果仍然遇到问题,甚至指定由该功能建议集群 数之后NbClust包,然后另一个问题 可能与您删除稀疏的条款。尝试向下调整“稀疏” 选项,然后检查k均值聚类的输出。

+0

嗨,我现在可以通过“向下调整”稀疏“选项”来达到什么目的?我注意到我删除了SparseTerms并调换了矩阵后,我的数据集只包含2列“预订”和“航班”。不知道为什么? – user3456230