私は、用語に基づいて私の文書のtf-idfを計算しました。次に、用語の次元数を減らすためにLSAを適用しました。 'similarity_dist'には負の値が含まれます(下の表を参照)。余弦距離を0-1の範囲で計算するにはどうすればよいですか? cosine_distanceの範囲であろう故にコサイン類似度の負の値を扱う方法
cosine_distance = 1 - cosine_similarity
:として
tf_vectorizer = CountVectorizer(max_df=0.95, min_df=2, tokenizer=tokenize_and_stem, stop_words='english')
%time tf = tf_vectorizer.fit_transform(descriptions)
print(tf.shape)
svd = TruncatedSVD(100)
normalizer = Normalizer(copy=False)
lsa = make_pipeline(svd, normalizer)
tfidf_desc = lsa.fit_transform(tfidf_matrix_desc)
explained_variance = svd.explained_variance_ratio_.sum()
print("Explained variance of the SVD step: {}%".format(int(explained_variance * 100)))
similarity_dist = cosine_similarity(tfidf_desc)
pd.DataFrame(similarity_dist,index=descriptions.index, columns=descriptions.index).head(10)
print(tfidf_matrix_desc.min(),tfidf_matrix_desc.max())
#0.0 0.736443429828
print(tfidf_desc.min(),tfidf_desc.max())
#-0.518015429416 0.988306783341
print(similarity_dist.max(),similarity_dist.min())
#1.0 -0.272010919022
奇妙なを使用することができます。 Tfidfsは正であると予想されるため、余弦は0と1の間にあるはずです。正規化された行列のドット積であるため、余弦を計算しやすくするために通常正規化します。あなたのコードはコサインコールを表示しないし、あなたが述べたようにldaの代わりにsvdを使用しています。実際に使用しているコード全体を投稿できますか? – Rabbit
申し訳ありませんが、LDAではなくLSAを適用しました。私はコードを更新しました。 'tfidf_matrix_desc'の値は0〜1で、tfidf_descは負の値を含みます(print文を参照)。 – kitchenprinzessin