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