【问题标题】:Visualization of multi-dimensional data clusters in RR中多维数据集群的可视化
【发布时间】:2015-08-07 02:40:37
【问题描述】:

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

   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 点符号没有出现,只是文本名称。像这样:

除了上述之外,我还想给这些上色,以便位于集群 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

谁能帮我解决这个问题?或者,如果有任何其他方式来绘制像这样的多维集群。谢谢!

【问题讨论】:

    标签: r plot cluster-analysis


    【解决方案1】:

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

    【讨论】:

    • 您能否解释一下 col = centroids 是如何实现这一点的。我正在研究 col 的作用,但列向量如何自动转换为颜色并不是很明显。谢谢。
    • 没有谜团。 R 根据palette() 将数字 1:8 转换为颜色。例如:n=5pie(rep(1,n), col=FALSE); pie(rep(1,n), col="red"); pie(rep(1,n), col=2) ; pie(rep(1,n), col=1:2) ;#recycled; pie(rep(1,n), col=1:n) ; palette(); #eight basics colors; pie(rep(1,n), col=c("black","red","green3","blue","cyan")) ; pie(rep(1,n), col=rainbow(n)); pie(rep(1,n), col=terrain.colors(n)); n=15; pie(rep(1,n), col=1:n); #recycled; pie(rep(1,n), col=terrain.colors(n))
    猜你喜欢
    • 2017-09-14
    • 1970-01-01
    • 2021-05-15
    • 2016-12-15
    • 2018-09-07
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多