将标签添加到R中的K均值聚类图

时间:2018-01-15 11:23:26

标签: r plot

我使用了我在网上找到的一些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多个文本文档。

1 个答案:

答案 0 :(得分:1)

我可以看到的问题是,text()会在plot来电时出现,而xy传递给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)))

enter image description here

对于第二个问题,群集分配位于cl$clustertable()来电只计算每个群集中有多少成员,这就是为什么它会为您报告五个号码的原因。