【发布时间】:2018-11-02 03:52:53
【问题描述】:
我在3D空间有以下几点:
我需要根据D_max 和d_max 对点进行分组:
D_max = max dimension of each group
d_max = max distance of points inside each group
像这样:
上图中组的形状看起来像一个盒子,但形状可以是分组算法输出的任何形状。
我正在使用 Python 并使用 Blender 可视化结果。我正在考虑使用scipy.spatial.KDTree 并调用它的query API,但是,我不确定这是否是适合手头工作的工具。我担心可能有一个我不知道的更好的工具。我很想知道是否有任何其他工具/库/算法可以帮助我。
正如@CoMartel 指出的,有DBSCAN 和HDBSCAN clustering 模块看起来很适合这类问题。但是,正如@Paul 所指出的,他们缺少与我的D_max 参数相关的集群最大大小的选项。我不确定如何向 DBSCAN 和 HDBSCAN 集群添加最大集群大小功能。
感谢@Anony-Mousse,我观看了Agglomerative Clustering: how it works 和Hierarchical Clustering 3: single-link vs. complete-link,并且正在研究Comparing Python Clustering Algorithms,我觉得这些算法的工作原理越来越清楚了。
【问题讨论】:
-
看起来 DBScan 可以做得更好:scikit-learn.org/stable/modules/generated/…
-
还有一个叫做 HDBScan 的衍生产品,有一些差异可能对你有好处
-
DBScan 只考虑
d_max而不是D_max(保持这篇文章的说法)。另外,我不确定 DBScan 的效果如何,因为大多数点似乎都在网格上,因此大多数最近的邻居将同样远。 -
如果你先应用 DBSCAN,集群内点的最大距离是多少(我们称之为
D)?这与您的目标D_max相比如何?您可能会发现目前D >> D_max,在这种情况下,您可能只想使用 DBSCAN 对您的点进行预聚类,然后使用其他算法对这些聚类进行分区以强制执行您的D_max标准(在我看来,这确实是更多的是packaging problem,而不是聚类问题)。 -
@CoMartel 您能否在 DBSCAN 和 HDBSCAN 上发布您的 cmets 作为答案,以便我可以接受并关闭已回答的问题。您对这两种算法的建议实际上解决了我的问题。
标签: python scikit-learn cluster-analysis dbscan