【发布时间】:2020-02-24 09:38:47
【问题描述】:
我很困惑cosine 指标在 sklearn 的聚类算法中是如何工作的。
例如DBSCAN有一个参数eps,它指定了聚类时的最大距离。然而,更大的余弦相似度意味着两个向量更接近,这与我们的distance 概念正好相反。
我发现pairwise_metric中有cosine_similarity和cosine_distance(只是1-cos()),当我们指定度量为cosine时,我们使用cosine_similarity。
那么,在聚类时,DBSCAN 是如何比较 cosine_similarity 和 @param eps 来判断两个向量是否具有相同的标签?
一个例子
将 numpy 导入为 np 从 sklearn.cluster 导入 DBSCAN 样本 = [[1, 0], [0, 1], [1, 1], [2, 2]] clf = DBSCAN(metric='cosine', eps=0.1) 结果 = clf.fit_predict(样本) 打印(结果)它输出 [-1, -1, -1, -1] 这意味着这四个点在同一个簇中
然而,
-
对于点对
[1,1], [2, 2],- 其 cosine_similarity 为 4/(4) = 1,
- 余弦距离为 1-1 = 0,因此它们在同一个簇中
-
对于点对
[1,1], [1,0],- 其 cosine_similarity 为 1/sqrt(2),
- 余弦距离将是1-1/sqrt(2) = 0.29289321881345254,这个距离比我们的
eps0.1还大,为什么DBSCAN将它们聚集到同一个簇中?
感谢@Stanislas Morbieu 的回答,我终于明白cosine 指标的意思是cosine_distance,即1-cosine
【问题讨论】:
-
我应该如何调整我的
eps参数
标签: scikit-learn metrics dbscan