他们发现后,在集群附近/内部有效过滤 - python

时间:2016-09-06 19:31:44

标签: python scikit-learn cluster-computing dbscan

基本上我在原始数据的子集上应用了一个DBSCAN算法(sklearn)和欧氏距离。我找到了我的集群,一切都很好:除了我想保留的值远远超过我没有进行分析的值。我有一个新的距离来测试这些新东西,我想了解如何做到没有多个嵌套循环。

在图片中:

enter image description here

我发现的星团是蓝色的,而红色的是我不想靠近的点。十字架是属于簇的点,它们在我指定的新距离内被雕刻出来。

现在,我可以做同样的事情:

for i in red_points:
    for j in blu_points:
        if dist(i,j) < given_dist:
            original_dataframe.remove(j)

我拒绝相信没有矢量化方法。另外,我不能仅仅因为我将拥有巨大的表格来操作,我想避免我的CPU蒸发掉。

欢迎任何和所有建议

2 个答案:

答案 0 :(得分:1)

如果您需要确切的答案,最快的实施应该是sklearn的成对距离计算器: http://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.pairwise_distances.html

如果你能接受一个近似的答案,你可以用kd树的queryradius()做得更好:http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KDTree.html

答案 1 :(得分:1)

当然你可以对此进行矢量化,但它仍然是O(n * m)。更好的邻居搜索算法不是矢量化的。例如kd-tree和ball-tree。

两者都可以在sklearn中使用,并由DBSCAN模块使用。请参阅sklearn.neighbors包。