Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 余弦相似性与余弦距离_Python_Machine Learning_Nlp_Cluster Computing_Cluster Analysis - Fatal编程技术网

Python 余弦相似性与余弦距离

Python 余弦相似性与余弦距离,python,machine-learning,nlp,cluster-computing,cluster-analysis,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 fit文档,您应该使用

我有一组文档,如下例所示

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 fit文档,您应该使用距离矩阵作为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'))

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

如果您传递实际数据,代码可以使用索引使其比此更快。所以我宁愿尝试
metric=“cosine”


DBSCAN可以通过相似性而不是距离来实现(c.f.广义DBSCAN)。我相信我在ELKI中看到了这一点,但在sklearn中没有看到。在sklearn中,您可以使用具有上述缺点的
余弦距离

谢谢您的回答:)您的意思是我们不能在sklearn中的DBSCAN实现中使用余弦相似性?您可以简单地使用余弦距离而不是相似性。你的ε需要是余弦距离,而不是余弦相似性。但我不认为这是“不可能的”…我们可以使用
db=DBSCAN(minu samples=1,metric='precomputed').fit(成对距离(特征矩阵,metric='cosine')
DBSCAN的minu samples
应该大于2,否则它不是基于密度的。我看不到预计算距离矩阵的任何好处。使用
metric=“cosine”
,sklearn中的DBSCAN实现甚至可以做到这一点。但是距离矩阵需要O(n²)内存,也就是说,它的伸缩性不好。为什么要强迫它使用一种不好的方法?让DBSCAN函数来决定。请注意,问题是关于余弦距离与余弦相似性。您建议的代码也是距离,而不是相似性。Sklearn已经可以使用余弦距离进行DBSCAN,但不能使用相似性。