矩阵 分解

前言  :

矩阵分解用与评分预测,矩阵里的值没有完全给出,通过将矩阵分解成两个矩阵,通过矩阵乘法,来求出原来矩阵的的值,此矩阵一般是稀疏矩阵。

目录

原理:

分解矩阵:

构造损失函数:

 梯度下降法:

正则化

根据梯度下降求出分解的矩阵p和q:​

代码:


原理:

分解矩阵:

下面是一个评分预测的例子,横列表示物品,纵列表示用户,中间表示用户给物品打的评分。

矩阵R(m*n)近似等于矩阵p(m*k)和矩阵q(k*n)的乘积,

R(m,n)=\sum_{1}^{k}p{_{m,k}}*q_{k,n}。真实值 :r_{m,n},   预测值: r\hat{}_{m,n}

构造损失函数:

由原来矩阵的真实值和矩阵p 和 q 乘积得到的预测矩阵的预测值的差 的平方作为损失函数。求得所有已知数据与对应预测值差的和的最小值。

e_{m,n}^{2} =\left ( r_{m,n}-r\hat{} _{m,n}\right )^{2}=\left (r_{m,n}-\sum_{1}^{k} p_{m,k}*q_{k,n}\right )^{2}

所有已知值与对应值的和 :min \, \, loss =\sum_{r_{m,n}\, != \, ?}e_{m,n}^{2}

  分别对q和p进行求偏导:

\frac{\partial }{\partial q_{k,n}}e_{m,n}^{2}=-2\left (r_{m,n}-\sum_{1}^{k} p_{m,k}*q_{k,n}\right )*q_{k,n}=-2e_{m,n}p_{m,k}

 \frac{\partial }{\partial q_{k,n}}e_{m,n}^{2}=-2\left (r_{m,n}-\sum_{1}^{k} p_{m,k}*q_{k,n}\right )*q_{k,n}=-2e_{m,n}q_{k,n}

利用梯度下降来求得,当min loss最小时的q和p,此时的预测值和真实值才最接近。

 梯度下降法:

  1. 首先设定一个步长\alpha和以最小整数\varepsilon

  2.求得函数对于变量的偏导数或者是导数,这里是求偏导数

  3.更新所求的变量,

q_{k,n}new=q_{k,n}old-\alpha *\frac{\partial }{\partial q_{k,n}}e_{m,n}^{2}=q_{k,n}+\alpha *2e_{m,n}q_{k,n}

p_{m,k}new=p_{m,k}old-\alpha *\frac{\partial }{\partial p_{m,k}}e_{m,n}^{2}=p_{m,k}+2e_{m,n}p_{m,k}

4,当变量的变化量小于\varepsilon时或者迭代次数达到某个设定的值时,迭代结束。得到最新的值。

 最后求得分解的的两个矩阵p_{m,k}p_{k,n}。再根据矩阵的乘法,求得原来矩阵的所有值。

正则化

        正则化是构造完损失函数后防止函数过拟合在函数之后加上对应范数,在此损失函数上体现为:

e_{m,n}^{2} +\frac{\lambda }{ 2}*\sum_{1}^{k}\left ( q_{k,n} ^{2}+p_{m,k}^{2}\right )=\left ( r_{m,n}-r\hat{} _{m,n}\right )^{2}=\left (r_{m,n}-\sum_{1}^{k} p_{m,k}*q_{k,n}\right )^{2}+\frac{\lambda }{ 2}*\sum_{1}^{k}\left ( q_{k,n} ^{2}+p_{m,k}^{2}\right )

经过正则化后,分别对p和q 求偏导:

\frac{\partial }{\partial q_{k,n}}e_{m,n}^{2}+\frac{\lambda }{2}\sum_{1}^{k}\left ( q_{m,k}^{2}+p_{k,n}^{2} \right )=-2\left (r_{m,n}-\sum_{1}^{k} p_{m,k}*q_{k,n}\right )*p_{m,k}=-2e_{m,n}*p_{m,k}+\lambda \sum_{1}^{k}q_{m,n}

\frac{\partial }{\partial p_{m,k}}e_{m,n}^{2}+\frac{\lambda }{2}\sum_{1}^{k}\left ( q_{m,k}^{2}+p_{k,n}^{2} \right )=-2\left (r_{m,n}-\sum_{1}^{k} p_{m,k}*q_{k,n}\right )*q_{k,n}=-2e_{m,n}q_{k,n}+\lambda \sum_{1}^{k}p_{m,k}

根据梯度下降求出分解的矩阵p和q:
q_{k,n}new=q_{k,n}old+\alpha *2*e_{m,n}p_{m,k}-\lambda q_{k,n}

p_{m,k}new=p_{m,k}old-\alpha *\frac{\partial }{\partial q_{k,n}}e_{m,n}^{2}+\frac{\lambda }{2}\sum_{1}^{k}(p_{m,k}^{2}+q_{k,n}^{2})=q_{k,n}+\alpha *\left ( 2e_{m,n}q_{k,n}-\lambda p_{m,k}\right )

代码:

 

 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值