矩阵分解
应用场景是:我们要把一个稀疏矩阵分解为两个低秩的矩阵相乘;两个低秩的矩阵除了降维之外,还分别代表不同的含义。
以推荐为例: 用户点击商品的关系矩阵R则是稀疏的,我们分解为两个低秩矩阵,分别代表用户特征矩阵U和商品特征矩阵I,这个特征则就是隐含的语义信息。
形式化的表述一下:
打分矩阵R是近似低秩的,即m*n的矩阵可以分解为:
U(m*k)和V(n*k)的乘积来近似:
其中U则是用户喜好特征矩阵;V则是产品特征矩阵。
R≈UVT,k<<m,n
那么如何求解U和V呢。解决这类问题,一般要先定义目标函数,有了目标函数,就可以用各种暴力搜索、启发式搜索、求导、梯度下降、二乘法等等来逼近。
那么我们的矩阵分解的损失函数(loss function)是:
矩阵分解的损失函数:
C=∑(i,j)[(Rij−ui∗vTj)2+λ(u2i+v2j)]
我们的目标就是找到两个矩阵使得C最小。
求解方法
矩阵分解的损失函数:
C=∑(i,j)[(Rij−ui∗vTj)2+λ(u2i+v2j)]
最小化损失函数的方法有:交替最小二乘法和随机梯度下降法;
交替最小二乘法,则是固定一个变量,通过求偏导得到优化另外一个变量的公式,不断的交替优化其中一个变量求极值,从而得到一个优化解。核心点有几个:
1. 两个变量,固定其中一个。对另外一个求极值。
2. 固定A,对B求偏导,利用导数为0求极值。从而继续优化。
最小二乘法的流程
损失函数如上,求矩阵U和V
1 初始化U,固定U
2 求导得到V的求解公式,然后得到V
3 固定V
4 求导得到U的求解方法,得到U
5 如此反复1-4,直到C达到条件或者step走完。
几个核心点
最小二乘法的loss function是平方损失函数,这也是回归学习最常用的损失函数。所谓回归,则是利用某个h来拟合数据。h可以是线性的或者非线性的。
回归问题的损失函数如果是平方损失函数,,可以由最小二乘法(least squares)求解。
最小二乘法的算法原理,固定一个变量,通过求偏导得到公式后,求极值;同样的套路用于另外一个变量。这种思想值得学习。
矩阵分解应用
如果得到了U/V,那么通过U和V的乘积,就可以得到R的稀疏填充。当然,U本身也能用于计算用户相似度,从而用于用户聚类。同理V也可以类似操作,从而实现“人以群分,物以类聚”的目标。
推导过程
第一部分是方差,第二部分是规则化项,用了Ui和Vj
最小二乘法则是固定一个求解另一个,那么里面就2个变量,那么则求偏导得到极小值。
对 vj 求偏导:
d(c)d(vj)==∑[2(Rij−ui∗vj)∗(−uTi)]+2λvj=0