在scikit-learn中使用相似矩阵代替相似矩阵用于MDS

时间:2014-12-06 23:09:00

标签: python numpy matrix scikit-learn multi-dimensional-scaling

我希望将我正在使用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'。两者之间的区别是什么,因为当我给出欧几里德时,MDS坐标变得相同,无论我是使用cosine_similarity还是1-cosine_similarity看起来都不对。

谢谢!

1 个答案:

答案 0 :(得分:1)

我真的不明白你的余弦变换(因为我看不到余弦/角度),我不知道TfidfVectorizer的功能,但我会尝试回答你的两个问题:

1)通常,(不相似度= 1-相似度) - 方法对于矩阵中的所有条目都在-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 =相似度矩阵)方法。使用相异性='欧几里得'而是计算你传递给.fit(X =数据)的数据的欧几里德距离矩阵。

希望这有帮助!