2014-12-06 128 views
2

我希望顯示的文本文檔的相似性我使用這scikit學習的TfidfVectorizer爲tfidf = TfidfVectorizer(decode_error='ignore', max_df=3).fit_transform(data)使用相似矩陣,而不是在相似矩陣爲MDS scikit學習

,然後進行餘弦相似度計算作爲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

我真的不明白你的餘弦變換(因爲我知道沒有餘弦/角度參與),我不知道TfidfVectorizer功能,但我會盡量回答你的兩個問題:

1)一般的(異性= 1相似)-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 ='euclidean'來代替傳遞給.fit(X = data)的數據的歐氏距離矩陣。

希望這會有所幫助!