选择集群的数量 - 集群验证标准与域理论考虑

机器算法验证 r 机器学习 分类 聚类 层次聚类
2022-03-13 09:00:24

我经常面临必须选择 ak 数量的集群的问题。我最终选择的分区更多地是基于视觉和理论问题,而不是质量标准。

我有两个主要问题。

第一个涉及集群质量的一般概念。据我了解,诸如“肘部”之类的标准建议参考成本函数的最佳值。我对这个框架的问题是,最佳标准对理论考虑是盲目的,因此在您的最终组/集群中总是需要一定程度的复杂性(与您的研究领域相关)。

此外,正如这里所解释的,最佳值还与“下游目的”约束(例如经济约束)有关,因此考虑您将如何处理集群很重要。

显然,一个约束是要找到有意义的/可解释的集群,而你拥有的集群越多,解释它们的难度就越大。

但情况并非总是如此,我经常发现 8、10 或 12 个集群是我希望在分析中拥有的最小“有趣”集群数量。

然而,诸如肘部之类的标准通常表明集群要少得多,通常为 2,3 或 4。

Q1我想知道的是,当您决定选择更多集群而不是某个标准(例如肘部)提出的解决方案时,最好的论点是什么。直观地说,没有限制时(例如您获得的组的可理解性或在coursera示例中,当您拥有大量资金时) ,应该总是越多越好。你会如何在科学期刊文章中论证这一点?

另一种说法是,一旦您确定了最小数量的集群(使用这些标准),您是否甚至需要证明为什么您选择了比这更多的集群?不应该只在选择最小有意义的集群时才出现理由吗?

Q2与此相关的是,我不明白某些质量指标(例如轮廓)实际上如何随着集群数量的增加而降低。我没有在剪影中看到对集群数量的惩罚,那怎么可能呢?理论上,集群越多,集群质量就越高

# R code 

library(factoextra)

data("iris")
ir = iris[,-5]

# Hierarchical Clustering, Ward.D
# 5 clusters
ec5  = eclust(ir, FUNcluster = 'hclust', hc_metric = 'euclidean', 
              hc_method = 'ward.D', graph = T, k = 5)
# 20 clusters
ec20 = eclust(ir, FUNcluster = 'hclust', hc_metric = 'euclidean', 
              hc_method = 'ward.D', graph = T, k = 20)

a = fviz_silhouette(ec5)  # silhouette plot
b = fviz_silhouette(ec20) # silhouette plot

c = fviz_cluster(ec5)  # scatter plot
d = fviz_cluster(ec20) # scatter plot

grid.arrange(a,b,c,d)

在此处输入图像描述

2个回答

关键是找到有意义的集群以及您在结果集群中的价值。

让我用一个简单的例子来说明。这个例子是两个分离得很好的高斯簇。使用 k-means 将数据划分为 2 个或 3 个集群,我们得到以下分区:

set.seed(1066)
x = c(rnorm(200,0,1), rnorm(200,6,1))
y = rnorm(400,0,1)
XY = data.frame(x,y)

KM2 = kmeans(XY, 2)
KM3 = kmeans(XY, 3)

par(mfrow=c(1,2))
plot(XY, pch=20, col=KM2$cluster+1, asp=1)
plot(XY, pch=20, col=KM3$cluster+1, asp=1)

两个和三个集群

剪影说你最好用两个集群而不是三个。

library(cluster)
plot(silhouette(KM2$cluster, dist(XY)))
plot(silhouette(KM3$cluster, dist(XY)))

剪影图

看看为什么剪影下降是有用的。首先,很容易看出,右边的星团,轮廓几乎没有变化。平均轮廓大幅下降的原因是左侧的簇被一分为二。为什么没有这样的剪影?正如我所说,你需要看看指标有什么好处。对于每个点,剪影将点与同一簇中其他点之间的平均距离与该点与最近的其他簇之间的平均距离进行比较。当有两个集群时,两个集群中的每一个中的点都与另一个集群很好地分开。三个集群并非如此。左侧两个簇中的点彼此正对。这就是指标下降的方式。剪影不仅奖励聚类中的点靠得很近的聚类;它还惩罚彼此分离得不好的集群。

这样就达到了“下游目的”。有时,拥有良好分离的集群并不那么重要。例如,您可以对图像中的颜色使用 k-means 聚类来对相似颜色进行分组以进行图像压缩。在这种情况下,只要每个集群合理一致(紧凑),有时两个集群是否可能彼此靠近并不重要。然而,人们通常使用聚类来理解数据中更基本的结构。例如,在上面的两个高斯示例中,两个集群比三个集群更能显示底层结构。如果您正在寻找结构,您需要最接近代表数据中自然分组的集群数量。但这是两个不同的目标:

  1. 一组点,其中同一簇中的点彼此靠近,并且

  2. 也将不同集群分开的分组

只要您只希望同一个集群中的点接近,您认为更多集群应该总是更好的论点是可以的。但是,如果您试图发现底层结构,那就不好了。结构就是数据中的内容。将一个集群称为两个集群并不是一种改进。

请注意,交叉验证也可以用于聚类问题。

例如,在 K 均值中,集群数量的增加总是会降低我们拟合的目标。一个极端的情况是集群的数量等于数据点的数量,目标是0. 但这是一个过度拟合的模型,将在测试集上失败。

我的建议是检查保留测试数据集的“聚类质量度量”。