singular value decomposition tutorial

原文地址:

http://www.puffinwarellc.com/index.php/news-and-articles/articles/30-singular-value-decomposition-tutorial.html


为什么svd能够解析矩阵背后的结构?


假设这是phil, tiger, vijar 三个人去打高尔夫, 打了9个洞, 每个人都打出了par

HoleParPhilTigerVijay
14444
25555
33333
44444
54444
64444
74444
83333
95555

加入两个参数:  打球人能力参数  和  每洞难度系数

根据以上两个参数, 我们就可以计算   每洞的预测得分 = 打球人能力参数  *  每洞难度系数

PhilTigerVijay
444
555
333
444
444
444
444
333
555
=
HoleDifficulty
4
5
3
4
4
4
4
3
5
*
PlayerAbility
PhilTigerVijay
111


根据这两个新添参数, 我们可以还原 原先计分板(矩阵)


数据家比较惹人烦, 所以他们要做 rescale

PhilTigerVijay
444
555
333
444
444
444
444
333
555
=

HoleDifficulty
0.33
0.41
0.25
0.33
0.33
0.33
0.33
0.25
0.41
*

ScaleFactor
21.07
*

PlayerAbility
PhilTigerVijay
0.580.580.58
因为rescaling, 导致又新添了个参数 scale factor, 但实际上是物理意义最小的一个参数

ps: holedifficulty  = 左奇异向量     playerability = 右奇异向量


--------------------------------------------------------------------------------------------------------我是卖萌的分割线------------------------------------------------------------------------------------------------------

升级版

刚才的例子中, 我们用了一组参数, 但是实际中有无法用一组参数就能重构的矩阵存在


真实的score board

HoleParPhilTigerVijay
14445
25455
33332
44454
54444
64354
74443
83244
95555


SVD 生成的hole difficulty & player ability, 这是在拥有一组参数情况下 最佳的拟合

生成过程: 有一组 hole difficulty 参数后, 问player ability应该怎么改针对预测分值, ->> 有一组 player ability 参数后, 问hole difficulty 应该怎么改针对预测分值 ->> 周而复始

 
PhilTigerVijay
3.954.644.34
4.275.024.69
2.422.852.66
3.974.674.36
3.644.284.00
3.694.334.05
3.333.923.66
3.083.633.39
4.555.355.00
=
HoleDifficulty
4.34
4.69
2.66
4.36
4.00
4.05
3.66
3.39
5.00
*
PlayerAbility
PhilTigerVijay
0.911.071.00



现在将预测分值减去真实得分, 然后用第2组参数去拟合这个区别, 通过第2组参数对 第一组参数所拟合出的预测结果与真实结果的差距 进行弥补

PhilTigerVijay
0.05-0.640.66
-0.28-0.020.31
0.580.15-0.66
0.030.33-0.36
0.36-0.280.00
-0.690.67-0.05
0.670.08-0.66
-1.080.370.61
0.45-0.350.00
=
HoleDifficulty2
-0.18
-0.38
0.80
0.15
0.35
-0.67
0.89
-1.29
0.44
*
PlayerAbility2
PhilTigerVijay
0.82-0.20-0.53


--------------------------------------------------------------------------------------------------------我是卖萌的分割线------------------------------------------------------------------------------------------------------

最后 , 原 M*N 矩阵,  当 M>= N时,  可 生成N*N的矩阵

PhilTigerVijay
445
455
332
454
444
354
443
244
555
=

HoleDifficulty 1-3
4.34-0.18-0.90
4.69-0.38-0.15
2.660.800.40
4.360.150.47
4.000.35-0.29
4.05-0.670.68
3.660.890.33
3.39-1.290.14
5.000.44-0.36
*

PlayerAbility 1-3
PhilTigerVijay
0.911.071.00
0.82-0.20-0.53
-0.210.76-0.62

1-3 指 3组holeDifficulty & playerAbility 参数


rescaling 之后, 我们得到

PhilTigerVijay
445
455
332
454
444
354
443
244
555
=

HoleDifficulty 1-3
0.350.09-0.64
0.380.19-0.10
0.22-0.400.28
0.36-0.080.33
0.33-0.18-0.20
0.330.330.48
0.30-0.440.23
0.280.640.10
0.41-0.22-0.25
*

ScaleFactor 1-3
21.0700
02.010
001.42
*

PlayerAbility 1-3
PhilTigerVijay
0.530.620.58
-0.820.200.53
-0.210.76-0.62



总结, 说白了  svd 干了件 降维的工作, 并且在生成的 方阵中保存原矩阵的物理特性


PlayerAbility 1-3
PhilTigerVijay
0.530.620.58
-0.820.200.53
-0.210.76-0.62
 phil 33 杆

tiger 39 杆

vijay 36 杆

另外不难看出  方阵中 第一条vector 被赋予的原矩阵物理特性最大, 接下来的是为了 弥补 第一组player ability 未能完全覆盖的部分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值