返回

余弦相似度几何解释与3D可视化教程

python

余弦相似度的几何解释与可视化

理解余弦相似度不仅仅是计算数值,更重要的是理解其几何意义。本文将探讨如何将文档向量化并在三维空间中进行可视化,从而更直观地理解余弦相似度。

向量化与余弦相似度

文本向量化是将文本转换成数值向量的过程。TF-IDF(词频-逆文档频率)是一种常用的向量化方法,它考虑了词语在文档和整个语料库中的重要性。两个文档的余弦相似度则是它们向量化后向量之间夹角的余弦值。值越接近 1,表示两个文档越相似;值越接近 0,则表示两个文档越不相似。

三维可视化:降维与绘图

由于 TF-IDF 向量通常维度很高(词汇量大小),直接在高维空间可视化比较困难。因此,我们需要先将高维向量降维到三维,然后再进行绘图。

使用 PCA 降维

主成分分析(PCA)是一种常用的降维方法,它可以将高维数据投影到低维空间,同时尽可能保留数据的方差信息。

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import numpy as np

# 示例文档
documents = [
    "This is a sample document.",
    "This document is another example.",
    "Yet another document about something else."  # 添加第三个文档以更好地展示
]

# 向量化
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(documents)

# 使用PCA降维到3维
pca = PCA(n_components=3)
tfidf_3d = pca.fit_transform(tfidf_matrix.toarray()) 

# 绘制向量
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

for i, vec in enumerate(tfidf_3d):
    ax.quiver(0, 0, 0, vec[0], vec[1], vec[2], color=f'C{i}') # 使用不同颜色区分向量
    ax.text(vec[0], vec[1], vec[2], f"Doc {i+1}")  # 添加文档标签

ax.set_xlabel('Dimension 1')
ax.set_ylabel('Dimension 2')
ax.set_zlabel('Dimension 3')
ax.set_title('3D Visualization of Document Vectors')

plt.show()

# 计算并打印余弦相似度
cosine_sim = cosine_similarity(tfidf_matrix)
print("Cosine Similarity Matrix:\n", cosine_sim)

操作步骤:

  1. 导入必要的库,包括 TfidfVectorizercosine_similarityPCAmatplotlib.pyplotnumpy
  2. 创建示例文档列表。
  3. 使用 TfidfVectorizer 将文档转换为 TF-IDF 向量。
  4. 使用 PCA 将高维 TF-IDF 向量降维到三维。 .toarray() 是必要的,因为PCA需要稠密矩阵作为输入。
  5. 使用 matplotlib.pyplot 绘制三维向量图,每个向量代表一个文档,从原点指向其在三维空间中的坐标。
  6. 打印余弦相似度矩阵,展示文档两两之间的相似度。

解读结果

通过可视化,可以直观地看到文档向量在三维空间中的分布以及它们之间的夹角。夹角越小,余弦相似度越高。打印出的余弦相似度矩阵也提供了量化的相似度数值。

安全建议

  • 注意数据的维度。如果文档数量少于三个,降维到三维空间可能会导致信息丢失。在这种情况下,可以考虑降维到二维空间。
  • PCA 降维会损失一部分信息。虽然保留了尽可能多的方差,但仍需注意这可能对结果产生的影响. 可通过查看PCA的 explained_variance_ratio_ 属性来评估保留的方差比例.

通过结合 TF-IDF 向量化、PCA 降维和三维可视化,可以更深入地理解余弦相似度的几何含义,并对文档之间的相似性进行更直观的分析。 这对于文本分析、信息检索等领域都非常有价值.