我有一个数据集,它有6497个实例,12个属性和一个名为q(quality)的类变量。类值的范围为3到9.数据可以CSV格式from here
下载我在这个数据集上做k-means集群,想要绘制它。但是我生成的图似乎有问题,因为我认为它们不代表集群。我想要生成的图是从这个SO答案How to create a cluster plot in R?
中引用的这就是我正在做的事情
library(vegan)
winequality <- read.csv("wine_nocolor.csv")
express <- winequality[, c("fa", "va", "ca", "rs", "ch", "fsd", "tsd", "d", "p", "s", "a")]
rownames(express) <- winequality$id
str(express) #'data.frame': 6497 obs. of 11 variables
kclus <- kmeans(express,centers= 3, iter.max=1000, nstart=10000) #takes a bit of time
wine_dist <- dist(express)
cmd <- cmdscale(wine_dist) #takes bit of time
groups <- levels(factor(kclus$cluster))
ordiplot(cmd, type = "n") #shows warning that Species scores not available
cols <- c("steelblue", "darkred", "darkgreen")
for(i in seq_along(groups)){
points(cmd[factor(kclus$cluster) == groups[i], ], col = cols[i], pch = 16)
}
# add spider and hull
ordispider(cmd, factor(kclus$cluster), label = TRUE)
ordihull(cmd, factor(kclus$cluster), lty = "dotted")
以上代码生成以下图表。但正如您所看到的,群集未以清晰的方式展示。
问题
答案 0 :(得分:3)
此代码的作者(来自其他SO问题)使用MDS(多维缩放)来减少维度以绘制群集。
阅读?cmdscale
以了解。
无论您是想要进行此降维,还是在群集之前或之后,都是您的选择,我不确定是否有什么需要修复&#34;在此代码中,您可以更多地决定要执行的操作和绘图。 我建议你首先尝试减少聚类前的变量数量。 11真的很多。它们都有用吗?
还要记住,在应用k-means之前,需要对变量进行规范化。
答案 1 :(得分:2)
不要忘记仔细预处理数据!
在上面显示的图片中,{strong>完全由tsd
属性支配*。所有其他数据基本上都没有考虑在内!
(fsd
属性有一些小的影响,其他属性相形见绌。)
数据集似乎不能很好地聚类。
这是我能得到的最好结果:
有人可能会争辩说这个数据集中有两种类型。但他们并没有很好地分开。它也可能是形状奇特的单集群。
特别是,数据拆分的方式会发生很大变化,具体取决于您预处理和扩展数据的方式。这表明结果不稳定。