摘要: 矩阵分解是使用数学应对机器学习问题的一类典型而巧妙的方法.
1. 基本概念
矩阵分解是把将一个 m × n m \times n m×n 矩阵 A \mathbf{A} A 分解为 m × k m \times k m×k 矩阵 B \mathbf{B} B 和 n × k n \times k n×k 矩阵 C \mathbf{C} C, 使得 A ≈ B C T \mathbf{A} \approx \mathbf{B}\mathbf{C}^{\mathsf{T}} A≈BCT, 其中 k ≪ min { m , n } k \ll \min\{m, n\} k≪min{m,n}.
有两种常见的情况:
- 非负矩阵分解 要求三个矩阵的元素均为非负值. 这样在其应用中才有良好的解释.
- 稀疏矩阵分解 要求 A \mathbf{A} A 为稀疏矩阵, 即其元素绝大多数值为 0.
2. 稀疏矩阵分解的应用: 推荐系统
问题引入: 电影网站有 m > 1 0 6 m > 10^6 m>106 个用户, 以及 n > 1 0 4 n > 10^4 n>104 部电影. 由于每个用户仅看了少量 (通常少于 1 0 3 10^3 103, 很多少于 1 0 2 10^2 102) 电影, 所以评分矩阵 R = ( r i j ) m × n \mathbf{R} = (r_{ij})_{m \times n} R=(rij)m×n 是一个稀疏矩阵, 其中 r i j = 0 r_{ij} = 0 rij=0 表示用户没看这部电影, 而 1 ∼ 5 1 \sim 5 1∼5 分表示从最不喜欢到最喜欢. 现在需要预测用户对电影的评分, 也就是将 0 0 0 替换成具体的分数.
问题定义:
- 输入: 评分矩阵 R \mathbf{R} R, 轶 k k k.
- 输出: 用户偏好矩阵 U ∈ R m × k \mathbf{U} \in \mathbb{R}^{m \times k} U∈Rm×k, 电影特征矩阵 V ∈ R n × k \mathbf{V} \in \mathbb{R}^{n \times k} V∈Rn×k.
- 优化目标:
min ∥ R − U V T ∥ 2 2 . . (1) \min \|\mathbf{R} - \mathbf{U}\mathbf{V}^{\mathsf{T}}\|_2^2. \tag{1}. min∥R−UVT∥22..(1)
这里计算优化目标的时候, r i j = 0 r_{ij} = 0 rij=0 的数据点并不参加计算. 这样, 当把两个小矩阵 (也称用户子空间与项目子空间, subspace) 求到后, 直接相乘 R ′ = U V T \mathbf{R}' = \mathbf{U}\mathbf{V}^{\mathsf{T}} R′=UVT, 以前 r i j = 0 r_{ij} = 0 rij=0 的地方, r i j ′ ≠ 0 r'_{ij} \neq 0 rij′=0就有了值, 这就是预测评分.
有没有觉得特别神奇?
给个小的例子 (等徐媛媛提供).
为了避免过拟合, 优化目标上还可以加上正则项, 如 [1]:
min ∥ R − U V T ∥ 2 2 + λ U ∥ U ∥ 2 2 + λ V ∥ V ∥ 2 2 . (2) \min \|\mathbf{R} - \mathbf{U}\mathbf{V}^{\mathsf{T}}\|_2^2 + \lambda_U \|\mathbf{U}\|_2^2 + \lambda_V \|\mathbf{V}\|_2^2. \tag{2} min∥R−UVT∥22+λU∥U∥22+λV∥V∥22.(2)
[1] Ruslan Salakhutdinov and Andriy Mnih, Probabilistic Matrix Factorization, NIPS, 2007.