为什么k-means聚类观察而不是R中的变量?

时间:2017-06-23 11:29:33

标签: r plot cluster-analysis visualization k-means

我有一个数据集mydata,其中包含84个变量,每个变量有300个观察值,如下所示:

enter image description here

我使用以下代码在5个集群中集群mydata

mydata <- read.csv("mydata.csv", header = TRUE)

# K-Means Clustering with 5 clusters
fit <- kmeans(mydata, 5)

# Cluster Plot against first 2 principal components

# vary parameters for most readable graph
library(cluster) 
clusplot(mydata, fit$cluster, color=TRUE, shade=TRUE, labels=2, lines=0)

这会生成以下图:enter image description here

我希望它根据观察结果绘制84个变量及其名称,如第一张图所示。但相反,正如在上一张图片中可以看到的那样,它聚集了300个观测值。如何解决这个问题?

我尝试转置mydata,但这并没有解决问题。

编辑:我希望它能够绘制这样的图(但这个图是针对另一个数据集的)。我只显示该图以显示图上变量的名称,这意味着变量将被绘制(基于观察结果)。 enter image description here

2 个答案:

答案 0 :(得分:2)

如果您希望群集变量而不是实例,则只需转置您的数据矩阵。

通常,群集应用于数据点,而不是列。

注意k-means的通常限制。它对规模非常敏感。

答案 1 :(得分:0)

您提到的情节可能是使用mtcars数据集创建的:

print(datasets::mtcars)

你看到的观点显然是观察。

如果要创建变量集群,则存在多个选项:

  • 创建变量之间的距离矩阵,例如cor,并使用hclust进行分层聚类。
  • 然后执行pca,将变量的投影聚类到创建的组件上。这样,您就可以使用kmeans对变量进行聚类。
  • 如果您的所有变量都是数字变量,则可以转置数据帧并进行k均值聚类。

此外,您希望对变量进行聚类的问题可能需要更多考虑。