對于方陣,我們可以将之做特征值分解,分解為
但是這個的前提是B必須是方陣. 那如果B不是方陣,能否類似分解呢???答案是可以。
一、分解原理任何分解都是要有依據的。
之前說線性變換
都是針對單個向量而言:一個向量經過變換變成了一個新的向量。
那多個向量呢?假設多個向量之前是互相正交的,經過變換後:每個都變成了一新的向量。這一組新的向量還是互相正交的嗎?(變換後位置關系維持不變,想到了什麼?正交矩陣的對角化,完事後還是正交的。)
答案:是!也就是說: 一個低維空間的正交向量組,經過線性變換到高維空間後:新的變換後的一組向量依然是彼此正交的!
嚴謹點:對于一個m×n,秩為r的矩陣A (m>n)。我們在
空間中一定可以找到一組
标準正交向量,使在
空間中一定可以找到另一組
标準正交向量,使之滿足n組相等關系:
,其中(i取1~n)。
那我們就利用這個性質來進行分解!
二、分解過程但是這隻是n個元素,但是
沒有出現了?畢竟是空間升維操作,那得考慮進來, 那我們直接暴力加進來:
如上,因為U中增加了m-n個元素,是以對應的右側矩陣也要增加m-n行,增加在最底部.這樣等式才不會有變化.
那我們就可以把這個式子簡化下,寫成
. 那麼
又由于:V和U中的各列向量都互相正交,是以
,那最終
其中:U和V是由标準正交向量構成的m階和n階方陣,而
是一個
m*n的類對角矩陣(注意:底部m-n行是全0行)。
這個結論其實很優美:隻要可以在原低維空間和目标高維空間中各找一組标準正交基,就能得到矩陣A的矩陣分解形式!
至此我們把A分解完畢了:
下一步就是做求解。我們熟悉的是特征值分解,就是對【方陣】做分解,那可以用A構造一個方陣看看,怎麼構造呢?想起一個性質:任何一個矩陣乘以其轉置,都是一個對稱方陣.那麼:
這樣的話我們得到兩個式子:
那我們就可以往下來構造對稱
方陣啦:
由于V和U都是正交矩陣,是以
,是以得出:
到這一步:因為
和
都是對稱方陣,是以右側的
和
就是其
對應的特征值分解形式。那求解就簡單了!
求解步驟總結:
- 求出 和
svd奇異值分解_SVD奇異值分解 這兩個方陣來svd奇異值分解_SVD奇異值分解 - 求出這兩個方陣各自的特征值 和 特征向量來!
則:
①
的特征向量矩陣就是我們要求解的U
②
的特征向量矩陣就是我們要求解的V
③他們的特征值構成了
,進而做開方處理就是
但是到這裡,很多人問了:
- 這兩個對稱陣的特征向量一定是對應n個 和m個嗎?
- 這兩個對稱陣的特征向量個數感覺不一樣多啊,為什麼都是 ?
svd奇異值分解_SVD奇異值分解
這裡就用對稱矩陣的性質來回答了:
- 一定含有n個标準正交特征向量
svd奇異值分解_SVD奇異值分解 - 和
svd奇異值分解_SVD奇異值分解 擁有完全相同的r個非零特征值。(各自多出來的n-r和m-r個都是0)svd奇異值分解_SVD奇異值分解
至此,我們求解出了
、
和
, 那麼我們就可以将A如下分解了
其中:
- 是一個m*n矩陣,除了對角線的元素都是0,對角線上的元素稱為 奇異值
svd奇異值分解_SVD奇異值分解 - 是一個n*n的矩陣,裡面的向量是正交的,V裡面的向量稱為 右奇異向量
svd奇異值分解_SVD奇異值分解 - 是一個m*m的矩陣,裡面的向量是正交的,U裡面的向量稱為 左奇異向量
svd奇異值分解_SVD奇異值分解
以上的奇異值分解是建立在:正交基升維後依舊可以正交 這個性質基礎上推導出來的。了解起來可能不那麼直覺,有什麼直覺的辦法嗎?我們可以從四大子空間的次元來看看:
之前講過矩陣的四大基礎子空間如下:
如果從這個次元來了解奇異值分解,該如何了解呢?
首先:矩陣本質是映射,那麼
首先,我們對
做一下拆分,變成
而
,是以可以舍棄這一部分。
是以對于
而言:我們是需要先将其變換(投影)到 對應的行空間
。
那很顯然:
- 變換(投影)到 對應行空間 : 這個轉換是A矩陣工作的一部分。
svd奇異值分解_SVD奇異值分解 - 這個投影轉換是從n維轉為r維. 實作這個是需要一個 (r*n矩陣)來工作。
svd奇異值分解_SVD奇異值分解
步驟二、
A還負責将之轉到B,這一步是要做空間轉換,轉到
空間. 而上一步驟中輸出的是一個r維向量。 那總結起來就是:要把一個r維向量映射到一個
空間中。 這顯然需要一個
(m*r矩陣)來完成.
步驟三、
本質上上邊兩步驟就可以完成這個轉化,那我們是不是就可以把A拆分成這兩步呢?
進而
轉為
,這跟我們剛才的想法是一緻的。
但是我們還想簡化一下, 在上述
這兩個矩陣的轉換運算中,可能同時包含旋轉、剪切、拉伸等。 我們單獨把拉伸抽取出來,寫成一個對角陣
, 且這個是一個r*r的矩陣。 那麼上述過程就可以改成:
進而
轉為
。
這一拉伸的步驟:是在A的
列空間上做的。
綜上,我們把矩陣運算分解為三個步驟:
- 投影到 行空間 (需要r*n矩陣)
svd奇異值分解_SVD奇異值分解 - 在行空間做拉伸 (需要r*r對角陣)
- 轉換到 列空間. (需要m*r矩陣)
svd奇異值分解_SVD奇異值分解
總結:通過以上步驟,我們可以把一個矩陣 轉成 三個矩陣的乘法,這個有點類似“奇異值分解”,這從子空間的角度來看就比較容易了解,本質就是一個行空間->列空間的映射轉換過程。
但是這裡還有個問題:正常的奇異值分解的式子樣式是:
,他們的拆解形式是:
這兩種形式是一樣的嗎??有什麼關聯呢??
思考:如何了解關聯性?我們比較下兩個式子:
式①、
式②、
把關系放在同一張圖裡,如下:
之前我們把r認為是秩,如果這個r變成一個大小可調節的數呢? 比如秩是4,但是我可以讓r=1或r=2或者r=3呢?
正兒八經的奇異值分解:資料量顯然太大(上圖中包含虛線框内的
和
),那我們怎麼降低這個資料量呢?或者說:怎麼降維呢?
套用一個知乎部落客的示意圖,降維表示為:
辦法:增大
和
的份額。那就是讓r盡可能小:
- 對于 行空間而言:r越小,這樣
svd奇異值分解_SVD奇異值分解 越大, 向量svd奇異值分解_SVD奇異值分解 分解丢失的資訊就越多svd奇異值分解_SVD奇異值分解 - 映射到 後,因為是升空間次元操作,是以不存在資料丢失問題,而是1:1映射的。是以
svd奇異值分解_SVD奇異值分解 越小,則svd奇異值分解_SVD奇異值分解 就會越小,svd奇異值分解_SVD奇異值分解 會越大。svd奇異值分解_SVD奇異值分解
是以本質上:先是有了奇異值分解,随後才有四大子空間角度的動态變換解釋! (
而不是反過來從子空間變換角度去倒推奇異值分解的實作)
- 子空間角度:給出了奇異值降維的方案:減小r值.
- 而減少r值:本質就是減少特征值個數. 也就是挑選主元.(跟PCA一緻)
再強調一下:【子空間表達形式】是【奇異值分解】的動态降維的操作方案!
是以我們可以得出一個式子:
前者是【奇異值分解形式】,後者是對其降維後的表達形式!r越大則越接近。