推荐算法(三):余弦定理和余弦相似度的关系及公式推导

简述:

  • 余弦相似度是在余弦定理的基础上引入向量表示后得到的。

以上面 余弦定理 的三角形为例,假设我们有两个向量:

  • 向量 b\mathbf{b}b,表示原点 A 指向点 C
  • 向量 c\mathbf{c}c,表示原点 A 指向点 B
text 复制代码
        A
       / \
      /   \
   b /     \ c
    /       \
   B_________C
        a

下面我们开始从余弦定理开始推导余弦相似度的公式:

为了表达更清晰,把两个向量写成二维坐标形式:

b=(x1,y1),c=(x2,y2)\mathbf{b} = (x_1, y_1), \quad \mathbf{c} = (x_2, y_2)b=(x1,y1),c=(x2,y2)

则它们的长度分别为:

∣b∣=x12+y12,∣c∣=x22+y22|\mathbf{b}| = \sqrt{x_1^2 + y_1^2}, \quad |\mathbf{c}| = \sqrt{x_2^2 + y_2^2}∣b∣=x12+y12 ,∣c∣=x22+y22

两向量终点之间的边长(图中的 aaa)可写为:

a2=(x1−x2)2+(y1−y2)2a^2 = (x_1 - x_2)^2 + (y_1 - y_2)^2a2=(x1−x2)2+(y1−y2)2

代入余弦定理:

cos⁡θ=∣b∣2+∣c∣2−a22∣b∣∣c∣ \cos\theta = \frac{|\mathbf{b}|^2 + |\mathbf{c}|^2 - a^2}{2|\mathbf{b}||\mathbf{c}|} cosθ=2∣b∣∣c∣∣b∣2+∣c∣2−a2

cos⁡θ=(x12+y12×x12+y12)+(x22+y22×x22+y22)−(x1−x2)2+(y1−y2)22×x12+y12×x22+y22 \cos\theta = \frac{(\sqrt{x_1^2 + y_1^2} \times \sqrt{x_1^2 + y_1^2}) + (\sqrt{x_2^2 + y_2^2} \times \sqrt{x_2^2 + y_2^2}) - (x_1 - x_2)\^2 + (y_1 - y_2)\^2}{2 \times \sqrt{x_1^2 + y_1^2} \times \sqrt{x_2^2 + y_2^2}} cosθ=2×x12+y12 ×x22+y22 (x12+y12 ×x12+y12 )+(x22+y22 ×x22+y22 )−(x1−x2)2+(y1−y2)2

cos⁡θ=(x12+y12)+(x22+y22)−(x1−x2)2+(y1−y2)22×x12+y12×x22+y22 \cos\theta = \frac{(x_1^2 + y_1^2) + (x_2^2 + y_2^2) - (x_1 - x_2)\^2 + (y_1 - y_2)\^2}{2 \times \sqrt{x_1^2 + y_1^2} \times \sqrt{x_2^2 + y_2^2}} cosθ=2×x12+y12 ×x22+y22 (x12+y12)+(x22+y22)−(x1−x2)2+(y1−y2)2

平方公式拆解:

(x1−x2)2+(y1−y2)2=(x12−2x1x2+x22)+(y12−2y1y2+y22)(x_1 - x_2)^2 + (y_1 - y_2)^2 = (x_1^2 - 2x_1x_2 + x_2^2) + (y_1^2 - 2y_1y_2 + y_2^2)(x1−x2)2+(y1−y2)2=(x12−2x1x2+x22)+(y12−2y1y2+y22)

所以,展开后可得:

cos⁡θ=(x12+y12)+(x22+y22)−x12−2x1x2+x22+y12−2y1y2+y222×x12+y12×x22+y22 \cos\theta = \frac{(x_1^2 + y_1^2) + (x_2^2 + y_2^2) - x_1\^2 - 2x_1x_2 + x_2\^2 + y_1\^2 - 2y_1y_2 + y_2\^2}{2 \times \sqrt{x_1^2 + y_1^2} \times \sqrt{x_2^2 + y_2^2}} cosθ=2×x12+y12 ×x22+y22 (x12+y12)+(x22+y22)−x12−2x1x2+x22+y12−2y1y2+y22

去括号并化简

cos⁡θ=(x12+y12)+(x22+y22)−x12+2x1x2−x22−y12+2y1y2−y222×x12+y12×x22+y22 \cos\theta = \frac{(x_1^2 + y_1^2) + (x_2^2 + y_2^2) - x_1^2 + 2x_1x_2 - x_2^2 - y_1^2 + 2y_1y_2 - y_2^2}{2 \times \sqrt{x_1^2 + y_1^2} \times \sqrt{x_2^2 + y_2^2}} cosθ=2×x12+y12 ×x22+y22 (x12+y12)+(x22+y22)−x12+2x1x2−x22−y12+2y1y2−y22

cos⁡θ=2x1x2+2y1y22×x12+y12×x22+y22 \cos\theta = \frac{2x_1x_2 + 2y_1y_2}{2 \times \sqrt{x_1^2 + y_1^2} \times \sqrt{x_2^2 + y_2^2}} cosθ=2×x12+y12 ×x22+y22 2x1x2+2y1y2

cos⁡θ=2(x1x2+y1y2)2×x12+y12×x22+y22 \cos\theta = \frac{2(x_1x_2 + y_1y_2)}{2 \times \sqrt{x_1^2 + y_1^2} \times \sqrt{x_2^2 + y_2^2}} cosθ=2×x12+y12 ×x22+y22 2(x1x2+y1y2)

cos⁡θ=x1x2+y1y2x12+y12×x22+y22 \cos\theta = \frac{x_1x_2 + y_1y_2}{\sqrt{x_1^2 + y_1^2} \times \sqrt{x_2^2 + y_2^2}} cosθ=x12+y12 ×x22+y22 x1x2+y1y2

cos⁡θ=b⋅c∣b∣⋅∣c∣ \cos\theta = \frac{b \cdot c}{|\mathbf{b}| \cdot |\mathbf{c}|} cosθ=∣b∣⋅∣c∣b⋅c

这就是常用的余弦相似度公式(二维形式)。

相关知识补充:

完全平方公式:

(a+b)2=a2+2ab+b2(a + b)^2 = a^2 + 2ab + b^2(a+b)2=a2+2ab+b2

(a−b)2=a2−2ab+b2(a - b)^2 = a^2 - 2ab + b^2(a−b)2=a2−2ab+b2

相关推荐
mingo_敏1 分钟前
DeepAgents : 检索(Retrieval)
人工智能·深度学习·langchain
微三云 - 廖会灵 (私域系统开发)7 分钟前
消费即资产:积分增值异业联盟商业模式完整拆解(附落地逻辑、合规方案与盈利模型)
大数据·人工智能
FL162386312913 分钟前
非机动车闯红灯电动摩托车闯红灯检测数据集VOC+YOLO格式1754张3类别
人工智能·yolo·机器学习
xiaohaiAIgeo13 分钟前
【2026年】通风柜快速风阀执行器的技术参数与选型:响应时间扭矩与寿命
人工智能·经验分享·科普知识
网络研究院27 分钟前
Cloudflare 推出 Precursor 行为监测系统,全会话追踪技术引爆 AI 机器人防御战与隐私新争议
网络·人工智能·机器人·系统·cloudflare·反爬虫
老白说数智化升级27 分钟前
从一次改善到持续进化,AI如何沉淀制造现场的运营知识?
大数据·人工智能·制造
Python私教32 分钟前
Django 接入 AI 大模型实战:从零做一个流式聊天网站
人工智能·python·django
Python私教36 分钟前
Django 接入 MCP 实战:让 AI 安全调用数据库和业务接口
人工智能·python·django
Python私教41 分钟前
Django 搭建 AI 本地知识库:文档上传、向量检索与智能问答
人工智能·python·django
会周易的程序员1 小时前
业力、死亡与共业:多智能体AI的终极形态不会是乌托邦
人工智能