推荐算法(二):核心概念——余弦定理 & 余弦相似度

余弦定理

  • 余弦定理是勾股定理在任意三角形中的推广。

公式分两类:

  • 求边长

    a2=b2+c2−2bc⋅cos⁡A a^2 = b^2 + c^2 - 2bc \cdot \cos A a2=b2+c2−2bc⋅cosA

    b2=a2+c2−2ac⋅cos⁡B b^2 = a^2 + c^2 - 2ac \cdot \cos B b2=a2+c2−2ac⋅cosB

    c2=a2+b2−2ab⋅cos⁡C c^2 = a^2 + b^2 - 2ab \cdot \cos C c2=a2+b2−2ab⋅cosC

  • 求角度

    cos⁡A=b2+c2−a22bc \cos A = \frac{b^2 + c^2 - a^2}{2bc} cosA=2bcb2+c2−a2

    cos⁡B=a2+c2−b22ac \cos B = \frac{a^2 + c^2 - b^2}{2ac} cosB=2aca2+c2−b2

    cos⁡C=a2+b2−c22ab \cos C = \frac{a^2 + b^2 - c^2}{2ab} cosC=2aba2+b2−c2

例题:在三角形 △ABC\triangle ABC△ABC 中,已知:

  • 边长 b = 5
  • 边长 c = 6
  • 夹角 A = 60°

问题:求第三条边 a 的长度是多少?

答:

a2=52+62−(2×5×6×12)a^2 = 5^2 + 6^2 - (2 \times 5 \times 6 \times \frac{1}{2})a2=52+62−(2×5×6×21)

a2=25+36−(60×12)a^2 = 25 + 36 - (60 \times \frac{1}{2})a2=25+36−(60×21)

a2=61−30a^2 = 61 - 30a2=61−30

a2=31a^2 = 31a2=31

a≈5.57a \approx 5.57a≈5.57

例题:在三角形 △ABC\triangle ABC△ABC 中,已知:

  • 边长 a = 4
  • 边长 b = 5
  • 边长 c = 6

问题:求 bc 夹角 A 的度数是多少?

答:

cos⁡A=52+62−422×5×6\cos A = \frac{5^2 + 6^2 - 4^2}{2 \times 5 \times 6}cosA=2×5×652+62−42

cos⁡A=4560\cos A = \frac{45}{60}cosA=6045

cos⁡A=34\cos A = \frac{3}{4}cosA=43

cos⁡A=0.75\cos A = 0.75cosA=0.75

结果:A≈41°或(30°<A<45°)A \approx 41° \quad 或 \quad (30° < A < 45°)A≈41°或(30°<A<45°)

余弦相似度

  • 公式:

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

  • 余弦相似度越大越相似(角度型指标)。

例题:某短视频 App 的视频标签包括 搞笑类、美女、知识类、科学类 。现在希望衡量不同用户之间的兴趣相似度。

为了便于计算,我们先把"用户对每个标签的偏好"量化成数值。这里用 0/1 表示是否喜欢(1=喜欢,0=不喜欢),统计如下:

用户 搞笑类 美女 知识类 科学类
用户A 1 1 0 0
用户B 1 0 1 0
用户C 0 1 1 1

根据公式,得出:

用户A和用户B:

  • 点积计算:

a⋅b=(1×1)+(1×0)+(0×1)+(0×0)=1 a \cdot b = (1\times1) + (1\times0) + (0\times1) + (0\times0) = 1 a⋅b=(1×1)+(1×0)+(0×1)+(0×0)=1

  • 范数(长度)计算:

∣a∣=12+12+02+02=2 |\mathbf{a}| = \sqrt{1^2+1^2+0^2+0^2} = \sqrt{2} ∣a∣=12+12+02+02 =2

∣b∣=12+02+12+02=2 |\mathbf{b}| = \sqrt{1^2+0^2+1^2+0^2} = \sqrt{2} ∣b∣=12+02+12+02 =2

∣c∣=02+12+12+12=3 |\mathbf{c}| = \sqrt{0^2 + 1^2 + 1^2 + 1^2} = \sqrt{3} ∣c∣=02+12+12+12 =3

  • 余弦相似度公式计算:

cos⁡θ=12⋅2=12=0.5 \cos\theta = \frac{1}{\sqrt{2} \cdot \sqrt{2}} = \frac{1}{2} = 0.5 cosθ=2 ⋅2 1=21=0.5

用户A和用户C:

cos⁡θ=12⋅3=12.44≈0.4 \cos\theta = \frac{1}{\sqrt{2} \cdot \sqrt{3}} = \frac{1}{2.44} \approx 0.4 cosθ=2 ⋅3 1=2.441≈0.4

用户B和用户C:

cos⁡θ=12⋅3=12.44≈0.4 \cos\theta = \frac{1}{\sqrt{2} \cdot \sqrt{3}} = \frac{1}{2.44} \approx 0.4 cosθ=2 ⋅3 1=2.441≈0.4

由此得出:用户A和用户B余弦相似度最大,因此A和B兴趣最为相似。

相关知识补充:

常见角度值:
角度 (θ\thetaθ) sin⁡θ\sin \thetasinθ cos⁡θ\cos \thetacosθ
0∘0^\circ0∘ 000 111
30∘30^\circ30∘ 12=0.5\frac{1}{2} = 0.521=0.5 32≈0.866\frac{\sqrt{3}}{2} \approx 0.86623 ≈0.866
45∘45^\circ45∘ 22≈0.707\frac{\sqrt{2}}{2} \approx 0.70722 ≈0.707 22≈0.707\frac{\sqrt{2}}{2} \approx 0.70722 ≈0.707
60∘60^\circ60∘ 32≈0.866\frac{\sqrt{3}}{2} \approx 0.86623 ≈0.866 12=0.5\frac{1}{2} = 0.521=0.5
90∘90^\circ90∘ 111 000
相关推荐
三毛的二哥9 小时前
BEV:典型BEV算法总结
人工智能·算法·计算机视觉·3d
南宫萧幕9 小时前
自控PID+MATLAB仿真+混动P0/P1/P2/P3/P4构型
算法·机器学习·matlab·simulink·控制·pid
故事和你9111 小时前
洛谷-数据结构1-4-图的基本应用1
开发语言·数据结构·算法·深度优先·动态规划·图论
我叫黑大帅11 小时前
为什么map查找时间复杂度是O(1)?
后端·算法·面试
炽烈小老头11 小时前
【每天学习一点算法 2026/04/20】除自身以外数组的乘积
学习·算法
skilllite作者12 小时前
AI agent 的 Assistant Auto LLM Routing 规划的思考
网络·人工智能·算法·rust·openclaw·agentskills
真·skysys12 小时前
On-Policy Distillation
人工智能·深度学习·机器学习
我是无敌小恐龙12 小时前
Java SE 零基础入门Day01 超详细笔记(开发前言+环境搭建+基础语法)
java·开发语言·人工智能·opencv·spring·机器学习
py有趣13 小时前
力扣热门100题之不同路径
算法·leetcode
_日拱一卒14 小时前
LeetCode:25K个一组翻转链表
算法·leetcode·链表