接下来介绍下SVD
基于SVD方法的CF
SVD-CF是应用最广也最成功的协同过滤方法,现在对SVD介绍下。
基本SVD方法
1) 已知矩阵
An,m
,如何最大限度地保留信息地近似估计。
Singular Value Decomposition给出了一种矩阵分解的方法。
An,m=Un,nΣn,nVTm,n
其中Σ=diag(σ1,σ2,σ3,...,σn) ; σ1≥σ2≥σ3≥...≥σr≥σr+1=...=σn=0
2) 正交性质: V−1=VT; UTU=VTV=I;U−1=UT;
正交矩阵映射保持距离不变,所以是一个 保距映射。
从分解可以理解为,任何一个点,都可以由同维度内两个正交系的乘积表示。
3) F-2阶范数: ||A||2F=[∑ni∑j|ai,j|2]=σ21+σ22+σ23+...+σ2r
若
A^=Un,kΣk,kVTm,k
则
minrank(B)=k||A−B||2F=||A−A^||2F=σ2k+1+σ2k+2+,...,+σ2n
(上面这个是理解SVD在工程中寻优方法的
关键。构造k秩的矩阵B,使得满足最小化F-2阶范数
||A−B||2F
,则可以逼近于
A^
。)
那么,我们可以取top-K秩,来估计矩阵A。
取top-K秩,还可以实现降噪取主要部分的功能。
## 与特征值的关系 ##
U的列向量是 AAT 的特向。
V的列向量是 ATA 的特向。
直观理解SVD
换个角度,理解下SVD分解。
1) 对矩阵
An,m
,可以看做是m维空间内的一个线性变换。
选择同空间内一组正交的单位基底
{vi}
则可以通过线性变换A,将
{vi}
投射到另外一组基底表示的空间去,得
{Avi}
。
若令投射空间的单位基底为
{ui}
,则有
Avi=σiui;其中σi表示投射空间某维上的模σi=|Avi|
2) 任意向量 x 由基底
经过 A 线性变换后:
=∑ri=1A<vi,xi>vi
=∑ri=1AvTixivi
=∑ri=1vTixiAvi
=∑ri=1vTixiσiui
=∑ri=1uiσivTixi
可以得到: A=U[σ]VT
A[v1,v2,...,vk]=[σ1u1,σ2u2,...,σk,uk]
此时,只知道 v 是正交的,两边同乘以
A=U[σ]VT
3) ui 之间是什么关系呢?
<Avi,Avk>=(Avi)T∗(Avk)=vTiAT∗(Avk)=<vi,AT∗Avk> <script id="MathJax-Element-1928" type="math/tex"> = (Av_i)^T*(Av_k)=v_i^TA^T*(Av_k)= </script>
notice 若取 vi 是 ATA 的特征向量。对称矩阵的不同非零特值的特向是正交的。
则上式 =vTiAT∗Avk=vTiλkvk=λkvTivk=0
由投射关系可得:
<Avi,Avk>=<σiui,σkuk>=(σiui)T∗(σkuk)=σiσk<ui,uk> <script id="MathJax-Element-1932" type="math/tex"> = <\sigma_i u_i, \sigma_k u_k > = (\sigma_i u_i)^T * (\sigma_k u_k) = \sigma_i \sigma_k </script>
所以 <ui,uk>=0 <script id="MathJax-Element-1933" type="math/tex"> =0</script>,即 {ui} 也是正交的,在 v 为
所以 σi=|Avi|=λi−−√;注:|Avi|2F=∑k(λi∗vi,k)2−−−−−−−−−−−√=λi∗vTivi−−−−√
且 A 可以表示为:
于是我们可以找到两组正交基底,满足条件,what a happy life。
对其中一组基底
{v}
经过线性变换
A
,投射到新的正交基底下,表示为
Avi=λi−−√ui
λ表示ATA的特征值,v表示ATA的特征向量,u表示AAT的特征向量
到此表明:任意的矩阵 A 可以分解成三个矩阵,
reference
- Using Linear Algebra for Intelligent Information Retrieval
- http://charleshm.github.io/2016/03/Singularly-Valuable-Decomposition/
- http://www.ams.org/samplings/feature-column/fcarc-svd
- http://blog.sciencenet.cn/blog-696950-699432.html