Python聚类算法

时间:2013-11-13 14:59:27

标签: cluster-analysis k-means dbscan

我一直在寻找scipy和sklearn来解决我遇到的特定问题的聚类算法。我需要一些方法来将N个粒子的特征表征为k个组,其中k不一定是已知的,除此之外,没有先验的链接长度是已知的(类似于此question)。

我尝试过kmeans,如果您 知道 您想要多少个群集,这种方法效果很好。我已经尝试了dbscan,除非你 告诉 它是一个特征长度范围,停止查看(或开始寻找)群集,否则它会很糟糕。问题是,我可能有成千上万的这些粒子簇,我不能花时间告诉kmeans / dbscan算法他们应该做些什么。

以下是dbscan找到的示例: dbscanfail

你可以看到这里确实存在两个不同的群体,虽然调整了epsilon因子(相邻群集参数之间的最大距离),但我根本无法看到这两个粒子群。

还有其他算法可以在这里使用吗?我预先寻找最少的信息 - 换句话说,我希望算法能够做出关于什么可能构成一个单独集群的“智能”决策。

4 个答案:

答案 0 :(得分:8)

我找到了一个不需要先验信息/猜测的东西,并且非常适合我要求它做的事情。它名为Mean Shift,位于SciKit-Learn。它也相对较快(与Affinity Propagation等其他算法相比)。

以下是它给出的一个例子:

MeanShiftResults

我还想指出,在文档中指出它可能无法很好地扩展。

答案 1 :(得分:3)

  • 使用DBSCAN时,对数据进行缩放/标准化可能会有所帮助 预先确定距离,以便估计epsilon是相对的。

  • 有一个DBSCAN的实现 - 我认为它是一个 Anony-Mousse某处被称为“漂浮在周围” - 来自 使用epsilon估计函数。它有效,只要它没有喂食 使用大型数据集。

  • github上有几个incomplete versions的OPTICS。也许 你可以找到一个适合你的目的。仍然 试图找出自己,minPts有哪些影响,使用一个和 相同的提取方法。 enter image description here

答案 2 :(得分:1)

您可以尝试最小生成树(zahn算法),然后删除类似于alpha形状的最长边。我使用它与delaunay三角剖分和凹形船体:http://www.phpdevpad.de/geofence。您也可以尝试使用分层集群,例如clusterfck。

答案 3 :(得分:1)

您的情节表明您选择的minPts参数方式太小了。

看看OPTICS,它不再需要DBSCAN的epsilon参数。