如何在R中绘制kmeans簇并显示质心?

如何在R中绘制kmeans簇并显示质心?,r,cluster-analysis,k-means,R,Cluster Analysis,K Means,我有一个数据集,它有6497个实例、12个属性和一个名为q(quality)的类变量。类值的范围从3到9。数据可以CSV格式下载 我正在这个数据集上进行k-means聚类,并想绘制它。但我生成的图似乎有点问题,因为我认为它们并没有代表集群。我试图生成的图是从这个答案中引用的 这就是我正在做的 library(vegan) winequality <- read.csv("wine_nocolor.csv") express <- winequality[, c("fa", "va",

我有一个数据集,它有6497个实例、12个属性和一个名为q(quality)的类变量。类值的范围从3到9。数据可以CSV格式下载

我正在这个数据集上进行k-means聚类,并想绘制它。但我生成的图似乎有点问题,因为我认为它们并没有代表集群。我试图生成的图是从这个答案中引用的

这就是我正在做的

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")
library(素食主义者)
winequality此代码的作者(来自另一个SO问题)正在使用MDS(多维缩放)进行降维以绘制集群

阅读
?cmdscale
以了解

还有一些好的来源和方法

无论你想做这个降维,在聚类之前还是之后,这都是你的选择,我不确定这段代码中有什么“需要修复”,更多的是由你决定你想做什么并绘制。 我建议您在进行聚类之前先尝试减少变量的数量。11真是太多了。它们都有用吗


还请记住,在应用k-均值之前,需要对变量进行规范化。

不要忘记仔细预处理数据

在上面显示的图像中,结果被
tsd
属性完全控制。所有其他数据基本上没有考虑在内 (fsd的
fsd
属性有一些轻微的影响,其他属性则相形见绌。)

数据集似乎没有很好地聚类

这是我能得到的最好结果:

有人可能会说,这个数据集中有两种类型。但他们并没有很好地分开。它也可能是一个形状奇特的单一集群


特别是,数据分割的方式会发生很大变化,这取决于您如何预处理和缩放数据。这表明结果不稳定。

您正在创建一个包含11个变量的聚类,在二维图上,聚类看起来不分离是正常的。顺便说一下,在应用k-均值之前,我会先尝试减少变量的数量。你可能会有更好的结果好的,谢谢你的澄清。我还需要理解Dim1和Dim2是什么意思?是否有可能创建类似于此的绘图,类值可以是1到10,他们选择了10个群集。数据不群集-至少不使用kmeans。产生的集群毫无意义。没有分离或结构捕获。瓷砖似乎是使用varonoi图生成的,而varonoi图本身并没有对数据进行聚类。@Anony Mouse你是说葡萄酒数据没有聚类吗?我现在将在此数据集上应用PCA和其他数据预处理技术,看看它是如何变化的。你能分享一下你是如何把上面的地块装箱的吗?这样我就可以在预处理技术之前和之后绘制它,看看它是如何分裂的?另外,您如何确定
tsd
属性压倒了数据。谢谢我不使用R,所以我不能与您共享R代码。我绘制了
tsd
属性,k-means聚类将是正交切片,如上图所示。您使用的是matlab还是scipy?我正在寻找一种方法,在使用PCA、ICA等对数据进行预处理之前/之后,直观地查看数据分割的情况。我不介意切换工具以实现我的目标。因此,在您创建的绘图中,只考虑了tsd属性?不。但当我没有预处理数据,并且选择了x轴=tsd时,它看起来像您的绘图,根据x轴分割数据。