奇异值分解的一些特性以及应用小案例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
a11 a12
a21
a22
am
am
1 2
a11
a21
a12 a22
a1n a2n
a1n
a2n
amn
am1
am2
amn
图 2. AT A 方阵迹的形成过程
1.2 矩阵 AB 的迹等于矩阵 BA 的迹 设 A Rmn , B Rnm ,令 A (aij )mn , B (bij )nm ,则 tr( AB) tr(BA) 。
下面随机举个数据矩阵 data(12,9) ,12 行 9 列,如下所示:
1 0 0 1 0 0 0 0 0
1 0 1 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0
0 1 1 0 1 0 0 0 0
0 1 1 2 0 0 0 0 0
data
0 0
aijb ji
i1 j 1
b11 b12 b1m
B
(bij )nm
b21
b22
b2m
bn1
bn2
bnm
a11 a12 a1n
A
(aij )mn
a21
a22
a2
n
am1
am 2
amn
n2
,占总信息量的
2 r 1 12
2 r 1
n2
12 n2
。
2.3 例子演示
此部分主要是随机举个例子来展示下奇异值分解的结果,以及取不同奇异值的情况 下信息的损失情况,看看是不是和理论上推导的结论相一致?理论与例子相结合,进一 步加深大家对奇异值分解及其近似的理解。
11.1615 6.4602 0.3138 0.1323
5.5411
2.7045
2.2645
1.7066
0.7156
compare =
11.1615 6.4602 0.3138 0.1323
5.5411
2.7045
2.2645
1.7066
0.7156
ans =
8.9841e-015
显然,理论分析的结论在例子中得到了验证。
2.2 矩阵 U 的近似奇异值分解:U S1V1D1
在实际应用中,往往通过矩阵的近似分解来达到降维的目的,从而可以进行数据压 缩。这样,一方面节省了存储空间,另一方面也将节省计算资源;最重要的一点,在某 些应用(如信息检索,文本分类聚类)中,可以挖掘数据中潜在的语义结构,继而更深 一步探讨事物的本质是什么。但是,矩阵的近似分解会丢失掉一部分信息,怎样分解才 能使得信息量丢失的最少同时又有降维的目的呢?定量层面上又丢失多少呢?下面我 们来从理论上分析下这些问题。
i1 j 1
mn
首先,|| A ||2F
| aij |2 这个等式是矩阵 F-范数的定义,即一个矩阵的 F-范数等
i1 j1
于矩阵中每个元素的平方和。
a11 a12 a1n
a11 a21 am1
其次,因
A
(aij )mn
a21
a22
d n1
0
d12 d22
dn2
d1n
d
2
n
dnn
其中,矩阵 S 和 D 都是正交矩阵,即 ST S Im ,SST Im ,DDT In ,DT D In ,
矩阵 S 和 D 的行之间相互正交,列之间也相互正交,且行向量为单位向量,列向量也为
取前 r 个奇异值以及对应的 S 和 D 矩阵,那么我们就能最大程度上保留原来的信息量,
从而减少了信息的损失量。这就是为什么以前总是提“按照奇异值从大到小排列,取前 r 个,这样得到的矩阵近似分解信息损失的最小”的说法了,在这里得到了分析和验证。
下面我们在看看矩阵原始的信息量是多少?如果猜想一下的话,对,就是所有的奇 异值的平方和就是总的信息量!
奇异值分解简化命令:[S,V,D]=svd(data,0)
下面通过 Matlab 代码来展示每当“抛弃”一个奇异值后,其损失量是多少? Matlab 代码:svd_sample.m % 清屏及变量 clc; clear; % 数据 data=[ 1 0 0 1 0 0 0 0 0
101000000 110000000 011010000 011200000 010010000 010010000 001100000 010000001 000001110 000000111 0 0 0 0 0 0 0 1 1]; % 数据大小
tr(S2V2 D2 D2TV2T S2T ) tr(S2V2V2T S2T )
tr
(S
T 2
S2V2V2T
)
tr (V2V2T
)
2 r 1
2 r 1
n2
因此,可以看到,损失的信息量即为被“抛弃的奇异值的平方和”!我们知道,奇 异值分解后,矩阵V 就是奇异值的“对角矩阵”;如果我们按照奇异值从大到小排列,
a2
n
,则 AT
a12
a22
am2
,易
am1
am 2
amn
a1n
a2n
amn
mn
得 tr(AAT ) tr(AT A)
|
a
ij
|
2
||
A
||
2 F
。(
AAT
或
AT
A
的第
r
个对角元素等于第
r
i1 j1
行或列元素的平方和,所有对角元素之和就是矩阵每个元素的平方和,即有上式成立。) 此过程如图 1 和图 2 所示。
令方阵 M
m21
mr1
m22
mr 2
m2
r
,则 tr(M ) m11 m22
mrr
r i 1
mii
,即矩
mrr
阵 M 的迹。注意, tr() 只能作用于方阵。
mn
那么,下面来看下为什么有|| A ||2F
| aij |2 tr( AAT ) tr( AT A) ?
[m,n]=size(data) % 奇异值分解 [S,V,D]=svd(data,0)
% 矩阵分解近似优化 len=min(m,n)
% 损失信息量记录 loss=[] % 对应的奇异值的平方 compare=[] % 奇异值对角化 namda=diag(V) for i=1:len
loss=[loss,trace(S(:,i)*D(i,:)*D(i,:)'*S(:,i)')*namda(i)^2]; compare=[compare,namda(i)^2]; end % 输出信息量损失 loss % 输出奇异值平方 compare % 判断信息损失量是否等于奇异值的平方 norm(loss-compare,2) 运行结果: loss =
a11 a12 a1n a11 a21 am1
AAT
a21
a22
a2
n
a12
a22
a
m2
am1
am 2
amn
a1n
a2n
amn
图 1. AAT 方阵迹的形成过程
AT
A
|| U ||2F || SVD ||2F tr[(SVD)(SVD)T ]
tr(SVDDTV T S T )
tr(SVV T ST )
tr(ST SVV T )
tr(VV T ) 12 12 n2
因此,U
S1V1D1
的信息损失量为
2 r 1
2 r 1
单位向量。奇异值分解过程如图 5 所示。
图 5. U=SVD 矩阵U 奇异值分解之后,矩阵V 可以分成两块,一个 n 阶的对角矩阵(对角元素 为U 的 n 个奇异值)和一个全零矩阵;这样的话,通过矩阵分块理论,可以把奇异值分 解简化,如图 6 所示。
图 6. 矩阵分块简化奇异值分解
注意,在这里,矩阵U 的奇异值分解我并没有强调V 矩阵的对角元素非要按照从 大到小排列,可以是随意的。因此,进一步对矩阵进行分块,将矩阵V 分解成两块对角 矩阵,矩阵 S 和 D 作相应的分块,如图 7 所示。数学形式如下:
第一部分:预备知识
1.1 矩阵的 F-范数与矩阵迹的关系
mn
引理:设 A Rmn ,令 A (aij )mn ,则|| A ||2F
| aij |2 tr( AAT ) tr( AT A) ;
i1 j 1
其中, tr() 定义如下:
m11 m12 m1r
分析如下:
A
(aij )mn
a11 a21
a12
a22
a1n a2 n
am1
am 2
amn
B
(bij )nm
bb1211
b12
b22
b1m b2m
bn1
bn2
bnm
mn
图 3. tr(AB)
第三部分:潜在语义分析模型 Latent Semantic Analysis
此部分主要是举个奇异值分解在实际应用中的例子,来展示下矩阵近似分解在降维 以及挖掘语义结构方面上的神奇功能。
1.1 问题背景
传统向量空间模型使用精确的词匹配,即精确匹配用户输入的词与向量空间中存在 的词。由于一词多义(polysemy)和一义多词(synonymy)的存在,使得该模型无法提供给用 户语义层面的检索。比如用户搜索“automobile”,即汽车,传统向量空间模型仅仅会 返回包含“automobile”单词的页面,而实际上包含“car”单词的页面也可能是用户所 需要的。
U
[S1
,
S
2
]
V1 O
O D1
V2
D2
[
S1V1
S2O,
S1O1
S2V2
]
D1 D2
[S1V1,
S2V2
]
D1 D2
S1V1D1 S2V2D2
图 7. 矩阵分块变换奇异值分解形式 因 S1 和 S2 的列向量相互正交,且为单位向量,故有 SiT Si I (i 1, 2) ;同理,D1 和 D2 的行向量相互正交,且为单位向量,故有 Di DiT I (i 1, 2) 。
上面已经给出了矩阵U 的奇异值分解形式以及分块后的变形形式(如图 7 所示)。 假设将其降到 r 维空间下,则有:
U S1V1D1 如图 7 所示,矩阵U 近似成左边三个矩阵 S1 ,V1 和 D1 的乘积了,具体如图 8 所示。
图 8. U S1V1D1 这样的话,就损失了最右边的三个矩阵乘积部分,即 S2V2D2 。那么损失的信息量 怎么计算呢?一般可以用矩阵的 F-范数来表示。因此,U S1V1D1 之后损失的信息量为 || S2V2D2 ||2F 。 || S2V2D2 ||2F tr[(S2V2D2 )(S2V2D2 )T ]
u
m2
s21
umn
sm1
s12 s22
sm2
s1m
s2
m
smm
0
0
0
v22
0
0
0
vnn
d11 d21
2.1 矩阵 U 的奇异值分解:U SVD 设矩阵U Rmn (m n) ,奇异值分解为:U SVD ;其中,S Rmm ,V Rmn ,
D Rnn ,如下式所示:
v11 0 0
u11 u12 u1n
u21 u22
u2n
u m1 s11
nm
图 4. tr(BA)
b jiaij
j 1 i1
第二部分:奇异值分解
本部分主要在矩阵奇异值分解(Singular Value Decomposition)U SVD 的基础之 上,从理论上分析降维之后信息到底损失了多少,以及为什么要选取奇异值最大的那部 分矩阵块;紧接着,举个例子来展示取不同奇异值的情况下,信息损失了多少,让大家 进一步直观地理解其中的机理。
1 1
0 0
0 0
1 1
0 0
0 0
0 0
0 0
0 0 1 1 0 0 0 0 0
0 1 0 0 0 0 0 0 1
0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 1 1 1
0 0 0 0 0 0 0 1 1
Matlab 中奇异值分解命令:[S,V,D]=svd(data)