使用python中的matplotlib绘制相似性度量

时间:2014-12-23 10:30:02

标签: python matplotlib visualization similarity

我正在研究项目,使用tf-idf measure来查找两个句子/文档之间的相似性。

我尝试了以下示例代码:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity  

documents = (
"The sky is blue",
"The sun is bright"
)
tfidf_vectorizer = TfidfVectorizer()
tfidf_matrix = tfidf_vectorizer.fit_transform(documents)
cosine = cosine_similarity(tfidf_matrix[0:1], tfidf_matrix)
print cosine

两个句子之间的相似性是

[[ 1.          0.33609693]]

现在我的问题是如何以图形/可视化格式显示相似性。 类似于维恩图,其中交叉值成为相似性度量或matplotlib或任何python库中可用的任何其他图。

先谢谢

1 个答案:

答案 0 :(得分:2)

对Venn图最简单的方法是绘制两个半径为r且距离为d = 2 * r * (1 - cosine[0][i])的圆,其中i是您要比较的线索引。如果句子相同,则为d == 0 is True,即两个圆都相同。如果这两个句子没有任何共同之处,那么你有d == 2*r is True,那么圆圈是分离的(它们在一个点上触摸)。

The code to draw circles is already present in StackOverflow.

编辑: 这种方法从代码的输出中绘制出一个维恩图:

## import matplotlib for plotting the Venn diagram
import matplotlib.pyplot as plt

## output of your first part
cosine = [[ 1., 0.33609693]]

## set constants
r = 1
d = 2 * r * (1 - cosine[0][1])

## draw circles
circle1=plt.Circle((0, 0), r, alpha=.5)
circle2=plt.Circle((d, 0), r, alpha=.5)
## set axis limits
plt.ylim([-1.1, 1.1])
plt.xlim([-1.1, 1.1 + d])
fig = plt.gcf()
fig.gca().add_artist(circle1)
fig.gca().add_artist(circle2)
## hide axes if you like
# fig.gca().get_xaxis().set_visible(False)
# fig.gca().get_yaxis().set_visible(False)
fig.savefig('venn_diagramm.png')

绘制圆圈时设置alpha值会使它们显示为半透明。因此,重叠是圆的非重叠部分的两倍不透明。