[英]Python: String clustering with scikit-learn's dbscan, using Levenshtein distance as metric:
[英]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.