前言 :
矩阵分解用与评分预测,矩阵里的值没有完全给出,通过将矩阵分解成两个矩阵,通过矩阵乘法,来求出原来矩阵的的值,此矩阵一般是稀疏矩阵。
目录
原理:
分解矩阵:
下面是一个评分预测的例子,横列表示物品,纵列表示用户,中间表示用户给物品打的评分。
矩阵R(m*n)近似等于矩阵p(m*k)和矩阵q(k*n)的乘积,
则。真实值 :
, 预测值:
。
构造损失函数:
由原来矩阵的真实值和矩阵p 和 q 乘积得到的预测矩阵的预测值的差 的平方作为损失函数。求得所有已知数据与对应预测值差的和的最小值。
所有已知值与对应值的和 :
分别对q和p进行求偏导:
利用梯度下降来求得,当min loss最小时的q和p,此时的预测值和真实值才最接近。
梯度下降法:
1. 首先设定一个步长和以最小整数
2.求得函数对于变量的偏导数或者是导数,这里是求偏导数
3.更新所求的变量,
4,当变量的变化量小于时或者迭代次数达到某个设定的值时,迭代结束。得到最新的值。
最后求得分解的的两个矩阵和
。再根据矩阵的乘法,求得原来矩阵的所有值。
正则化
正则化是构造完损失函数后防止函数过拟合在函数之后加上对应范数,在此损失函数上体现为:
经过正则化后,分别对p和q 求偏导:
根据梯度下降求出分解的矩阵p和q:
![q_{k,n}new=q_{k,n}old+\alpha *2*e_{m,n}p_{m,k}-\lambda q_{k,n}](https://i-blog.csdnimg.cn/blog_migrate/e4f5df70973ce05f4a2519369af7df5a.gif)
代码: