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

余弦定理

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

公式分两类:

  • 求边长

    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
相关推荐
闻道且行之15 小时前
TurboOCR:基于PP-OCRv6的极速Windows离线OCR工具,深度解析3.4GB依赖背后的技术架构
c++·人工智能·python·qt·机器学习·ocr
QXWZ_IA17 小时前
1库1图1批是什么?千寻位置公安地图数据体系详解
科技·算法·能源·媒体·交通物流·政务
c2385618 小时前
Bug 猎手入门指南
c++·算法·bug
Reart19 小时前
Leetcode 213.打家劫舍2(内含闲谈,打劫真是技术活,好题,716)
后端·算法
数聚天成DeepSData19 小时前
遥感农业数据集下载全攻略
数据库·人工智能·深度学习·机器学习·自然语言处理·数据挖掘
Reart19 小时前
Leetcode 198.打家劫舍(716)
后端·算法
Jerry20 小时前
LeetCode 110. 平衡二叉树
算法
汤姆小白20 小时前
08-应用部署
人工智能·python·机器学习·numpy·transformer
玖玥拾20 小时前
C++ 数据结构 八大基础排序算法专题
数据结构·c++·算法·排序算法