【发布时间】:2015-12-21 02:57:47
【问题描述】:
我试图将 scikit-learn 库中的 DBSCAN 算法与余弦度量一起使用,但遇到了错误。 代码行是
db = DBSCAN(eps=1, min_samples=2, metric='cosine').fit(X)
其中X 是csr_matrix。错误如下:
度量“余弦”对算法“自动”无效,
虽然文档说可以使用此指标。
我尝试使用选项 algorithm='kd_tree' 和 'ball_tree' 但得到了相同的结果。但是,如果我使用euclidean 或者说l1 度量标准,则不会出现错误。
矩阵X 很大,所以我不能使用成对距离的预计算矩阵。
我使用python 2.7.6 和scikit-learn 0.16.1。
我的数据集没有一整行零,因此余弦度量是明确定义的。
【问题讨论】:
-
坦率地说,这可以说是 sklearn 中的一个错误。余弦相似度不是度量标准。它不遵守三角不等式,这就是为什么它不能与 KDTree 一起使用,你别无选择,只能强行使用它。所有这些都提出了一个问题,为什么当您将算法设置为“自动”时,它会尝试使用它应该知道它不能使用的方法。
-
@AdamAcosta:如果我理解正确,您是在争辩
'auto'algorithm-关键字应该使用'brute'而不是尝试使用'ball_tree'失败? (我同意。)
标签: scikit-learn cluster-analysis data-mining cosine-similarity dbscan