引言
- 本文继续介绍推荐系统研读笔记,紧接上次文章的特征值分解法,本文将介绍一个更为常用的方法-SVD分解法
2 SVD奇异值分解
-
注:正交矩阵,即一个n阶矩阵满足该矩阵乘以该矩阵结果为单位矩阵,则该矩阵为正交矩阵(T表示转置),公式表达是:
- 或者ATA=E或者AAT=E
-
SVD的表达式为:
- 假设A是一个M* N的矩阵,那么得到的U是一个M* M的方阵(里面的向量是正交的,U里面的向量称为左奇异向量),Σ是一个M * N的矩阵(除了对角线的元素都是0,对角线上的元素称为奇异值),V’(V的转置)是一个N * N的矩阵,里面的向量也是正交的,V里面的向量称为右奇异向量)如上图
- 那么奇异值和特征值是怎么对应起来的呢?首先,我们将一个矩阵A的转置 A^T ,将会得到一个方阵,我们用这个方阵求特征值可以得到:
- 这里得到的v,就是我们上面的右奇异向量。此外我们还可以得到
- 这里的σ就是上面说的奇异值,u就是上面说的左奇异向量。奇异值σ跟特征值类似,在矩阵Σ中也是从大到小排列,而且σ的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。也就是说,我们也可以用前r大的奇异值来近似描述矩阵,这里定义一下部分奇异值分解:
-
r是一个远小于m、n的数,这样矩阵的乘法看起来像是下面的样子: pic1.zhimg.com/80/v2-1d071…
-
右边的三个矩阵相乘的结果将会是一个接近于A的矩阵,在这儿,r越接近于n,则相乘的结果越接近于A。而这三个矩阵的面积之和(在存储观点来说,矩阵面积越小,存储量就越小)要远远小于原始的矩阵A,我们如果想要压缩空间来表示原矩阵A,我们存下这里的三个矩阵:U、Σ、V就好了。
-
关于数学部分的推导就到此为止,个人数学功底有限。
-
奇异值分解的缺点
- 奇异值分解需要原始的共现矩阵是稠密的,但是互联网场景下大部分用户的行为历史都是非常少的,也就是共现矩阵比较稀疏,所以如果在该场景下使用需要进行太南充
- 奇异值分解的计算复杂度太高,而互联网的数据场景动辄百万千万,计算成本太高。因此衍生出最后一个最常用算法