奇异值分解

我觉得线性代数中最主要的概念是基变换矩阵分解。矩阵分解的本质就是基变换。选择不同的基,可以将矩阵分解为不同的形式。几种不同的线性变换
AAA是一个mnm*nm∗n的矩阵,与AAA相关的4个空间如下:
列空间C(A), 行空间R(A), 零空间N(A), ATA^TAT的零空间N(AT)N(A^T)N(AT)
奇异值分解
奇异值分解是要在行空间和列空间各找一组基。
one set of basis of the row space of A: v1,v2,...,vrv_1, v_2,...,v_rv1​,v2​,...,vr​, and one set of basis of the column space of A: u1,u2,...,uru_1, u_2,...,u_ru1​,u2​,...,ur​,其中rrr是列空间和行空间的维度。
Avi=σiui,i=1,2,...,rAv_i=\sigma_i u_i, i=1,2,...,rAvi​=σi​ui​,i=1,2,...,r
V=[v1,v2,...,vr],U=[u1,u2,...,ur]V=[v_1,v_2, ...,v_r], U=[u_1,u_2, ..., u_r]V=[v1​,v2​,...,vr​],U=[u1​,u2​,...,ur​]
AV=UΣ,A=UΣVTAV=U\Sigma, A=U\Sigma V^TAV=UΣ,A=UΣVT
A=UΣVT,AT=VΣUTA=U\Sigma V^T, A^T=V\Sigma U^TA=UΣVT,AT=VΣUT
AAT=UΣ2UT,ATA=VΣ2VTAA^T=U\Sigma^2U^T, A^TA=V\Sigma^2 V^TAAT=UΣ2UT,ATA=VΣ2VT,所以U,V,ΣU,V,\SigmaU,V,Σ可以通过AAT,ATAAA^T, A^TAAAT,ATA的特征值,特征向量求得。因为是对称矩阵,所以一定存在。


应用

Principle Component Analysis, PCA

主成分分析
这里有详细的推导,也是Ali教授讲的,很好

Latent Semantic Indexing, LSI

latent semantic analysis (LSA)
隐语义检索
参考:Information Retrieval Algorithms and Heuristics, David A. Grossman, Ophir Frieder 2.6 Latent Semantic Indexing

用一个矩阵来描述词term和文章doc的关联性。在这个矩阵中,每一行对应一个词,每一列对应一个文档。
奇异值分解
设有mmm个词,nnn篇文章,term-document matrix可以表示如下,aija_{ij}aij​表示第j个词在第i篇文档中出现次数tf,或tf-idf值。
A=[a11...a1n...ai1...ain...am1...amn] A= \left[ \begin{matrix} a_{11} & ... & a_{1n} \\ ... \\ a_{i1} & ... & a_{in} \\ ... \\ a_{m1} & ... & a_{mn} \\ \end{matrix} \right] A=⎣⎢⎢⎢⎢⎡​a11​...ai1​...am1​​.........​a1n​ain​amn​​⎦⎥⎥⎥⎥⎤​
对它进行奇异值分解A=UΣVTA=U\Sigma V^TA=UΣVT

import numpy as np

A = np.matrix(
    [[1, 1, 1], [0, 1, 1], [1, 0, 0], [0, 1, 0], [1, 0, 0], [1, 0, 1], [1, 1, 1], [1, 1, 1], [1, 0, 1], [0, 2, 0],
     [0, 1, 1]])

U, S, VT = np.linalg.svd(A, full_matrices=False)

B = U * np.diag(S) * VT

print(np.isclose(A, B))

U=[0.420121570.074799250.045972440.299486760.200092260.407827660.120634810.274891510.45380010.1575610.304647620.20064670.120634810.274891510.45380010.262560570.379446870.154674260.420121570.074799250.045972440.420121570.074799250.045972440.262560570.379446870.154674260.3151220.609295230.401293390.299486760.200092260.40782766] U=\left[\begin{matrix} -0.42012157 & -0.07479925 & -0.04597244 \\ -0.29948676 & 0.20009226 & 0.40782766 \\ -0.12063481 &-0.27489151& -0.4538001 \\ -0.157561 & 0.30464762 & -0.2006467 \\ -0.12063481 & -0.27489151 & -0.4538001 \\ -0.26256057 & -0.37944687 & 0.15467426 \\ -0.42012157 & -0.07479925 & -0.04597244 \\ -0.42012157 & -0.07479925 & -0.04597244 \\ -0.26256057 & -0.37944687 & 0.15467426 \\ -0.315122 & 0.60929523 & -0.40129339 \\ -0.29948676 & 0.20009226 & 0.40782766 \end{matrix}\right] U=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​−0.42012157−0.29948676−0.12063481−0.157561−0.12063481−0.26256057−0.42012157−0.42012157−0.26256057−0.315122−0.29948676​−0.074799250.20009226−0.274891510.30464762−0.27489151−0.37944687−0.07479925−0.07479925−0.379446870.609295230.20009226​−0.045972440.40782766−0.4538001−0.2006467−0.45380010.15467426−0.04597244−0.045972440.15467426−0.401293390.40782766​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​

如下图所示,是与AAA相关的四个子空间,word在列空间,doc在行空间,关键是AAA不是满秩的,我们所看到的文章和词是在子空间中,零空间中的分量为0,所以可以不损失信息的压缩(解释一下,word是在m维空间,但它存在于一个维度维r的子空间,比如三维空间中的一面墙,墙这个平面是二维的)。

以doc为例,原来的基是III,用奇异值分解后选择的基是V=[v1,v2,...,vr,vr+1,...,vn]V=[v_1,v_2, ...,v_r,v_{r+1},...,v_{n}]V=[v1​,v2​,...,vr​,vr+1​,...,vn​],前r个向量是奇异值分解的基,后面nrn-rn−r个向量在A的零空间中任意一组基。doc原来用xxx表示,变换后用xx'x′表示,进行基变换:
Ix=Vxx=VTxx=[v1TvrTvr+1TvnT]x=[v1Tx1vrTxrvr+1Txr+1vnTxn]=[v1Tx1vrTxr00] Ix=Vx' \\ x'=V^Tx \\ x'=\left[ \begin{matrix} v_1^T \\ \vdots\\v_r^T\\v_{r+1}^T \\ \vdots \\ v_n^T \\ \end{matrix} \right]x=\left[ \begin{matrix} v_1^Tx_1 \\ \vdots \\ v_r^Tx_r \\ v_{r+1}^Tx_{r+1} \\ \vdots \\ v_n^Tx_n \\ \end{matrix} \right] =\left[ \begin{matrix} v_1^Tx_1 \\ \vdots \\ v_r^Tx_r \\ 0 \\ \vdots \\ 0 \\ \end{matrix} \right] Ix=Vx′x′=VTxx′=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡​v1T​⋮vrT​vr+1T​⋮vnT​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤​x=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡​v1T​x1​⋮vrT​xr​vr+1T​xr+1​⋮vnT​xn​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤​=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡​v1T​x1​⋮vrT​xr​0⋮0​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤​
原来nnn维的xxx,就可以用rrr维的xx'x′表示。

下面解释这段话:
奇异值分解
A=UΣVTA=U\Sigma V^TA=UΣVT,UUU的列是从词所在的子空间中选出的一组标准正交基,每一列代表一个语义类可以理解。
RmR^mRm空间中的[1,0...,0]T[1, 0...,0]^T[1,0...,0]T,在以UUU为基时,表示为UT[1,0,...,0]TU^T[1,0,...,0]^TUT[1,0,...,0]T,这是UTU^TUT的第一列,也这就是UUU的第一行,同理RmR^mRm空间中III的每一列看作一个词,基变换后就是UUU的每一行,所以每一行表示一个词。


上一篇:【转】 前端笔记之JavaScript(十一)event&BOM&鼠标/盒子位置&拖拽/滚轮


下一篇:Participate in E-sports【Java大数+二分】