返回
余弦相似度几何解释与3D可视化教程
python
2024-11-07 23:48:09
余弦相似度的几何解释与可视化
理解余弦相似度不仅仅是计算数值,更重要的是理解其几何意义。本文将探讨如何将文档向量化并在三维空间中进行可视化,从而更直观地理解余弦相似度。
向量化与余弦相似度
文本向量化是将文本转换成数值向量的过程。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)
操作步骤:
- 导入必要的库,包括
TfidfVectorizer
、cosine_similarity
、PCA
、matplotlib.pyplot
和numpy
。 - 创建示例文档列表。
- 使用
TfidfVectorizer
将文档转换为 TF-IDF 向量。 - 使用
PCA
将高维 TF-IDF 向量降维到三维。.toarray()
是必要的,因为PCA需要稠密矩阵作为输入。 - 使用
matplotlib.pyplot
绘制三维向量图,每个向量代表一个文档,从原点指向其在三维空间中的坐标。 - 打印余弦相似度矩阵,展示文档两两之间的相似度。
解读结果
通过可视化,可以直观地看到文档向量在三维空间中的分布以及它们之间的夹角。夹角越小,余弦相似度越高。打印出的余弦相似度矩阵也提供了量化的相似度数值。
安全建议
- 注意数据的维度。如果文档数量少于三个,降维到三维空间可能会导致信息丢失。在这种情况下,可以考虑降维到二维空间。
- PCA 降维会损失一部分信息。虽然保留了尽可能多的方差,但仍需注意这可能对结果产生的影响. 可通过查看PCA的 explained_variance_ratio_ 属性来评估保留的方差比例.
通过结合 TF-IDF 向量化、PCA 降维和三维可视化,可以更深入地理解余弦相似度的几何含义,并对文档之间的相似性进行更直观的分析。 这对于文本分析、信息检索等领域都非常有价值.