R中多维数据簇的可视化
Visualization of multi-dimensional data clusters in R
对于一组文档,我有一个大小为 30 X 32 的特征矩阵,其中行代表文档,列代表特征。所以基本上每个文档有 30 个文档和 32 个特征。在 运行 一个 PSO 算法之后,我已经能够找到一些簇质心(我现在不确定它们是否是最佳的)每个都是长度为 32 的行向量。我有一个列向量大小为 30X1,显示每个文档已分配到的质心。因此,该向量的索引之一将包含已分配文档 1 的质心的索引,依此类推。这是在计算每个文档与质心的欧氏距离之后获得的。我想获得一些关于 R 中是否有方法以簇的形式绘制此多维数据的提示。例如,有没有一种方法可以将这些维度折叠成一维,或者以某种方式将它们显示在可能看起来有点漂亮的图表中。我一直在阅读多维缩放。到目前为止,我对它的理解是,它是一种将多维数据减少到较低维度的方法,这看起来确实是我想要的。所以,我用这段代码试了一下(质心 [[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 点符号没有出现,只是文本名称。像这样:
除上述内容外,我还想对这些进行着色,以便将位于群集 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
有人可以帮我解决这个问题吗?或者是否有任何其他方法来绘制像这样的多维集群。谢谢!
由于 cmdscale
需要距离,请尝试 cmdscale(dist(points), eig = TRUE, k = 2)
。由于type = "n"
,符号没有出现。要为文本着色,请使用:text(x, y, rownames(points), cex = 0.6, col = centroids)
对于一组文档,我有一个大小为 30 X 32 的特征矩阵,其中行代表文档,列代表特征。所以基本上每个文档有 30 个文档和 32 个特征。在 运行 一个 PSO 算法之后,我已经能够找到一些簇质心(我现在不确定它们是否是最佳的)每个都是长度为 32 的行向量。我有一个列向量大小为 30X1,显示每个文档已分配到的质心。因此,该向量的索引之一将包含已分配文档 1 的质心的索引,依此类推。这是在计算每个文档与质心的欧氏距离之后获得的。我想获得一些关于 R 中是否有方法以簇的形式绘制此多维数据的提示。例如,有没有一种方法可以将这些维度折叠成一维,或者以某种方式将它们显示在可能看起来有点漂亮的图表中。我一直在阅读多维缩放。到目前为止,我对它的理解是,它是一种将多维数据减少到较低维度的方法,这看起来确实是我想要的。所以,我用这段代码试了一下(质心 [[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 点符号没有出现,只是文本名称。像这样:
除上述内容外,我还想对这些进行着色,以便将位于群集 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
有人可以帮我解决这个问题吗?或者是否有任何其他方法来绘制像这样的多维集群。谢谢!
由于 cmdscale
需要距离,请尝试 cmdscale(dist(points), eig = TRUE, k = 2)
。由于type = "n"
,符号没有出现。要为文本着色,请使用:text(x, y, rownames(points), cex = 0.6, col = centroids)