第十八章 番外 余弦相似度

余弦相似度(Cosine Similarity)是一种衡量两个非零向量之间角度的度量方式,用于评估它们之间的相似性。它的值范围从 -1 到 1,其中 1 表示完全相同的方向(即向量完全相同),0 表示正交(没有相似性),而 -1 表示完全相反的方向。

假设我们有两个向量 A 和 B,它们的余弦相似度可以通过以下公式计算:

\\text{similarity} = \\cos(\\theta) = \\frac{\\mathbf{A} \\cdot \\mathbf{B}}{\|\\mathbf{A}\| \|\\mathbf{B}\|}

其中:

  • \\mathbf{A} \\cdot \\mathbf{B} 是向量 A 和 B 的点积(内积)。
  • \|\\mathbf{A}\| 和 和 和 \|\\mathbf{B}\| 分别是向量 A 和 B 的模长(长度)。

具体来说:

  • 点积(内积) \\mathbf{A} \\cdot \\mathbf{B} = \\sum_{i=1}\^{n} A_i B_i ,其中 (n) 是向量的维度。
  • 模长(长度) \|\\mathbf{A}\| = \\sqrt{\\sum_{i=1}{n} A_i\^2}

公式可以进一步展开为:

\\text{similarity} = \\frac{\\sum\\limits_{i=1}\^{n} A_i B_i}{\\sqrt{\\sum\\limits_{i=1}\^{n} A_i\^2} \\sqrt{\\sum\\limits_{i=1}\^{n} B_i\^2}}

示例计算

假设我们有两个向量 A 和 B,其中:

  • \\mathbf{A} = \[1, 2, 3\]
  • \\mathbf{B} = \[4, 5, 6\]

我们可以按照上述公式计算它们之间的余弦相似度:

  1. 点积
    \\mathbf{A} \\cdot \\mathbf{B} = 14 + 25 + 3\*6 = 4 + 10 + 18 = 32
  2. 模长
    • \|\\mathbf{A}\| = \\sqrt{12 + 22 + 3\^2} = \\sqrt{1 + 4 + 9} = \\sqrt{14}
    • \|\\mathbf{B}\| = \\sqrt{42 + 52 + 6\^2} = \\sqrt{16 + 25 + 36} = \\sqrt{77}
  3. 余弦相似度
    \\text{similarity} = \\frac{32}{\\sqrt{14} \\sqrt{77}} = \\frac{32}{\\sqrt{1078}}

我们可以使用 Python 来计算这个值:

python 复制代码
import numpy as np

# 定义两个向量
vector_a = np.array([1, 2, 3])
vector_b = np.array([4, 5, 6])

# 计算点积
dot_product = np.dot(vector_a, vector_b)

# 计算模长
norm_a = np.linalg.norm(vector_a)
norm_b = np.linalg.norm(vector_b)

# 计算余弦相似度
cosine_similarity = dot_product / (norm_a * norm_b)

print("Cosine similarity:", cosine_similarity)
相关推荐
2401_878624798 小时前
pytorch 自动微分
人工智能·pytorch·python·机器学习
胖达不服输8 小时前
「日拱一码」021 机器学习——特征工程
人工智能·python·机器学习·特征工程
小哥谈9 小时前
论文解析篇 | YOLOv12:以注意力机制为核心的实时目标检测算法
人工智能·深度学习·yolo·目标检测·机器学习·计算机视觉
蓝婷儿10 小时前
Python 机器学习核心入门与实战进阶 Day 4 - 支持向量机(SVM)原理与分类实战
python·机器学习·支持向量机
杰夫贾维斯10 小时前
CentOS Linux 8 的系统部署 Qwen2.5-7B -Instruct-AWQ
linux·运维·人工智能·机器学习·centos
yzx99101311 小时前
AI大模型平台
大数据·人工智能·深度学习·机器学习
盛寒12 小时前
向量空间 线性代数
python·线性代数·机器学习
Better Rose12 小时前
人工智能与机器学习暑期科研项目招募(可发表论文)
人工智能·深度学习·机器学习·论文撰写
神经星星13 小时前
在线教程丨一句话精准P图,FLUX.1 Kontext可实现图像编辑/风格迁移/文本编辑/角色一致性编辑
人工智能·深度学习·机器学习
九章云极AladdinEdu16 小时前
华为昇腾NPU与NVIDIA CUDA生态兼容层开发实录:手写算子自动转换工具链(AST级代码迁移方案)
人工智能·深度学习·opencv·机器学习·华为·数据挖掘·gpu算力