有如图一矩阵U(5,4),表示5个用户user对四部电影进行打分,最高可打5分;“-”表示用户未对该电影进行打分。那么如何知道用户user对该电影的评分呢?
通过学习矩阵分解可以预测用户user对该电影的评分;
矩阵分解理论
首先,了解到离散数学中有矩阵乘法:设A为的矩阵m*p,B为的矩阵p*n,那么m*n称的矩阵C为矩阵A与B的乘积,记作C=AB,其中矩阵C中的第i行第j列元素可以表示为:
那么根据矩阵乘法矩阵分解可以理解为: 如果矩阵R(m,n)可以分解成两个矩阵P(m,k)和Q(k,n)的条件相乘;那么我们可以假设真实矩阵R(m,n)可分解成两个矩阵P(m,k)和Q(k,n)相乘,当然真实矩阵是不知道的,所以可由预测矩阵R^(m,n)来代替,就有R(m,n)≈P(m,k)*Q(k,n)=R^(m,n);
要想使得预测值更好的替代真实值,那么就要真实值减去预测值R-R^的值ℰ越小越好,这样就要保证预测值更加接近真实值,即(R-R^)^2<ℰ,ℰ越小预测值R^越接近真实值R;
(R-R^)^2<ℰ 这个式子又称为损失函数(Loss),而得到该式子的过程称之为构造损失函数;
为了求预测值R^必须先求分解后的两个矩阵P和Q;
如何求分解后的两个矩阵P和Q:
1.求第i行第j列的真实值r(i,j)的预测值r^(i,j);则得
2.构建损失函数;假设真实值r(i,j)已知,则预测值r^(i,j)的误差平方和为:
使得误差平方和尽可能的小;
3.要使尽可能的小,并得到分解后的P和Q,就需要用到梯度下降方法;
梯度下降:可以理解为将函数比作一座山,我们站在某个山坡上下山,从哪个方向走一小步,能够下降的最快的问题;只有延着最陡的方向,下山才会最快,而下山最陡的方向,是梯度的负方向;
梯度:表示某一函数在该点处的方向导数沿着该方向取得较大值,即函数在当前位置的导数
。
假设山上有一点Xold,其中,Xold是自变量参数,即下山位置坐标,η是步进长度(已知),Xnew是更新后的Xold,即下山移动一小步之后的位置。
不断迭代下去,直到;
4.不断进行迭代,直到(R-R^)^2<ℰ ,最后R=P*Q;