奇异值分解

核能气质少年 提交于 2019-11-27 18:15:02

我觉得线性代数中最主要的概念是基变换矩阵分解。矩阵分解的本质就是基变换。选择不同的基,可以将矩阵分解为不同的形式。几种不同的线性变换
AA是一个mnm*n的矩阵,与AA相关的4个空间如下:
列空间C(A), 行空间R(A), 零空间N(A), ATA^T的零空间N(AT)N(A^T)
在这里插入图片描述
奇异值分解是要在行空间和列空间各找一组基。
one set of basis of the row space of A: v1,v2,...,vrv_1, v_2,...,v_r, and one set of basis of the column space of A: u1,u2,...,uru_1, u_2,...,u_r,其中rr是列空间和行空间的维度。
Avi=σiui,i=1,2,...,rAv_i=\sigma_i u_i, 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]
AV=UΣ,A=UΣVTAV=U\Sigma, A=U\Sigma V^T
A=UΣVT,AT=VΣUTA=U\Sigma V^T, A^T=V\Sigma U^T
AAT=UΣ2UT,ATA=VΣ2VTAA^T=U\Sigma^2U^T, A^TA=V\Sigma^2 V^T,所以U,V,ΣU,V,\Sigma可以通过AAT,ATAAA^T, A^TA的特征值,特征向量求得。因为是对称矩阵,所以一定存在。


应用

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的关联性。在这个矩阵中,每一行对应一个词,每一列对应一个文档。设有mm个词,nn篇文章,term-document matrix可以表示如下,aija_{ij}表示第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]
如下图所示,是与AA相关的四个子空间,文章在列空间,词在行空间,关键是AA不是满秩的,我们所看到的文章和词是在子空间中,零空间中的分量为0,所以可以不损失信息的压缩(解释一下,word是在m维空间,但它存在于一个维度维r的子空间,比如三维空间中的一面墙,墙这个平面是二维的)。At=dAt=dtt是词term,dd是文档document。

对它进行奇异值分解A=UΣVTA=U\Sigma V^T

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))

[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][4.098871970.0.0.2.36157080.0.0.1.27366868][0.494466640.645822380.581735510.649175760.71944692n0.246914890.577990980.255557410.77499473] \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] \left[\begin{matrix} 4.09887197 & 0. & 0. \\ 0. & 2.3615708 & 0. \\ 0. & 0. & 1.27366868 \end{matrix}\right] \left[\begin{matrix} -0.49446664 & -0.64582238 & -0.58173551\\ -0.64917576 & 0.71944692 & n-0.24691489 \\ -0.57799098 & -0.25555741 & 0.77499473 \end{matrix}\right]

上面对例子中:d1=A[100]d_1=A\left[\begin{matrix} 1 \\ 0 \\ 0 \end{matrix}\right],词空间(A的行空间)中的[1,0,0][1, 0, 0]代表

以doc为例,原来的基是II,用奇异值分解后选择的基是V=[v1,v2,...,vr,vr+1,...,vn]V=[v_1,v_2, ...,v_r,v_{r+1},...,v_{n}],前r个向量是奇异值分解的基,后面nrn-r个向量在A的零空间中任意一组基。doc原来用xx表示,变换后用xx'表示,进行基变换:
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]
原来nn维的xx,就可以用rr维的xx'表示。

下面解释这段话:
在这里插入图片描述
A=UΣVTA=U\Sigma V^TUU的列是从词所在的子空间中选出的一组标准正交基,每一列代表一个语义类可以理解。
RmR^m空间中的[1,0...,0]T[1, 0...,0]^T,在以UU为基时,表示为UT[1,0,...,0]TU^T[1,0,...,0]^T,这是UTU^T的第一列,也这就是UU的第一行,同理RmR^m空间中II的每一列看作一个词,基变换后就是UU的每一行,所以每一行表示一个词。


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!