余弦相似度与余弦距离
Cosine similarity vs Cosine distance
我有一组文档,如下例所示。
doc1 = {'Science': 0, 'History': 0, 'Politics': 0.15,... 'Sports': 0}
doc2 = {'Science': 0.3, 'History': 0.5, 'Politics': 0.1,... 'Sports': 0}
我使用上述向量(我的向量主要是稀疏向量)使用 DBSCAN 对这些文档进行了聚类。我了解到 'cosine similarity' 对于稀疏向量的计算非常有效。但是,根据 sklearn.DBSCAN 拟合文档,您应该使用距离矩阵作为 DBSCAN 的输入。因此,我想知道如果我使用 'cosine similarity' 而不是 'cosine distance'.
是否错误
请让我知道最适合我的问题的方法是什么。是DBSCAN使用余弦距离还是DBSCAN使用余弦相似度?
# Fit DBSCAN using cosine distance
db = DBSCAN(min_samples=1, metric='precomputed').fit(pairwise_distances(feature_matrix, metric='cosine'))
或
# Fit DBSCAN using cosine similarity
db = DBSCAN(min_samples=1, metric='precomputed').fit(1-pairwise_distances(feature_matrix, metric='cosine'))
如果你传递一个距离矩阵,它将是 O(n²)。
如果传递实际数据,代码可以使用索引使其比这更快。所以我宁愿尝试 metric="cosine"
.
DBSCAN 可以简单地用相似性而不是距离来实现(c.f。广义 DBSCAN)。我相信我在 ELKI 中看到了这个支持,但在 sklearn 中没有。在 sklearn 中,您可以使用具有上述缺点的 cosine_distance
。
我有一组文档,如下例所示。
doc1 = {'Science': 0, 'History': 0, 'Politics': 0.15,... 'Sports': 0}
doc2 = {'Science': 0.3, 'History': 0.5, 'Politics': 0.1,... 'Sports': 0}
我使用上述向量(我的向量主要是稀疏向量)使用 DBSCAN 对这些文档进行了聚类。我了解到 'cosine similarity' 对于稀疏向量的计算非常有效。但是,根据 sklearn.DBSCAN 拟合文档,您应该使用距离矩阵作为 DBSCAN 的输入。因此,我想知道如果我使用 'cosine similarity' 而不是 'cosine distance'.
是否错误请让我知道最适合我的问题的方法是什么。是DBSCAN使用余弦距离还是DBSCAN使用余弦相似度?
# Fit DBSCAN using cosine distance
db = DBSCAN(min_samples=1, metric='precomputed').fit(pairwise_distances(feature_matrix, metric='cosine'))
或
# Fit DBSCAN using cosine similarity
db = DBSCAN(min_samples=1, metric='precomputed').fit(1-pairwise_distances(feature_matrix, metric='cosine'))
如果你传递一个距离矩阵,它将是 O(n²)。
如果传递实际数据,代码可以使用索引使其比这更快。所以我宁愿尝试 metric="cosine"
.
DBSCAN 可以简单地用相似性而不是距离来实现(c.f。广义 DBSCAN)。我相信我在 ELKI 中看到了这个支持,但在 sklearn 中没有。在 sklearn 中,您可以使用具有上述缺点的 cosine_distance
。