奇异值分解的一些特性以及应用小案例Word文档格式.docx
《奇异值分解的一些特性以及应用小案例Word文档格式.docx》由会员分享,可在线阅读,更多相关《奇异值分解的一些特性以及应用小案例Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
mmmnaaaaaaAaaaa⨯⎡⎤⎢⎥⎢⎥==⎢⎥
⎢⎥⎣⎦,则11
2111222212mmTnnmnaaaaaaAaaa⎡⎤
⎢⎥⎢⎥=⎢⎥
⎢
⎥
易得2211
((||||||m
n
TT
FijtrAAtrAAa
A====
=∑∑。
(TAA或T
AA的第r个对角元素等于第r
行或列元素的平方和,所有对角元素之和就是矩阵每个元素的平方和,即有上式成立。
此过程如图1和图2所示。
1112111
2112122212
2221
12nmnmTmmmnnnmnaaaaaaaaaaaaAAaaaaaa⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⨯⎢⎥⎢⎥⎢⎥⎢
⎣⎦⎣⎦
图1.TAA方阵迹的形成过程
1121111
12112
22221
222121
mnmnTnnmnmmmnaaaaaaaaaaaaAAaaaaaa⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⨯⎢⎥⎢⎥⎢⎥⎢
图2.TAA方阵迹的形成过程
1.2矩阵AB的迹等于矩阵BA的迹
AR⨯∈,nm
BR
⨯∈,令
(ijmn
Aa⨯=,
(ijnm
Bb⨯=,则((trABtrBA=。
分析如下:
11121212221
⎢⎥
111212122212
(mmijnm
nnnmbbbbbbBbbbb⨯⎡⎤⎢⎥⎢⎥==⎢⎥
图3.11
(m
ji
ijtrABab
∑∑
111212122212(mmijnm
图4.11
(n
m
jiij
jitrBAba===
第二部分:
奇异值分解
本部分主要在矩阵奇异值分解(SingularValueDecompositionUSVD=的基础之上,从理论上分析降维之后信息到底损失了多少,以及为什么要选取奇异值最大的那部分矩阵块;
紧接着,举个例子来展示取不同奇异值的情况下,信息损失了多少,让大家进一步直观地理解其中的机理。
2.1矩阵U的奇异值分解:
USVD=
设矩阵mn
UR
⨯∈(mn>
奇异值分解为:
USVD=;
其中,mmSR⨯∈,mn
VR⨯∈,
nnDR⨯∈,如下式所示:
111121111
1211112122
1222221
22221222121
212
0000000
0mmnmmnnnnnmnmmmmnnnnvuuusssdddvuuusssdddvuuusssddd⎡⎤
⎢⎥⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⨯⨯⎢
⎢⎥⎢⎥⎢⎥
⎢⎥⎢⎥⎢
⎥⎢⎥
⎢⎥⎣⎦⎣⎦⎣⎦
⎥⎣⎦
其中,矩阵S和D都是正交矩阵,即
TmSSI=,TmSSI=,TnDDI=,TnDDI=,
矩阵S和D的行之间相互正交,列之间也相互正交,且行向量为单位向量,列向量也为单位向量。
奇异值分解过程如图5所示。
图5.U=SVD
矩阵U奇异值分解之后,矩阵V可以分成两块,一个n阶的对角矩阵(对角元素为U的n个奇异值和一个全零矩阵;
这样的话,通过矩阵分块理论,可以把奇异值分解简化,如图6所示。
图6.矩阵分块简化奇异值分解
注意,在这里,矩阵U的奇异值分解我并没有强调V矩阵的对角元素非要按照从大到小排列,可以是随意的。
因此,进一步对矩阵进行分块,将矩阵V分解成两块对角矩阵,矩阵S和D作相应的分块,如图7所示。
数学形式如下:
111222[,]VODUSSOVD⎡⎤⎡⎤
=⎢⎥⎢⎥
111211222[,]DSVSOSOSVD⎡⎤
=++⎢⎥⎣⎦
111222[,]DSVSVD⎡⎤
=⎢⎥⎣⎦
111222SVDSVD=+
图7.矩阵分块变换奇异值分解形式
因1S和2S的列向量相互正交,且为单位向量,故有
(1,2T
iiSSIi==;
同理,1D和2D的行向量相互正交,且为单位向量,故有(1,2TiiDDIi==。
2.2矩阵U的近似奇异值分解:
111USVD≈
在实际应用中,往往通过矩阵的近似分解来达到降维的目的,从而可以进行数据压缩。
这样,一方面节省了存储空间,另一方面也将节省计算资源;
最重要的一点,在某些应用(如信息检索,文本分类聚类中,可以挖掘数据中潜在的语义结构,继而更深一步探讨事物的本质是什么。
但是,矩阵的近似分解会丢失掉一部分信息,怎样分解才能使得信息量丢失的最少同时又有降维的目的呢?
定量层面上又丢失多少呢?
下面我们来从理论上分析下这些问题。
上面已经给出了矩阵U的奇异值分解形式以及分块后的变形形式(如图7所示。
假设将其降到r维空间下,则有:
如图7所示,矩阵U近似成左边三个矩阵1S,1V和1D的乘积了,具体如图8所示。
图8.111USVD≈
这样的话,就损失了最右边的三个矩阵乘积部分,即222SVD。
那么损失的信息量怎么计算呢?
一般可以用矩阵的F-范数来表示。
因此,111USVD≈之后损失的信息量为2
222||||FSVD。
222222222||||[((]TFSVDtrSVDSVD=
222222(TTTtrSVDDVS=
2222(TTtrSVVS=
2222(TTtrSSVV=
22(TtrVV=22211rrnλλλ++=+++
因此,可以看到,损失的信息量即为被“抛弃的奇异值的平方和”!
我们知道,奇异值分解后,矩阵V就是奇异值的“对角矩阵”;
如果我们按照奇异值从大到小排列,取前r个奇异值以及对应的S和D矩阵,那么我们就能最大程度上保留原来的信息量,从而减少了信息的损失量。
这就是为什么以前总是提“按照奇异值从大到小排列,取前r个,这样得到的矩阵近似分解信息损失的最小”的说法了,在这里得到了分析和验证。
下面我们在看看矩阵原始的信息量是多少?
如果猜想一下的话,对,就是所有的奇异值的平方和就是总的信息量!
2||||||||[((]TFFUSVDtrSVDSVD==
(TTTtrSVDDVS=
(TTtrSVVS=
(TTtrSSVV=
(TtrVV=22211nλλλ=+++
因此,111USVD≈的信息损失量为22211rrnλλλ+++++,占总信息量的
22211222
11rrnnλλλλλλ++++++++。
2.3例子演示
此部分主要是随机举个例子来展示下奇异值分解的结果,以及取不同奇异值的情况下信息的损失情况,看看是不是和理论上推导的结论相一致?
理论与例子相结合,进一步加深大家对奇异值分解及其近似的理解。
下面随机举个数据矩阵(12,9data,12行9列,如下所示:
1001000001010000001100000000
110100*********000100100000100100000
011000000100000010000011100
00000111000000011data⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦
Matlab中奇异值分解命令:
[S,V,D]=svd(data
奇异值分解简化命令:
[S,V,D]=svd(data,0
下面通过Matlab代码来展示每当“抛弃”一个奇异值后,其损失量是多少?
Matlab代码:
svd_sample.m
%清屏及变量
clc;
clear;
%数据
data=[100100000
101000000
110000000
011010000
011200000
010010000
001100000
010000001
000001110
000000111
000000011];
%数据大小
[m,n]=size(data
%奇异值分解
%矩阵分解近似优化
len=min(m,n
%损失信息量记录
loss=[]
%对应的奇异值的平方
compare=[]
%奇异值对角化
namda=diag(V
fori=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=
11.16156.46025.54112.70452.26451.70660.7156
0.31380.1323
compare=
ans=
8.9841e-015
显然,理论分析的结论在例子中得到了验证。
第三部分:
潜在语义分析模型LatentSemanticAnalysis此部分主要是举个奇异值分解在实际应用中的例子,来展示下矩阵近似分解在降维以及挖掘语义结构方面上的神奇功能。
1.1问题背景
传统向量空间模型使用精确的词匹配,即精确匹配用户输入的词与向量空间中存在的词。
由于一词多义(polysemy和一义多词(synonymy的存在,使得该模型无法提供给用户语义层面的检索。
比如用户搜索“automobile”,即汽车,传统向量空间模型仅仅会返回包含“automobile”单词的页面,而实际上包含“car”单词的页面也可能是用户所需要的。
LSA(latentsemanticanalysis潜在语义分析,也被称为LSI(latentsemanticindex,是ScottDeerwester,SusanT.Dumais等人在1990年提出来的一种索引和检索方法。
该方法主要是用矩阵的奇异值分解来挖掘文档的潜在语义,和传统向量空间模型(vectorspacemodel一样使用向量来表示词(terms和文档(documents,并通过向量间的关系(如夹角余弦值来判断词及文档间的关系;
而不同的是,LSA将词和文档映射到潜在语义空间,从而去除了原始向量空间中的一些“噪音”,提高了信息检索的精确度。
下面是LSA原始Paper里举的一个例子:
图9文本语料库的观测矩阵:
Document-TermMatrix
上图是一个Term-Document矩阵,X代表该单词出现在对应的文件里,星号表示该词出现在查询(Query中,当用户输入查询“IDFincomputer-basedinformationlookup”时,用户是希望查找与信息检索中IDF(文档频率相关的网页,按照精确词匹配的话,文档2和3分别包含查询中的两个词,因此应该被返回,而文档1不包含任何查询中的词,因此不会被返回。
但我们仔细看看会发现,文档1中的access,retrieval,indexing,database这些词都是和查询相似度十分高的,其中retrieval和lookup是同义词。
显然,从用户的角度看,文档1应该是相关文档,应该被返回。
再来看文档2:
computerinformationtheory,虽然包含查询中的一次词information,但文档2和IDF或信息检索无关,不是用户需要的文档,不应该被返回。
从以上分析可以看出,在本次检索中,和查询相关的文档1并未返回给用户,而与查询无关的文档2却返回给了用户。
这就是同义词和多义词如何导致传统向量空间模型检索精确度的下降。
LSA潜在语义分析的目的,就是要找出词(terms在文档和查询中真正的含义,也就是潜在语义,从而解决上节所描述的问题。
具体说来就是对一个大型的文档集合使用一个合理的维度建模,并将词和文档都表示到该空间,比如有2000个文档,包含7000个索引词,LSA使用一个维度为100的向量空间将文档和词表示到该空间,进而在该空间进行信息检索。
而将文档表示到此空间的过程就是SVD奇异值分解和降维的过程。
降维是LSA分析中最重要的一步,通过降维,去除了文档中的“噪音”,也就是无关信息(比如词的误用或不相关的词偶尔出现在一起,语义结构逐渐呈现。
相比传统向量空间,潜在语义空间的维度更小,语义关系更明确。
1.2实例分析
假设文档集合如下:
c1:
HumanmachineinterfaceforABCcomputerapplications
c2:
Asurveyofuseropinionofcomputersystemresponsetime
c3:
theEPSuserinterfacemanagementsystem
c4:
SystemandhumansystemengineeringtestingofEPS
c5:
Relationofuserperceivedresponsetimetoerrormeasurementm1:
Thegenerationofrandom,binary,orderedtrees
m2:
Theintersectiongraphofpathsintrees
m3:
GraphminorsIV:
Widthsoftreesandwell-quasi-ordering
m4:
Graphminors:
ASurvey
统计的Term-Document矩阵如下:
对其进行奇异值分解:
然后对分解后的矩阵降维,这里保留{S}的最大两个奇异值,相应的{W}{P}矩阵如上图阴影部分,注意{P}在公式中需要转置。
到了这一步后,我们试着将降维后的三个矩阵再乘起来,重新构建{X}矩阵,看看会有什么效果?
观察{X}矩阵和矩阵{}矩阵可以发现:
{X}中human-C2值为0,因为C2中并不包含human单词,但是{}中human-C2为0.40,表明human和C2有一定的关系,为什么呢?
因为C2:
”Asurveyofuseropinionofcomputersystemresponsetime”中包含user单词,和human是近似词,因此human-C2的值被提高了。
同理还可以分析其他在{}中数值改变了的词。
第四部分:
小结
本文档主要在奇异值分解的基础上从理论上分析了矩阵近似降维过程中信息是如何损失的,以及损失了多少,为什么按照奇异值从大到小来选择降维;
紧接着,举例来说明理论上分析的结论;
最后给出了一个简单的应用案例。
ˆXˆX
ˆX
é
11ù
ú
A=ê
ê
11ú
ë
00ú
û
V=ATAé
é
110ù
=é
22ù
AA=ê
11ú
110û
22û
T|lI-ATA|=l(l-4=0l1=4,l2=0ATAv1=l1v1v1=[-1/2,-1/2]Té
-V=[v1,v2]=ê
-ê
1212-1ù
2ú
Tú
UU=I,VVT=I1ú
2ú
1ù
-2ú
1ú
1A=ê
-[2]-2ú
2ê
0ú
-1/2ù
u1=Av1/d1=ê
-1/2ú
-1ù
-1/2é
u2=Av2/d2=ê
1/2ú
A=ê
-1/2ê
0ê
-1/20ù
20ù
-1ê
ê
1/20ú
1-ê
01ú
00ú
2-1ù
0ù
U=[u,u,u]=ê
-1/2u3=ê
123ê
1ú
2||U-S1V1D1||2F=||SVD||F-1/20ù
S0ù
A=Uê
V00ú
||U-O||2F