你需要掌握选择最佳聚类数目的这10个技巧!

2019.07.12 17:56

聚类是最常见的无监督机器学习问题之一。通过一些相似性度量方法把一些观测值分成同一类。


共有5类聚类方法:

  1. 层次法
  2. 划分法(k-means,PAM,CLARA)
  3. 基于密度的方法
  4. 基于模型的方法
  5. 模糊聚类

起初,我写这篇文章主要是由于我阅读了关于clustree包,dendextend文档以及由Alboekadel Kassambara撰写的factoextra编写的关于聚类分析的实用指南。

数据集

我将使用集群包中一个鲜为人知的数据集:all.mammals.milk.1956,这是我之前没有研究过的一个数据集。

数据集传送门:https://www.rdocumentation.org/packages/cluster.datasets/versions/1.0-1/topics/all.mammals.milk.1956

这个小数据集包含了25种哺乳动物及其牛奶成分(水,蛋白质,脂肪,乳糖,灰分百分比)的清单。

首先让我们加载所需的包。

现在加载数据。

让我们研究并可视化这些数据。

所有变量用数字来表示,那么,统计分布呢?

不同属性之间的关系是什么?使用corrplot()创建相关矩阵。

当您拥有以不同比例测量的变量时,缩放数据很有用。

降维可以帮助数据可视化(例如PCA方法)。

这些是掌握80%差异的5台PC。scree图显示,PC1捕获了大约75%的方差。

从这些可视化中可以看出水和乳糖一起增加,蛋白质,灰分和脂肪一起增加;这两组是负相关的。

Naïve(K-means)方法

分区聚类方法(如k-means和Partitioning Around Medoids(PAM))要求您指定要生成的聚类数。

k-means聚类可能是最著名的分区方法之一。 k均值聚类背后的想法是定义聚类,即在聚类内的总变异量,以最小化聚类的紧凑性。

我们可以使用kmeans()函数计算R中的k-means:

上面的示例将数据分组为两个聚类,center = 2,并尝试多个初始配置,报告最佳配置。例如,由于此算法对聚类质心的初始位置敏感,因此添加nstart = 30将生成30个初始配置,然后平均所有质心结果。

因为在我们开始之前需要设置聚类(k)的数量,所以事先检查k的几个不同值可能会比较有利。

虽然这种视觉评估告诉我们聚类之间的界定,但它并没有告诉我们聚类的最佳数量是多少。

确定最优聚类数

文献中已经提出了各种用于评估聚类结果的措施。术语聚类验证用于设计评估聚类算法结果的过程。有超过30个索引和方法用于识别最佳聚类数,因此我将重点介绍一些非常简洁的clustree包。

“肘子”法(“Elbow” Method)

这种方法也比较著名,其中计算并绘制每个聚类数的平方和,并且用户寻找从陡峭到浅(肘部)的斜率变化以确定最佳数量集群。这种方法不精确,但仍有潜在的帮助。

这种方法很有用,因为它显示增加了聚类数量如何以有意义的方式分离聚类,而不是以边缘的方式。曲线表明除了第三个之外的其他聚类几乎没有价值(参见[此处]以获得更加数学上严格的解释和此方法的实现)。如果不是基于群内方差的简单解决方案,则肘子法是相当清楚的。差距统计是处理具有没有明显聚类的分布的数据的更复杂的方法(对于球状的、高斯分布的、轻度不相交的数据分布,可以找到正确的k值)。

差距统计

间隙统计量将不同k值的聚类内变化内的总量与它们在数据的空参考分布下的预期值进行比较。最优聚类的估计将是使得差距统计最大化的值(即,产生最大间隙统计量)。这意味着聚类结构远离点的随机均匀分布。

gap stats图显示了用垂直段绘制的具有标准错误的聚类数量(k)和用垂直虚线蓝线标记的k的最优值。根据这一观察,k = 2是数据中最优聚类。

轮廓法

另一种可以帮助确定最优聚类数量的可视化方法称为轮廓法。平均轮廓方法计算不同k值的观测值的平均轮廓。群集k的最佳数量是使k的可能值范围内的平均轮廓最大化的群集。

这也表明了2个聚类是最优的。

离差平方和法

另一种聚类验证方法是通过最小化聚类内的平方和(每个聚类有多紧密度的度量)和最大化聚类之间的平方和(每个聚类的分离程度的度量)来选择最佳聚类数。来自其他人)。

从这个测量结果来看,7个聚类似乎是合适的选择。

NbClust

NbClust包提供了30个用于确定相关聚类的索引,并根据不同的聚类数量组合、距离度量和聚类方法得到的不同结果向用户提出最佳的聚类方案。

这表明最佳簇聚类数为3。

Clustree

上面的统计方法生成一个每次只考虑一组集群的得分。 clustree R包采用另一种方法,考虑样本如何随着聚类数的增加而改变分组。这对于显示哪些聚类是不同的以及哪些聚类不稳定非常有用。它没有明确告诉您哪种聚类选择最佳,但它对于探索可能的选择很有用。

我们来看看1到11个聚类。

在该图中,每个节点的大小对应于每个聚类中的样本数量,并且箭头根据每个聚类接收的样本数量着色。一组单独的箭头,即透明的箭头,称为传入节点比例,也是彩色的,并显示来自一个组的样本如何最终在另一个组中 - 这是聚类不稳定性的指标。

在该图中,我们看到当我们从k = 2移动到k = 3时,来自左侧聚类的一些物种被重新分配到右侧的第三个聚类。当我们从k = 8移动到k = 9时,我们看到一个节点具有多条传入边,这表明我们对数据进行了过度聚类。

将此维度叠加在数据中的其他维度上也是有用的,特别是那些来自降维技术的维度。我们可以使用clustree_overlay()函数执行此操作:

我更喜欢从侧面看到它,在分辨率维度上显示x或y维度之一。

这表明我们可以通过检查边缘来指示正确的聚类分辨率,并且我们可以过度信息来评估聚类的质量。

选择合适的算法

如何选择合适的聚类算法? cValid包可用于同时比较多个聚类算法,以确定最佳聚类方法和最佳聚类数。我们将比较k-means、分层和PAM聚类。

连通性和轮廓是连通性的度量,而Dunn指数是不在同一聚类中的观测值与最大聚类内距离之间的最小距离的比率。

提取聚类的特征

我们想回答诸如“什么使这个聚类与众不同?”以及“彼此相似的聚类是什么”之类的问题。

如前所述,很难评估聚类结果的质量。我们没有真正的标签,因此聚类是一个很好的EDA起点,可以更详细地探索这些聚类之间的差异。让我们选择五个来看看,并研究下他们的特征。

让我们提取聚类并将它们添加回我们的初始数据,以便在聚类级别执行一些描述性统计:

我们看到仅由兔子组成的聚类2具有灰分很高。由海豹和海豚组成的第3组脂肪含量很高,这是有道理的,因为在这样寒冷的气候下,第四组的乳糖含量很高。


来源:https://towardsdatascience.com/10-tips-for-choosing-the-optimal-number-of-clusters-277e93d72d92

0
0
评论
0

我要发表

热门课程推荐

博客专栏推荐

数据库升级笔记
免费 7篇/已完结

相关领域专家推荐