首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >K-意思是聚类--为什么所有的簇都是相同的?

K-意思是聚类--为什么所有的簇都是相同的?
EN

Stack Overflow用户
提问于 2014-04-20 14:58:50
回答 1查看 351关注 0票数 0

我在一组文本数据上运行一个k均值聚类,其中包含10842个tweet。我将k设为5,得到了如下所示的集群

第一组:预订NA航班

第二组:机票预订

第三组:机票预订

第四组:机票预订

第5组:预订NA次航班

我不明白为什么所有的集群都是一样的??

代码语言:javascript
复制
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")
}
EN

回答 1

Stack Overflow用户

发布于 2014-04-20 15:51:01

请记住,k均值集群要求您预先指定集群的数量(例如,与分层集群相比)。如果无法访问您的数据集(因此无法复制您在这里展示的内容),您获得看似同构的集群最明显的原因是,您预先指定的集群数量存在问题。

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

下面是一个使用玩具数据集的示例代码,可以让您了解如何进行操作:

代码语言:javascript
复制
# 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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23183858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档