我很困惑cosine
指标在sklearn的聚类算法中如何工作。
例如,DBSCAN具有参数eps
,并且它在聚类时指定了最大距离。但是,更大的余弦相似度意味着两个向量更接近,这与我们的distance
概念正好相反。
我发现pairwise_metric中有cosine_similarity
和cosine_distance
(只是1-cos()
,当我们指定度量为cosine
时,我们使用cosine_similarity
。
因此,在聚类时,DBSCAN如何比较余弦相似度和@param eps
以确定两个向量是否具有相同标签?
[scikit-learn中的DBSCAN的实现依赖于NearestNeighbors(请参阅implementation of 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]]
,即,在[1, 1]
半径内最接近0.1
的点。
因此,余弦距离小于DBSCAN中的eps
的点往往在同一簇中。