原文地址:
http://www.puffinwarellc.com/index.php/news-and-articles/articles/30-singular-value-decomposition-tutorial.html
为什么svd能够解析矩阵背后的结构?
假设这是phil, tiger, vijar 三个人去打高尔夫, 打了9个洞, 每个人都打出了par
Hole | Par | Phil | Tiger | Vijay |
1 | 4 | 4 | 4 | 4 |
2 | 5 | 5 | 5 | 5 |
3 | 3 | 3 | 3 | 3 |
4 | 4 | 4 | 4 | 4 |
5 | 4 | 4 | 4 | 4 |
6 | 4 | 4 | 4 | 4 |
7 | 4 | 4 | 4 | 4 |
8 | 3 | 3 | 3 | 3 |
9 | 5 | 5 | 5 | 5 |
加入两个参数: 打球人能力参数 和 每洞难度系数
根据以上两个参数, 我们就可以计算 每洞的预测得分 = 打球人能力参数 * 每洞难度系数
| = |
| * |
|
根据这两个新添参数, 我们可以还原 原先计分板(矩阵)
数据家比较惹人烦, 所以他们要做 rescale
| = |
| * |
| * |
|
ps: holedifficulty = 左奇异向量 playerability = 右奇异向量
--------------------------------------------------------------------------------------------------------我是卖萌的分割线------------------------------------------------------------------------------------------------------
升级版
刚才的例子中, 我们用了一组参数, 但是实际中有无法用一组参数就能重构的矩阵存在
真实的score board
Hole | Par | Phil | Tiger | Vijay |
1 | 4 | 4 | 4 | 5 |
2 | 5 | 4 | 5 | 5 |
3 | 3 | 3 | 3 | 2 |
4 | 4 | 4 | 5 | 4 |
5 | 4 | 4 | 4 | 4 |
6 | 4 | 3 | 5 | 4 |
7 | 4 | 4 | 4 | 3 |
8 | 3 | 2 | 4 | 4 |
9 | 5 | 5 | 5 | 5 |
SVD 生成的hole difficulty & player ability, 这是在拥有一组参数情况下 最佳的拟合
生成过程: 有一组 hole difficulty 参数后, 问player ability应该怎么改针对预测分值, ->> 有一组 player ability 参数后, 问hole difficulty 应该怎么改针对预测分值 ->> 周而复始
| = |
| * |
|
现在将预测分值减去真实得分, 然后用第2组参数去拟合这个区别, 通过第2组参数对 第一组参数所拟合出的预测结果与真实结果的差距 进行弥补
| = |
| * |
|
--------------------------------------------------------------------------------------------------------我是卖萌的分割线------------------------------------------------------------------------------------------------------
最后 , 原 M*N 矩阵, 当 M>= N时, 可 生成N*N的矩阵
| = |
| * |
|
1-3 指 3组holeDifficulty & playerAbility 参数
rescaling 之后, 我们得到
| = |
| * |
| * |
|
总结, 说白了 svd 干了件 降维的工作, 并且在生成的 方阵中保存原矩阵的物理特性
PlayerAbility 1-3 | ||
Phil | Tiger | Vijay |
0.53 | 0.62 | 0.58 |
-0.82 | 0.20 | 0.53 |
-0.21 | 0.76 | -0.62 |
tiger 39 杆
vijay 36 杆
另外不难看出 方阵中 第一条vector 被赋予的原矩阵物理特性最大, 接下来的是为了 弥补 第一组player ability 未能完全覆盖的部分