Ser*_*nin 3 python cluster-analysis data-mining dbscan scikit-learn
我有对象和距离函数,并希望使用DBSCAN方法聚类这些scikit-learn.我的物体在欧几里德空间中没有表示.我知道,可以使用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)
Run Code Online (Sandbox Code Playgroud)
不幸的是,它比...慢得多
labels = DBSCAN(eps=eps, min_samples=minpts, metric='euclidean').fit_predict(X)
Run Code Online (Sandbox Code Playgroud)
当你需要使用自己的距离函数时,我发现ELKI表现得更好.Java可以使用Hotspot JNI编译器将它们编译为接近本机代码的速度.Python(目前)无法做到这一点.
| 归档时间: |
|
| 查看次数: |
3874 次 |
| 最近记录: |