如何处理余弦相似性的负值

2024-05-12 19:07:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我根据条款计算了我文件的tf-idf。然后,我应用LSA来降低术语的维数“相似性分布”包含负值(见下表)。如何计算0-1范围内的余弦距离?

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

enter image description here


Tags: indexdisttfminmatrixdescmaxtfidf
1条回答
网友
1楼 · 发布于 2024-05-12 19:07:31

余弦相似性在-1到1之间

余弦距离定义为:

cosine_distance = 1 - cosine_similarity 

因此余弦距离将在0到2的范围内

https://en.wikipedia.org/wiki/Cosine_similarity

余弦距离是一个常用于正空间补语的术语,即:D_C(a,B)=1-S_C(a,B)。

注意:如果必须在0到1之间,则可以使用余弦距离/2

相关问题 更多 >