R

时间:2015-05-25 15:12:58

标签: r plot cluster-analysis

对于一组文档,我有一个大小为30 X 32的特征矩阵,其中行表示文档,列=要素。所以基本上每个文档有30个文档和32个特征。在运行PSO算法之后,我已经能够找到一些聚类质心(我现在不确定它们是否是最佳的),每个聚类质心都是长度为32的行向量。我有一个大小为30X1的列向量显示每个文档已分配到的质心。因此,该向量的索引之一将包含已分配文档1的质心的索引,依此类推。这是在计算每个文档与质心的欧氏距离之后获得的。我想得到一些提示,关于R中是否有一种方法可以以簇的形式绘制这个多维数据。有没有办法,例如,我可以将这些尺寸折叠为1-D,或以某种方式将它们显示在可能有点漂亮的图表中。我一直在阅读Multidimensional Scaling。到目前为止,我对它的理解是,它是一种将多维数据减少到较低维度的方法,这看起来似乎是我想要的。所以,我尝试使用这个代码(质心[[3]]基本上由4 X 32矩阵组成,代表4个质心):

   points <- features.dataf[2:ncol(features.dataf)]
row.names(points) <- features.dataf[,1]

fit <- cmdscale(points, eig = TRUE, k = 2)
x <- fit$points[, 1]
y <- fit$points[, 2]
plot(x, y, pch = 19, xlab="Coordinate 1", ylab="Coordinate 2", main="Clustering Text Based on PSO", type="n")
text(x, y, labels = row.names(points), cex=.7)

它给了我这个错误:

Error in cmdscale(pointsPlusCentroids, eig = TRUE, k = 2) : 
  distances must be result of 'dist' or a square matrix

然而,它似乎确实给了一个情节。但是pch = 19点符号不会出现,只会出现文本名称。像这样: enter image description here

除了上述内容之外,我还想对这些颜色进行着色,使得位于簇1中的文档被着色为一种颜色,而那些颜色为2的颜色等等。如果我有一个以这种方式存在质心的列向量,有没有办法做到这一点:

     [,1]
 [1,]    1
 [2,]    3
 [3,]    1
 [4,]    4
 [5,]    1
 [6,]    4
 [7,]    3
 [8,]    4
 [9,]    4
[10,]    4
[11,]    2
[12,]    2
[13,]    2
[14,]    2
[15,]    1
[16,]    2
[17,]    1
[18,]    4
[19,]    2
[20,]    4
[21,]    1
[22,]    1
[23,]    1
[24,]    1
[25,]    1
[26,]    3
[27,]    4
[28,]    1
[29,]    4
[30,]    1

有人可以帮我这个吗?或者,如果有任何其他方式来绘制像这样的多维集群。谢谢!

1 个答案:

答案 0 :(得分:1)

由于cmdscale需要距离,请尝试cmdscale(dist(points), eig = TRUE, k = 2)。由于type = "n",符号不会出现。要使文字着色,请使用:text(x, y, rownames(points), cex = 0.6, col = centroids)