第一部分:预备知识1.1 矩阵的F-范数与矩阵迹的关系引理:设m nA R⨯∈,令()ij m n A a ⨯=,则2211||||||()()m nT T Fiji j A atr AA tr A A =====∑∑;其中,()tr ∙定义如下:令方阵111212122212r r r r rr m m m m m m M m m m ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦,则11221()r rr iii tr M m m m m ==+++=∑ ,即矩阵M 的迹。
注意,()tr ∙只能作用于方阵。
那么,下面来看下为什么有2211||||||()()m nT T Fiji j A atr AA tr A A =====∑∑?首先,2211||||||m nFiji j A a===∑∑这个等式是矩阵F-范数的定义,即一个矩阵的F-范数等于矩阵中每个元素的平方和。
其次,因111212122212()n n ij m nm m mn a a a a a a A a a a a ⨯⎡⎤⎢⎥⎢⎥==⎢⎥⎢⎥⎣⎦ ,则112111222212m m T n n mn a a a a a a A a a a ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦,易得2211()()||||||mnT TijF i j tr AA tr A A aA =====∑∑。
(T AA 或TA A 的第r 个对角元素等于第r行或列元素的平方和,所有对角元素之和就是矩阵每个元素的平方和,即有上式成立。
)此过程如图1和图2所示。
111211121121222122221212n m n m T m m mn n n mn a a a a a a a a a a a a AA a a a a a a ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⨯⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦图1. T AA 方阵迹的形成过程112111112112222212221212m n m n T n n mn m m mn a a a a a a a a a a a a A A a a a a a a ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⨯⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦图2. T A A 方阵迹的形成过程1.2 矩阵AB 的迹等于矩阵BA 的迹设m nA R ⨯∈,n mB R⨯∈,令()ij m nA a ⨯=,()ij n mB b ⨯=,则()()tr AB tr BA =。
分析如下:111212122212()n n ij m nm m mn a a a a a a A a a a a ⨯⎡⎤⎢⎥⎢⎥==⎢⎥⎢⎥⎣⎦111212122212()m m ij n mn n nm b b b b b b B b b b b ⨯⎡⎤⎢⎥⎢⎥==⎢⎥⎢⎥⎣⎦图3. 11()mnijjii j tr AB a b===∑∑111212122212()m m ij n mn n nm b b b b b b B b b b b ⨯⎡⎤⎢⎥⎢⎥==⎢⎥⎢⎥⎣⎦111212122212()n n ij m nm m mn a a a a a a A a a a a ⨯⎡⎤⎢⎥⎢⎥==⎢⎥⎢⎥⎣⎦图4. 11()nmji ijj i tr BA b a ===∑∑第二部分:奇异值分解本部分主要在矩阵奇异值分解(Singular Value Decomposition )U SVD =的基础之上,从理论上分析降维之后信息到底损失了多少,以及为什么要选取奇异值最大的那部分矩阵块;紧接着,举个例子来展示取不同奇异值的情况下,信息损失了多少,让大家进一步直观地理解其中的机理。
2.1 矩阵U 的奇异值分解:U SVD =设矩阵m nU R⨯∈()m n >,奇异值分解为:U SVD =;其中,m m S R ⨯∈,m nV R ⨯∈,n n D R ⨯∈,如下式所示:111121111121111212212222212222122212121200000000m m n m m n nn n n mn m m mm n n nn v u u u s s s d d d v u u u s s s d d d v u u u s s s d d d ⎡⎤⎢⎥⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⨯⨯⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦⎢⎥⎣⎦其中,矩阵S 和D 都是正交矩阵,即T m S S I =,T m SS I =,T n DD I =,T n D D I =,矩阵S和D的行之间相互正交,列之间也相互正交,且行向量为单位向量,列向量也为单位向量。
奇异值分解过程如图5所示。
图5. U=SVD矩阵U奇异值分解之后,矩阵V可以分成两块,一个n阶的对角矩阵(对角元素为U的n个奇异值)和一个全零矩阵;这样的话,通过矩阵分块理论,可以把奇异值分解简化,如图6所示。
图6. 矩阵分块简化奇异值分解注意,在这里,矩阵U 的奇异值分解我并没有强调V 矩阵的对角元素非要按照从大到小排列,可以是随意的。
因此,进一步对矩阵进行分块,将矩阵V 分解成两块对角矩阵,矩阵S 和D 作相应的分块,如图7所示。
数学形式如下:111222[,]V O D U S S O V D ⎡⎤⎡⎤=⎢⎥⎢⎥⎣⎦⎣⎦111211222[,]D S V S O S O S V D ⎡⎤=++⎢⎥⎣⎦111222[,]D S V S V D ⎡⎤=⎢⎥⎣⎦111222S V D S V D =+图7. 矩阵分块变换奇异值分解形式因1S 和2S 的列向量相互正交,且为单位向量,故有(1,2)Ti i S S I i ==;同理,1D 和2D 的行向量相互正交,且为单位向量,故有(1,2)T i i D D I i ==。
2.2矩阵U 的近似奇异值分解:111U S V D ≈在实际应用中,往往通过矩阵的近似分解来达到降维的目的,从而可以进行数据压缩。
这样,一方面节省了存储空间,另一方面也将节省计算资源;最重要的一点,在某些应用(如信息检索,文本分类聚类)中,可以挖掘数据中潜在的语义结构,继而更深一步探讨事物的本质是什么。
但是,矩阵的近似分解会丢失掉一部分信息,怎样分解才能使得信息量丢失的最少同时又有降维的目的呢?定量层面上又丢失多少呢?下面我们来从理论上分析下这些问题。
上面已经给出了矩阵U 的奇异值分解形式以及分块后的变形形式(如图7所示)。
假设将其降到r 维空间下,则有:111U S V D ≈如图7所示,矩阵U 近似成左边三个矩阵1S ,1V 和1D 的乘积了,具体如图8所示。
图8. 111U S V D ≈这样的话,就损失了最右边的三个矩阵乘积部分,即222S V D 。
那么损失的信息量怎么计算呢?一般可以用矩阵的F-范数来表示。
因此,111U S V D ≈之后损失的信息量为2222||||F S V D 。
2222222222||||[()()]TF S V D tr S V D S V D =222222()T T Ttr S V D D V S =2222()T T tr S V V S =2222()TT tr S S V V =22()T tr V V =22211r r n λλλ++=+++因此,可以看到,损失的信息量即为被“抛弃的奇异值的平方和”!我们知道,奇异值分解后,矩阵V 就是奇异值的“对角矩阵”;如果我们按照奇异值从大到小排列,取前r 个奇异值以及对应的S 和D 矩阵,那么我们就能最大程度上保留原来的信息量,从而减少了信息的损失量。
这就是为什么以前总是提“按照奇异值从大到小排列,取前r 个,这样得到的矩阵近似分解信息损失的最小”的说法了,在这里得到了分析和验证。
下面我们在看看矩阵原始的信息量是多少?如果猜想一下的话,对,就是所有的奇异值的平方和就是总的信息量!22||||||||[()()]TF F U SVD tr SVD SVD ==()T T T tr SVDD V S =()T T tr SVV S =()T T tr S SVV =()T tr VV =22211n λλλ=+++因此,111U S V D ≈的信息损失量为22211r r n λλλ+++++ ,占总信息量的2221122211r r n n λλλλλλ++++++++ 。
2.3 例子演示此部分主要是随机举个例子来展示下奇异值分解的结果,以及取不同奇异值的情况下信息的损失情况,看看是不是和理论上推导的结论相一致?理论与例子相结合,进一步加深大家对奇异值分解及其近似的理解。
下面随机举个数据矩阵(12,9)data ,12行9列,如下所示:100100000101000000110000000011010000011200000010010000010010000001100000010000001000001110000000111000000011data ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦Matlab 中奇异值分解命令:[S,V,D]=svd(data)奇异值分解简化命令:[S,V,D]=svd(data,0)下面通过Matlab代码来展示每当“抛弃”一个奇异值后,其损失量是多少?Matlab代码:svd_sample.m% 清屏及变量clc;clear;% 数据data=[ 1 0 0 1 0 0 0 0 01 0 1 0 0 0 0 0 01 1 0 0 0 0 0 0 00 1 1 0 1 0 0 0 00 1 1 2 0 0 0 0 00 1 0 0 1 0 0 0 00 1 0 0 1 0 0 0 00 0 1 1 0 0 0 0 00 1 0 0 0 0 0 0 10 0 0 0 0 1 1 1 00 0 0 0 0 0 1 1 10 0 0 0 0 0 0 1 1];% 数据大小[m,n]=size(data)% 奇异值分解[S,V,D]=svd(data,0)% 矩阵分解近似优化len=min(m,n)% 损失信息量记录loss=[]% 对应的奇异值的平方compare=[]% 奇异值对角化namda=diag(V)fori=1:lenloss=[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.1615 6.4602 5.5411 2.7045 2.2645 1.7066 0.71560.3138 0.1323compare =11.1615 6.4602 5.5411 2.7045 2.2645 1.7066 0.71560.3138 0.1323ans =8.9841e-015显然,理论分析的结论在例子中得到了验证。