繁体   English   中英

scikit-learn 中的 DBSCAN(仅使用公制)

[英]DBSCAN (with metric only) in scikit-learn

我有对象和距离 function,并且想在scikit-learn中使用DBSCAN方法对这些进行聚类。 我的对象在欧几里得空间中没有表示。 我知道,可以使用precomputed的度量,但在我的例子中,这是非常不切实际的,因为距离矩阵很大。 scikit-learn中有什么办法可以克服这个问题吗? 也许,DBSCAN 的另一个 python 实现可以这样做吗?

scikit-learn支持各种各样的指标。

其中一些可以使用kdtree(非常快),使用球树(快速),使用预先计算的距离矩阵(快速,但需要大量内存)或没有预计算但Cython实现(二次运行时)甚至python回调来加速(非常慢)。

最后一个选项已实施,但速度极慢:

def mydistance(x,y):
  return numpy.sum((x-y)**2)

labels = DBSCAN(eps=eps, min_samples=minpts, metric=mydistance).fit_predict(X)

不幸的是,它比...慢得多

labels = DBSCAN(eps=eps, min_samples=minpts, metric='euclidean').fit_predict(X)

当你需要使用自己的距离函数时,我发现ELKI表现得更好。 Java可以使用Hotspot JNI编译器将它们编译为接近本机代码的速度。 Python(目前)无法做到这一点。

我写了自己的距离代码参考了最佳答案,就像它说的那样,它非常慢,内置的距离代码要好得多。 我想知道如何加快速度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM