数据降维

数据降维的目的:

  1. 发现隐含特征
  2. 移除噪声
  3. 方便解释和可视化

SVD分解

SVD原理

SVD分解的一般形式:
A[m×n]=U[m×r]Σ[r×r](V[n×r]) \mathbf{A}_{[m \times n]}=\mathbf{U}_{[m \times r]} \Sigma_{[r \times r]}\left(\mathbf{V}_{[n \times r]}\right)^{\top}
其中:以用户和电影之间的评分来讨论这一问题,方便理解。
AA:输入矩阵,例如:用户和电影之间的评分矩阵
UU:列正交矩阵(mrm*r),且每一列均为单位向量,可以理解为用户和电影种类(或者说Latent factors)之间的关联矩阵
Σ\Sigma:对角阵(rrr*r),根据矩阵AA提供的信息多少,显示每个种类(或者说Latent factors)的strength,且对角阵上的值按降序排列。
VV^\top:行正交矩阵(nrn*r),且每一行为单位向量,表示每部电影和电影种类(或者说Latent factors)之间的关联矩阵。
数据降维
结合上图,简单理解下SVD分解的含义。矩阵UU是user-to-concept矩阵,比较每行中三个值的大小,不难发现,第一列中前四行的值较大,刚好对应user-to-movie矩阵中,前四个用户均喜欢观看科幻类电影;矩阵Σ\Sigma是每个种类的电影所占的比例,由于在user-to-movie矩阵中,用户对科幻类电影的打分项明显高于浪漫类,所以在矩阵Σ\Sigma中科幻类电影的比重较大;矩阵VV^\top是电影种类和电影之间的关联程度,不难发现第一行前三个的值第一行后两个的值,刚好对应上前三部电影是科幻类。
在上面的例子中,我们不难发现,第五个和第七个用户虽然大部分的观影是浪漫类,但也存在科幻类的观影。正是由于此原因造成分解时电影种类有三类,但是实际上可以将Σ\Sigma对角阵上较小的值置为0,接下来将证明这一点。
假设矩阵MMSVDSVD分解为M=PQRM=PQR,则:
M2=ij(mij)2=ij(kmpikqkmrmj)2||M||^2=\sum_{i}\sum_{j}\left(m_{ij}\right)^2=\sum_{i}\sum_{j}\left(\sum_{k}\sum_{m}p_{ik}q_{km}r_{mj}{}\right)^2
由于矩阵QQ为对角阵:
kmpikqkmrmj=kpikqkkrkj\sum_{k}\sum_{m}p_{ik}q_{km}r_{mj}=\sum_{k}p_{ik}q_{kk}r_{kj}
则:
M2=ijklpikqkkrkjpilqllrlj||M||^2=\sum_{i}\sum_{j}\sum_{k}\sum_{l}p_{ik}q_{kk}r_{kj}p_{il}q_{ll}r_{lj}
由于矩阵PPRR为列正交矩阵,且每一列为单位向量,则:
M2=ijkpikpikqkkqkkrkjrkj=ijkpik2qkk2rkj2=kqkk2||M||^2=\sum_{i}\sum_{j}\sum_{k}p_{ik}p_{ik}q_{kk}q_{kk}r_{kj}r_{kj}=\sum_{i}\sum_{j}\sum_{k}p_{ik}^2q_{kk}^2r_{kj}^2=\sum_{k}q_{kk}^2
假设A=UΣVA=U\Sigma V^\topB=USVB=USV^\top,矩阵SS的前kk个对角线的值与矩阵Σ\Sigma的前kk个相同,后面的值为0。则:
AB=UΣVUSV=U(ΣS)V||A-B||=||U\Sigma V^\top-USV^\top||=||U\left(\Sigma-S\right)V^\top||
可见AB||A-B||的误差与Σ\Sigma矩阵的后几个对角线值的平方等价,所以在对SVDSVD分解进行降维时,直接将对角矩阵上较小的值置为0是有道理的。

计算SVD分解矩阵

设矩阵MM的SVD分解为M=UΣVTM=U \Sigma V^{\mathrm{T}},则MT=(UΣVT)T=(VT)TΣTUT=VΣTUT=VΣUTM^{\mathrm{T}}=\left(U \Sigma V^{\mathrm{T}}\right)^{\mathrm{T}}=\left(V^{\mathrm{T}}\right)^{\mathrm{T}} \Sigma^{\mathrm{T}} U^{\mathrm{T}}=V \Sigma^{\mathrm{T}} U^{\mathrm{T}}=V \Sigma U^{\mathrm{T}}MTM=VΣUTUΣVT=VΣ2VTM^{\mathrm{T}} M=V \Sigma U^{\mathrm{T}} U \Sigma V^{\mathrm{T}}=V \Sigma^{2} V^{\mathrm{T}},两边同时乘VVMTMV=VΣ2VTV=VΣ2M^{\mathrm{T}} M V=V \Sigma^{2} V^{\mathrm{T}} V=V \Sigma^{2},故矩阵MMM^\top M的特征向量组就是所求的VV,其特征根的平方根就是对角阵Σ\Sigma,同理,可以求出矩阵UU

SVD应用

现在有某个用户对于所看电影打分为[50000]\begin{bmatrix}5 & 0 &0&0&0\end{bmatrix},现在将此向量乘以矩阵VV,得到[2.80.6]\begin{bmatrix}2.8&0.6\end{bmatrix},可以推断出该用户更加喜欢科幻类的电影,在这里,也可以理解矩阵VV为新的坐标轴
SVDSVD分解存在的问题是当矩阵比较稀疏时,分解得到的矩阵将会特别稠密。

CUR分解

CURCUR分解的一般形式:
A=CURA=CUR
其中,矩阵AA为输入矩阵(mnm*n
CC:在矩阵AA中随机选择rr列所形成,mrm*r
RR:在矩阵AA中随机选择rr行所形成,rnr*n
UUrrr*r
矩阵CCRR的选择策略:
数据降维
假设矩阵WW为矩阵CCRR的交叉部分,且矩阵的WWSVDSVD分解为W=XΣYW=X\Sigma Y^\topΣ+\Sigma^+Σ\Sigma的逆矩阵或者伪逆矩阵,U=Y(Σ+)2XTU=Y\left(\Sigma^{+}\right)^{2} X^{\mathrm{T}}