如何生成 k-means 聚类分析结果的漂亮图?

机器算法验证 数据可视化 分类 k-均值 无监督学习
2022-01-25 22:46:00

我正在使用 R 进行 K 均值聚类。我使用 14 个变量来运行 K-means

  • 什么是绘制 K-means 结果的漂亮方法?
  • 有没有现有的实现?
  • 有 14 个变量是否会使绘制结果复杂化?

我发现了一个叫做 GGcluster 的东西,它看起来很酷,但它仍在开发中。我还阅读了一些关于 sammon mapping 的内容,但不是很了解。这会是一个不错的选择吗?

4个回答

这里有一个可以帮助你的例子:

library(cluster)
library(fpc)

data(iris)
dat &lt- iris[, -5] # without known classification 
# Kmeans clustre analysis
clus &lt- kmeans(dat, centers=3)
# Fig 01
plotcluster(dat, clus$cluster)

# More complex
clusplot(dat, clus$cluster, color=TRUE, shade=TRUE, 
         labels=2, lines=0)

# Fig 03
with(iris, pairs(dat, col=c(1:3)[clus$cluster])) 

根据后一个图,您可以决定要绘制哪些初始变量。也许 14 个变量很大,因此您可以先尝试主成分分析 (PCA),然后使用 PCA 中的前两个或三个成分进行聚类分析。

我会为此推送剪影图,因为当维度数为 14 时,您不太可能从配对图中获得很多可操作的信息。

library(cluster)
library(HSAUR)
data(pottery)
km    <- kmeans(pottery,3)
dissE <- daisy(pottery) 
dE2   <- dissE^2
sk2   <- silhouette(km$cl, dE2)
plot(sk2)

这种方法被高度引用且广为人知(有关解释,请参见此处)。

Rousseeuw, PJ (1987)剪影:对聚类分析的解释和验证的图形辅助J.计算机。应用程序。数学。, 20 , 53-65。

我知道的最简单的方法如下:

X <- data.frame(c1=c(0,1,2,4,5,4,6,7),c2=c(0,1,2,3,3,4,5,5))
km <- kmeans(X, center=2)
plot(X,col=km$cluster)
points(km$center,col=1:2,pch=8,cex=1)

通过这种方式,您可以使用不同的颜色及其质心来绘制每个集群的点。

在这一点上这是一个老问题,但我认为 factoextra 包有几个用于聚类和绘图的有用工具。例如,fviz_cluster()函数在散点图中绘制 PCA 维度 1 和 2,并对集群进行着色和分组。 这个演示通过了一些与 factoextra 不同的功能。