奇异值分解(SVD)
最近不小心接触到了SVD,然后认真看下去之后发现这东西真的挺强大的,把一个推荐问题转化为纯数学矩阵问题,看了一些博客,把一个写个比较具体的博文引入进来,给自己看的,所以把觉得没必要的就去掉了,博文下面附原始博客地址。
一、基础知识
1. 矩阵的秩:矩阵的秩是矩阵中线性无关的行或列的个数
2. 对角矩阵:对角矩阵是除对角线外所有元素都为零的方阵
3. 单位矩阵:如果对角矩阵中所有对角线上的元素都为零,该矩阵称为单位矩阵
4. 特征值:对一个M x M矩阵C和向量X,如果存在λ使得下式成立
则称λ为矩阵C的特征值,X称为矩阵的特征向量。非零特征值的个数小于等于矩阵的秩。
即对于矩阵C,经过初等行列变化后成为对角矩阵,对角矩阵对角线上的值是特征值。
5. 特征值和矩阵的关系:考虑以下矩阵
该矩阵特征值λ1 = 30,λ2 = 20,λ3 = 1。对应的特征向量
假设VT=(2,4,6) 计算S x VT
有上面计算结果可以看出,矩阵与向量相乘的结果与特征值,特征向量有关。观察三个特征值λ1 = 30,λ2 = 20,λ3 = 1,λ3值最小,对计算结果的影响也最小,如果忽略λ3,那么运算结果就相当于从(60,80,6)转变为(60,80,0),这两个向量十分相近。这也表示了数值小的特征值对矩阵-向量相乘的结果贡献小,影响小。这也是后面谈到的低阶近似的数学基础。
二、奇异值分解
在LSA中,我们是要对Term-Document矩阵进行分解,很显然这个矩阵不是方阵。这时需要奇异值分解对Term-Document进行分解。
假设C是M x N矩阵,U是M x M矩阵,其中U的列为CCT的正交特征向量,V为N x N矩阵,其中V的列为CTC的正交特征向量,再假设r为C矩阵的秩,则存在奇异值分解:
Σ为M X N,其中,其余位置数值为0,的值按大小降序排列。以下是Σ的完整数学定义:
注意:当的值按大小降序排列的时候,V就是C中与排序前相对应的行的特征向量
σi称为矩阵C的奇异值。
用C乘以其转置矩阵CT得:
奇异值分解可表示为:
假设m与n都是俩个比较大的数值m = 1,000,000 n = 500,000,在通常情况下这个矩阵的规模是100亿,通过SVD分解后,k是一个可选值,假设k=100,则奇异值分解后的三个矩阵规模为1亿,规模缩小5000倍,这就是SVD的厉害之处了
这三个矩阵有着非常清楚的物理含义,首先,我们假设矩阵C是用来描述一百万个用户对五十万部电影的偏好度。这个矩阵中,每一行对应一个用户,每一列对应一部电影。SVD分解后的第一个矩阵U中的每一列表示一类抽象主题,例如每个用户(m表示的是用户)对于恐怖类型电影的偏好度,数值越大越喜欢。最后一个矩阵V中的每一行表示每部电影(n表示的是电影)的某个抽象主题所占的权重,简而言之即,矩阵U是用户的特征向量,矩阵V是物品的特征向量,中间的矩阵则表示各类抽象主题之间的权重系数。
三、SVD特征向量求解
奇异值分解(SVD)详解: http://blog.csdn.net/wangzhiqing3/article/details/7446444
奇异值分解(SVD)应用-LSI: http://blog.csdn.net/abcjennifer/article/details/8131087