我有一个包含 2 列数值的数据框。我想应用聚类算法将所有条目放入同一个组中,该组与其他条目的距离相对较小。但是我可以使用哪种聚类算法,虽然我不知道会形成多少组?如果有一个参数来确定允许的最大距离,那将是理想的。如果没有这样的算法,或许能想出一些直觉,这样的算法是如何由我自己来实现的。非常感谢!!:)
数据可能如下所示:
a,b
20,30
19,31
10,10
9,8
12,11
31,11
32,11
我有一个包含 2 列数值的数据框。我想应用聚类算法将所有条目放入同一个组中,该组与其他条目的距离相对较小。但是我可以使用哪种聚类算法,虽然我不知道会形成多少组?如果有一个参数来确定允许的最大距离,那将是理想的。如果没有这样的算法,或许能想出一些直觉,这样的算法是如何由我自己来实现的。非常感谢!!:)
数据可能如下所示:
a,b
20,30
19,31
10,10
9,8
12,11
31,11
32,11
我会首先尝试DBSCAN算法:相当容易调整(特别是根据您的要求使用距离概念),并且不需要知道集群的数量。
还有一些其他算法可以帮助您确定集群的数量:例如贝叶斯高斯混合(参见sklearn 实现),但它需要更多的知识和工作。还有光谱聚类,但对于这个,sklearn
不会自动找到聚类的数量,因此您必须创建自己的实现并通过绘制特征值手动确定数量。
您也可以在这里使用 K-means 聚类和欧几里得距离测量。
为什么我建议欧几里得距离,因为你有所有的数字数据,如果它是混合的,那么 gover 距离是更好的选择,同样你可以根据要求选择正确的距离度量。
在这里,您可以通过 R 中的 nbclust 函数获得最佳聚类数。