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

余弦定理

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

公式分两类:

  • 求边长

    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
相关推荐
liuyao_xianhui2 小时前
优选算法_锯齿形层序遍历二叉树_队列_C++
java·开发语言·数据结构·c++·算法·链表
智算菩萨2 小时前
GPT-5.4 进阶思考模式全面解析:从推理等级到实战提示词,代码、论文、数据处理一站通
人工智能·gpt·深度学习·机器学习·语言模型·自然语言处理·chatgpt
秃头狂魔2 小时前
【HOT100】DAY2
python·算法
枫叶林FYL2 小时前
【自然语言处理 NLP】 大语言模型(LLM)系统工程(Large Language Model Engineering)5.1.2 ZeRO与显存优化技术
人工智能·深度学习·机器学习
想带你从多云到转晴2 小时前
03、数据结构与算法--单向链表
java·数据结构·算法
mjhcsp2 小时前
AT_arc205_c [ARC205C] No Collision Moves 题解
开发语言·c++·算法·题解
Yzzz-F2 小时前
Problem - 1114C - Codeforces[勒让德公式]
算法
龙文浩_2 小时前
AI机器学习中NumPy随机种子的应用
人工智能·python·深度学习·神经网络·机器学习
AI先驱体验官2 小时前
数字人时代来临:实时互动数字人解决方案深度解析
大数据·网络·人工智能·深度学习·机器学习·重构·实时互动