根据空间接近度对几何点进行分组

时间:2018-05-23 08:36:18

标签: python scikit-learn cluster-analysis dbscan

我在3D空间中有以下几点:

enter image description here

根据D_maxd_max,我需要分组积分:

D_max = max dimension of each group
d_max = max distance of points inside each group

像这样:

enter image description here

上图中组的形状看起来像一个盒子,但形状可以是分组算法的输出。

我正在使用Python并使用Blender可视化结果。我正在考虑使用scipy.spatial.KDTree并调用其query API,但是,我不确定这是否适合手头的工作。我担心可能有一个我不知道的更好的工具。我很想知道是否还有其他工具/库/算法可以帮助我。

正如@CoMartel指出的那样,DBSCANHDBSCAN clustering模块看起来非常适合这类问题。但是,正如@Paul所指出的,他们缺少与我的D_max参数相关的群集最大大小的选项。我不确定如何为DBSCAN和HDBSCAN群集添加最大群集大小功能。

感谢@ Anony-Mousse我看了Agglomerative Clustering: how it worksHierarchical Clustering 3: single-link vs. complete-link我正在研究Comparing Python Clustering Algorithms,我觉得这些算法的工作方式越来越清晰。

3 个答案:

答案 0 :(得分:2)

根据要求,我的评论作为答案:

您可以使用DBSCAN(http://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html)或HDBSCAN。

这两种算法都允许根据d_max(同一数据集的2个点之间的最大距离)对每个点进行分组,但它们不会采用最大的簇大小。限制群集最大大小的唯一方法是减少eps参数,该参数控制同一群集中2个点之间的最大距离。

答案 1 :(得分:2)

使用分层凝聚聚类

如果使用完整链接,则可以控制群集的最大直径。完整链接是最大距离。

DBSCAN的epsilon参数最大距离,因为多个步骤是可传递的。集群可以变得比epsilon大得多!

答案 2 :(得分:0)

DBSCAN聚类算法,其中每个组扩展内的点的最大距离

您可以递归使用DBSCAN算法。

def DBSCAN_with_max_size(myData, eps = E, max_size = S):
     clusters = DBSCAN(myData, eps = E)
     Big_Clusters = find_big_clusters(clusters)
     for big_cluster in Big_Clusters:
         DBSCAN_with_max_size(big_cluster ,eps = E/2 ,max_size = S) //eps is something lower than E (e.g. E/2)