不需要告诉集群数量的聚类算法

数据挖掘 聚类 数据框 距离
2021-09-29 23:59:17

我有一个包含 2 列数值的数据框。我想应用聚类算法将所有条目放入同一个组中,该组与其他条目的距离相对较小。但是我可以使用哪种聚类算法,虽然我不知道会形成多少组?如果有一个参数来确定允许的最大距离,那将是理想的。如果没有这样的算法,或许能想出一些直觉,这样的算法是如何由我自己来实现的。非常感谢!!:)

数据可能如下所示:

a,b
20,30
19,31
10,10
9,8
12,11
31,11
32,11
4个回答

我会首先尝试DBSCAN算法:相当容易调整(特别是根据您的要求使用距离概念),并且不需要知道集群的数量。

还有一些其他算法可以帮助您确定集群的数量:例如贝叶斯高斯混合(参见sklearn 实现),但它需要更多的知识和工作。还有光谱聚类,但对于这个,sklearn不会自动找到聚类的数量,因此您必须创建自己的实现并通过绘制特征值手动确定数量。

我建议查看层次聚类

  • 这很简单,因此您可以实现和调整您自己的版本
  • 它使您可以决定要在哪个级别停止将元素分组在一起,这样您就可以获得最大距离。

但是请注意,这种方法有时会导致意外/非直观的集群。

您也可以在这里使用 K-means 聚类和欧几里得距离测量。

为什么我建议欧几里得距离,因为你有所有的数字数据,如果它是混合的,那么 gover 距离是更好的选择,同样你可以根据要求选择正确的距离度量。

在这里,您可以通过 R 中的 nbclust 函数获得最佳聚类数。

这是基于亲和力矩阵的更多内容:

和一个类似于 DBSCAN 并且可能更好——光学