Scikit learn “余弦”度量在sklearn'中如何工作;s聚类算法?

Scikit learn “余弦”度量在sklearn'中如何工作;s聚类算法?,scikit-learn,metrics,dbscan,Scikit Learn,Metrics,Dbscan,我对sklearn的聚类算法中的cosine度量是如何工作的感到困惑。 例如,DBSCAN有一个参数eps,它指定了聚类时的最大距离。然而,更大的余弦相似性意味着两个向量更接近,这与我们的距离概念正好相反 我发现在成对度量中存在cosine\u相似性和cosine\u距离(只是1-cos()),当我们指定度量为cosine时,我们使用cosine\u相似性 那么,在进行聚类时,DBSCAN如何比较余弦_相似度和@parameps来确定两个向量是否具有相同的标签 一个例子 import numpy

我对sklearn的聚类算法中的
cosine
度量是如何工作的感到困惑。

例如,DBSCAN有一个参数
eps
,它指定了聚类时的最大距离。然而,更大的余弦相似性意味着两个向量更接近,这与我们的距离概念正好相反

我发现在成对度量中存在
cosine\u相似性
cosine\u距离
(只是
1-cos()
),当我们指定度量为
cosine
时,我们使用
cosine\u相似性

那么,在进行聚类时,DBSCAN如何比较余弦_相似度和@param
eps
来确定两个向量是否具有相同的标签

一个例子

import numpy as np from sklearn.cluster import DBSCAN samples = [[1, 0], [0, 1], [1, 1], [2, 2]] clf = DBSCAN(metric='cosine', eps=0.1) result = clf.fit_predict(samples) print(result) 将numpy作为np导入 从sklearn.cluster导入DBSCAN 样本=[[1,0]、[0,1]、[1,1]、[2,2]] clf=DBSCAN(公制='余弦',eps=0.1) 结果=clf.拟合和预测(样本) 打印(结果) 它输出[-1,-1,-1,-1],这意味着这四个点位于同一簇中

但是,

  • 对于点对
    [1,1],[2,2]

  • 其余弦_相似性为4/(4)=1
  • 余弦距离将为1-1=0,因此它们位于同一簇中
  • 对于点对
    [1,1],[1,0]

  • 其余弦_相似性为1/sqrt(2)
  • 余弦距离将为1-1/sqrt(2)=0.29289321881345254,该距离大于我们的
    eps
    0.1,为什么DBS可以将它们聚集到同一个簇中

感谢@Stanislas Morbieu的回答,我终于明白了
余弦
度量的意思是
余弦距离
,它是
1-余弦
在scikit learn中实现DBSCAN所依赖的(请参阅)

下面是一个示例,以了解它如何使用余弦度量:

import numpy as np
from sklearn.neighbors import NearestNeighbors

samples = [[1, 0], [0, 1], [1, 1], [2, 2]]
neigh = NearestNeighbors(radius=0.1, metric='cosine')
neigh.fit(samples) 

rng = neigh.radius_neighbors([[1, 1]])
print([samples[i] for i in rng[1][0]])
它输出
[[1,1],[2,2]]
,即在
0.1
半径内最接近
[1,1]
的点

因此,DBS中余弦距离小于eps的点可能位于同一簇中

DBSCAN的参数
minu samples
起着重要作用。由于默认设置为
5
,因此不能将任何点视为核心点。 将其设置为
1
,示例代码:

import numpy as np
from sklearn.cluster import DBSCAN

samples = [[1, 0], [0, 1], [1, 1], [2, 2]]

clf = DBSCAN(metric='cosine', eps=0.1, min_samples=1)

result = clf.fit_predict(samples)

print(result)
输出
[0 1 2]
,这意味着[1,1]和[2,2]在同一个集群中(编号为2)


顺便说一下,输出的
[-1,-1,-1,-1]
并不意味着点在同一个簇中,而是意味着所有点都不在簇中。

以及我应该如何调整我的
eps
参数谢谢你的回答。为了便于阅读,我在我的问题中添加了一些新信息。我根据您添加的示例更新了我的答案。非常感谢!我忽略了这个参数,现在我知道实际度量是
余弦距离(1-余弦)