选择层次凝聚聚类中的聚类数量

机器算法验证 聚类 层次聚类 数据库扫描 哈克
2022-02-27 18:51:09

我有一组点,我想根据计算的一些特征将它们聚类成组。

我有包含所有不同点对之间的距离的距离矩阵。我首先尝试了 K-Means 和 DBSCAN,但由于我不知道数据中包含 K-Means 所需的集群数量或 DBSCAN 所需的最佳 Epsilon 和 MinPnts 的数量。我决定转向分层聚集聚类,因为它不需要为聚类设置任何参数。

我使用 R 来执行 HAC。现在要将生成的树状图转换为多组点(平面簇),我想选择在哪个级别切割树(与选择簇数相同)。

我设法为集群数量的不同值执行此操作,并评估每个集群结果的剪影值,因此我可以选择给我最大剪影值的集群数量作为最佳集群数量。

发生的情况是,我发现获得的最大轮廓值(0.8)适用于多个集群 = 5,但集群大小不是很好(一个集群 > 900 点,第二个是 5 点,其他三个是每个单点)。我使用组平均值作为 HAC 集群 - 集群距离..

我也尝试了 Ward 的方法(它应该给出相同大小的集群),但是虽然这个方法给了我更好的分布每个集群中的点数......生成的集群的轮廓值非常低(0.1)。

你有什么好的方法可以在不需要参数的情况下进行聚类吗?或获得聚类参数的最佳值(HAC 的树状图切割级别,DBSCAN 的(epsilon,MinPnts))?

4个回答

看,如果你想得到一个分区,即使是层次聚类也需要参数。事实上,层次聚类有(大致)四个参数:1.实际算法(分裂与凝聚),2.距离函数,3.链接标准(单链接,病房等)和4.距离切割树的阈值(或任何其他提取方法)。

事实上,集群分析不存在任何好的“按钮”解决方案。这是一种探索性技术,这意味着您必须尝试不同的方法和参数并分析结果。

我发现 DBSCAN 在大多数情况下都非常有用。是的,它有两个参数(距离阈值又名:邻居谓词和 minpts 又名核心谓词) - 这次我没有单独计算距离函数,因为它实际上是需要的“是”二元谓词的邻居;见 GDBSCAN。

原因是在许多应用程序中,如果您对数据足够了解,您可以直观地选择这些值。例如,在处理地理数据时,距离以公里为单位,它允许我直观地指定空间分辨率。类似地,minpts 让我可以直观地控制观察子集在成为集群之前需要达到的“显着性”程度。

通常,当您发现 DBSCAN 难以使用时,是因为您还没有了解数据上的“距离”。然后,您首先需要弄清楚如何测量距离以及结果数字对您意味着什么。然后你就会知道要使用的阈值。

最后去尝试一下这是数据探索,而不是“ return(truth);”。没有“真正的”聚类。只有“明显”、“无用”和“有趣”的聚类,这些品质无法用数学来衡量;它们对用户来说是主观的。

有多种选择集群数量的标准(例如伪、CCC)和多种链接方法(单个、完整、Ward 等)。然而,在集群分析中,关键是集群的可解释性和实用性。不幸的是,这可能涉及比较许多不同的潜在解决方案。文献和集群数量标准可以指导您找到可能值得探索的特定解决方案,但它们不能替代查看解决方案。R2

我建议看很多解决方案,看看他们告诉你什么。他们会回答你的研究问题吗?他们增加了你的知识吗?他们会让你说“啊哈!” 或者,更好的“这很有趣”?他们让你吃惊吗?

“如果你不感到惊讶,那么你什么都没学到”赫尔曼弗里德曼

“在科学中听到的最激动人心的短语,预示着新发现的短语,不是'尤里卡!' 但是“这很有趣……”艾萨克·阿西莫夫

您的数据可能包含异常值。您可以做的一件简单的事情是将那些大小小于某个阈值的集群视为包含异常值。从数据中删除这些异常值,然后再次运行聚类算法。

并且不要忘记,在大多数情况下进行聚类时,聚类的好坏也取决于您的目标。

计算质心 - 每个聚类的平均值并分析哪些质心对于您的需求有显着差异(或者对于您作为研究质心及其标准偏差的研究人员来说,哪些聚类是合乎逻辑的)。