余弦相似度与余弦距离

时间:2017-07-08 02:55:16

标签: python machine-learning nlp cluster-computing cluster-analysis

我有一组文件,如下例所示。

doc1 = {'Science': 0, 'History': 0, 'Politics': 0.15,... 'Sports': 0}
doc2 = {'Science': 0.3, 'History': 0.5, 'Politics': 0.1,... 'Sports': 0}

我使用上述向量使用DBSCAN对这些文档进行聚类(我的向量主要是稀疏向量)。我开始知道“余弦相似度”对稀疏矢量的计算非常有效。但是,根据sklearn.DBSCAN适合文档,您应该使用距离矩阵作为DBSCAN的输入。因此,如果我使用“余弦相似度”而不是“余弦距离”,我想知道它是否错了。

请告诉我什么是最适合我的问题的方法。使用余弦相似度使用余弦距离 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'))

1 个答案:

答案 0 :(得分:0)

如果你传递距离矩阵,它将是O(n²)。

如果传递实际数据,代码可以使用索引使其快于此速度。所以我宁愿尝试metric="cosine"

DBSCAN可以通过相似性而不是距离(例如广义DBSCAN)来实现。我相信我在ELKI中看到了这一点,但不是在sklearn中。在sklearn中,您可以使用cosine_distance上述缺点。