我使用了我在网上找到的一些R代码来制作K-Means聚类图,如下所示:
dtmr <-DocumentTermMatrix(docs,control=list(wordLengths=c(4,15), bounds = list(global = c(50,500))))
## do tfxidf
dtm_tfxidf <- weightTfIdf(dtmr)
### k-means (this uses euclidean distance)
m <- as.matrix(dtm_tfxidf)
rownames(m) <- 1:nrow(m)
### don't forget to normalize the vectors so Euclidean makes sense
norm_eucl <- function(m) m/apply(m, MARGIN=1, FUN=function(x) sum(x^2)^.5)
m_norm <- norm_eucl(m)
### cluster into 5 clusters
cl <- kmeans(m_norm, 5)
table(cl$cluster)
### show clusters using the first 2 principal components
plot(prcomp(m_norm)$x, col=cl$cl, text(m_norm, mpg, row.names(m)))
这确实给了我5个集群的情节,我想知道如何添加标签来显示每个点是什么?
另一方面,无论如何,我能看到这些集群是什么吗? table(cl$cluster)
行只打印五个数字,我不知道这些数字是什么意思,我使用的数据只有400多个文本文档。
答案 0 :(得分:1)
我可以看到的问题是,text()
会在plot
来电时出现,而x
和y
传递给text
用于生成绘图的结果与prcomp
的结果不同。
我使用mtcars
作为数据集:
df<- mtcars
### k-means (this uses euclidean distance)
m <- as.matrix(df)
rownames(m) <- 1:nrow(m)
### don't forget to normalize the vectors so Euclidean makes sense
norm_eucl <- function(m) m/apply(m, MARGIN=1, FUN=function(x) sum(x^2)^.5)
m_norm <- norm_eucl(m)
### cluster into 5 clusters
cl <- kmeans(m_norm, 5)
table(cl$cluster)
### show clusters using the first 2 principal components
# do the PCA outside the plot function for now
PCA <-prcomp(m_norm)$x
#plot then add labels
plot(PCA, col=cl$cl)
text(x=PCA[,1], y=PCA[,2], cex=0.6, pos=4, labels=(row.names(m)))
对于第二个问题,群集分配位于cl$cluster
。 table()
来电只计算每个群集中有多少成员,这就是为什么它会为您报告五个号码的原因。