gpt4 book ai didi

python - 在 scikit-learn 中对 MDS 使用相似矩阵而不是相异矩阵

转载 作者:太空宇宙 更新时间:2023-11-04 05:56:49 24 4
gpt4 key购买 nike

我想将我正在使用 scikit-learn 的 TfidfVectorizer 的文本文档的相似性可视化为 tfidf = TfidfVectorizer(decode_error='ignore', max_df=3).fit_transform(data)

然后执行余弦相似度计算为 cosine_similarity = (tfidf*tfidf.T).toarray()

它给出了相似性,但是 sklearn.manifold.MDS 需要一个相异矩阵。当我给出 1-cosine_similarity 时,应该为零的对角线值不为零。它们是一些小值,如 1.12e-9 等。两个问题:

1) 如何为 MDS 使用相似矩阵或如何将相似矩阵更改为相异矩阵?

2)在MDS中,有一个选项dissimilarity,其值可以是'precomputed''euclidean'。两者之间有什么区别,因为当我给出欧几里得时,无论我使用 cosine_similarity 还是 1-cosine_similarity,MDS 坐标都会变得相同,这看起来是错误的。

谢谢!

最佳答案

我不太了解您的余弦变换(因为我没有看到涉及余弦/角度/归一化标量积)并且我不知道 TfidfVectorizer 的功能,但我会尝试回答您的两个问题:

1) 一般来说,(dissimilarity = 1-similarity)-approach 对于矩阵中所有元素都在-1和1之间的情况是有效的。假设距离矩阵d = cosine_similarity是这样一个对称的距离矩阵您可以应用到数字人工制品

dissimilarity_clean = 1 - np.triu(d)+np.triu(d).T-np.diag(np.ones(len(d)))

纠正人工制品。使用 numpys corrcoef(X) 创建基于 Pearson 相关系数的差异矩阵时,可能需要相同的操作。两个侧节点: 1. 对于无界相似性度量,您仍然可以提出等效方法。 2. 在使用 MDS 的情况下,您可能会考虑使用更接近欧几里得距离(且不受限制)的度量,因为这对于 MDS 来说是更自然的选择,并且会带来更好的结果。

2) 使用“预计算”选项假定您将 MDS 的 .fit(X=dissimilarity matrix) 方法与您预先计算的相异矩阵(您的场景)一起提供。使用 dissimilarity = 'euclidean' 将计算您传递给 .fit(X=data) 的数据的欧氏距离矩阵。

希望这对您有所帮助!

关于python - 在 scikit-learn 中对 MDS 使用相似矩阵而不是相异矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27337610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com