天天看點

svd奇異值分解_SVD奇異值分解

對于方陣,我們可以将之做特征值分解,分解為

svd奇異值分解_SVD奇異值分解

但是這個的前提是B必須是方陣. 那如果B不是方陣,能否類似分解呢???答案是可以。

一、分解原理

任何分解都是要有依據的。

之前說線性變換

svd奇異值分解_SVD奇異值分解

都是針對單個向量而言:一個向量經過變換變成了一個新的向量。

那多個向量呢?假設多個向量之前是互相正交的,經過變換後:每個都變成了一新的向量。這一組新的向量還是互相正交的嗎?(變換後位置關系維持不變,想到了什麼?正交矩陣的對角化,完事後還是正交的。)

答案:是!也就是說: 一個低維空間的正交向量組,經過線性變換到高維空間後:新的變換後的一組向量依然是彼此正交的!

嚴謹點:對于一個m×n,秩為r的矩陣A (m>n)。我們在

svd奇異值分解_SVD奇異值分解

空間中一定可以找到一組

标準正交向量
svd奇異值分解_SVD奇異值分解

,使在

svd奇異值分解_SVD奇異值分解

空間中一定可以找到另一組

标準正交向量
svd奇異值分解_SVD奇異值分解

,使之滿足n組相等關系:

svd奇異值分解_SVD奇異值分解

,其中(i取1~n)。

那我們就利用這個性質來進行分解!

二、分解過程
svd奇異值分解_SVD奇異值分解
svd奇異值分解_SVD奇異值分解
svd奇異值分解_SVD奇異值分解

但是這隻是n個元素,但是

svd奇異值分解_SVD奇異值分解

沒有出現了?畢竟是空間升維操作,那得考慮進來, 那我們直接暴力加進來:

svd奇異值分解_SVD奇異值分解

如上,因為U中增加了m-n個元素,是以對應的右側矩陣也要增加m-n行,增加在最底部.這樣等式才不會有變化.

那我們就可以把這個式子簡化下,寫成

svd奇異值分解_SVD奇異值分解

. 那麼

svd奇異值分解_SVD奇異值分解

又由于:V和U中的各列向量都互相正交,是以

svd奇異值分解_SVD奇異值分解

,那最終

svd奇異值分解_SVD奇異值分解

其中:U和V是由标準正交向量構成的m階和n階方陣,而

svd奇異值分解_SVD奇異值分解

是一個

m*n的類對角矩陣

(注意:底部m-n行是全0行)。

這個結論其實很優美:隻要可以在原低維空間和目标高維空間中各找一組标準正交基,就能得到矩陣A的矩陣分解形式!

至此我們把A分解完畢了:

svd奇異值分解_SVD奇異值分解
三、求解U、V和
svd奇異值分解_SVD奇異值分解
的值.

下一步就是做求解。我們熟悉的是特征值分解,就是對【方陣】做分解,那可以用A構造一個方陣看看,怎麼構造呢?想起一個性質:任何一個矩陣乘以其轉置,都是一個對稱方陣.那麼:

svd奇異值分解_SVD奇異值分解

這樣的話我們得到兩個式子:

svd奇異值分解_SVD奇異值分解

那我們就可以往下來構造對稱

方陣

啦:

svd奇異值分解_SVD奇異值分解

由于V和U都是正交矩陣,是以

svd奇異值分解_SVD奇異值分解

,是以得出:

svd奇異值分解_SVD奇異值分解

到這一步:因為

svd奇異值分解_SVD奇異值分解

svd奇異值分解_SVD奇異值分解

都是對稱方陣,是以右側的

svd奇異值分解_SVD奇異值分解

svd奇異值分解_SVD奇異值分解

就是其

對應的特征值分解形式

。那求解就簡單了!

求解步驟總結

  1. 求出
    svd奇異值分解_SVD奇異值分解
    svd奇異值分解_SVD奇異值分解
    這兩個方陣來
  2. 求出這兩個方陣各自的特征值 和 特征向量來!

則:

svd奇異值分解_SVD奇異值分解

的特征向量矩陣就是我們要求解的U

svd奇異值分解_SVD奇異值分解

的特征向量矩陣就是我們要求解的V

③他們的特征值構成了

svd奇異值分解_SVD奇異值分解

,進而做開方處理就是

svd奇異值分解_SVD奇異值分解

但是到這裡,很多人問了:

  1. 這兩個對稱陣的特征向量一定是對應n個 和m個嗎?
  2. 這兩個對稱陣的特征向量個數感覺不一樣多啊,為什麼都是
    svd奇異值分解_SVD奇異值分解

這裡就用對稱矩陣的性質來回答了:

  1. svd奇異值分解_SVD奇異值分解
    一定含有n個标準正交特征向量
  2. svd奇異值分解_SVD奇異值分解
    svd奇異值分解_SVD奇異值分解
    擁有完全相同的r個非零特征值。(各自多出來的n-r和m-r個都是0)

至此,我們求解出了

svd奇異值分解_SVD奇異值分解

svd奇異值分解_SVD奇異值分解

svd奇異值分解_SVD奇異值分解

, 那麼我們就可以将A如下分解了

svd奇異值分解_SVD奇異值分解

其中:

  1. svd奇異值分解_SVD奇異值分解
    是一個m*n矩陣,除了對角線的元素都是0,對角線上的元素稱為 奇異值
  2. svd奇異值分解_SVD奇異值分解
    是一個n*n的矩陣,裡面的向量是正交的,V裡面的向量稱為 右奇異向量
  3. svd奇異值分解_SVD奇異值分解
    是一個m*m的矩陣,裡面的向量是正交的,U裡面的向量稱為 左奇異向量
svd奇異值分解_SVD奇異值分解
四、用子空間來了解奇異值分解

以上的奇異值分解是建立在:正交基升維後依舊可以正交 這個性質基礎上推導出來的。了解起來可能不那麼直覺,有什麼直覺的辦法嗎?我們可以從四大子空間的次元來看看:

之前講過矩陣的四大基礎子空間如下:

svd奇異值分解_SVD奇異值分解

如果從這個次元來了解奇異值分解,該如何了解呢?

首先:矩陣本質是映射,那麼

svd奇異值分解_SVD奇異值分解
步驟一、
svd奇異值分解_SVD奇異值分解

首先,我們對

svd奇異值分解_SVD奇異值分解

做一下拆分,變成

svd奇異值分解_SVD奇異值分解

svd奇異值分解_SVD奇異值分解

,是以可以舍棄這一部分。

是以對于

svd奇異值分解_SVD奇異值分解

而言:我們是需要先将其變換(投影)到 對應的行空間

svd奇異值分解_SVD奇異值分解

那很顯然:

  1. 變換(投影)到 對應行空間
    svd奇異值分解_SVD奇異值分解
    : 這個轉換是A矩陣工作的一部分。
  2. 這個投影轉換是從n維轉為r維. 實作這個是需要一個
    svd奇異值分解_SVD奇異值分解
    (r*n矩陣)來工作。

步驟二、

A還負責将之轉到B,這一步是要做空間轉換,轉到

svd奇異值分解_SVD奇異值分解

空間. 而上一步驟中輸出的是一個r維向量。 那總結起來就是:要把一個r維向量映射到一個

svd奇異值分解_SVD奇異值分解

空間中。 這顯然需要一個

svd奇異值分解_SVD奇異值分解

(m*r矩陣)來完成.

步驟三、

本質上上邊兩步驟就可以完成這個轉化,那我們是不是就可以把A拆分成這兩步呢?

svd奇異值分解_SVD奇異值分解

進而

svd奇異值分解_SVD奇異值分解

轉為

svd奇異值分解_SVD奇異值分解

,這跟我們剛才的想法是一緻的。

但是我們還想簡化一下, 在上述

svd奇異值分解_SVD奇異值分解

這兩個矩陣的轉換運算中,可能同時包含旋轉、剪切、拉伸等。 我們單獨把拉伸抽取出來,寫成一個對角陣

svd奇異值分解_SVD奇異值分解

, 且這個是一個r*r的矩陣。 那麼上述過程就可以改成:

svd奇異值分解_SVD奇異值分解

進而

svd奇異值分解_SVD奇異值分解

轉為

svd奇異值分解_SVD奇異值分解

這一拉伸的步驟:是在A的

svd奇異值分解_SVD奇異值分解

列空間上做的。

綜上,我們把矩陣運算分解為三個步驟:

  1. 投影到
    svd奇異值分解_SVD奇異值分解
    行空間 (需要r*n矩陣)
  2. 在行空間做拉伸 (需要r*r對角陣)
  3. 轉換到
    svd奇異值分解_SVD奇異值分解
    列空間. (需要m*r矩陣)
svd奇異值分解_SVD奇異值分解

總結:通過以上步驟,我們可以把一個矩陣 轉成 三個矩陣的乘法,這個有點類似“奇異值分解”,這從子空間的角度來看就比較容易了解,本質就是一個行空間->列空間的映射轉換過程。

但是這裡還有個問題:正常的奇異值分解的式子樣式是:

svd奇異值分解_SVD奇異值分解

,他們的拆解形式是:

svd奇異值分解_SVD奇異值分解

這兩種形式是一樣的嗎??有什麼關聯呢??

思考:如何了解關聯性?

我們比較下兩個式子:

式①、

svd奇異值分解_SVD奇異值分解

式②、

svd奇異值分解_SVD奇異值分解

把關系放在同一張圖裡,如下:

svd奇異值分解_SVD奇異值分解

之前我們把r認為是秩,如果這個r變成一個大小可調節的數呢? 比如秩是4,但是我可以讓r=1或r=2或者r=3呢?

正兒八經的奇異值分解:資料量顯然太大(上圖中包含虛線框内的

svd奇異值分解_SVD奇異值分解

svd奇異值分解_SVD奇異值分解

),那我們怎麼降低這個資料量呢?或者說:怎麼降維呢?

套用一個知乎部落客的示意圖,降維表示為:

svd奇異值分解_SVD奇異值分解

辦法:增大

svd奇異值分解_SVD奇異值分解

svd奇異值分解_SVD奇異值分解

的份額。那就是讓r盡可能小:

  1. 對于
    svd奇異值分解_SVD奇異值分解
    行空間而言:r越小,這樣
    svd奇異值分解_SVD奇異值分解
    越大, 向量
    svd奇異值分解_SVD奇異值分解
    分解丢失的資訊就越多
  2. 映射到
    svd奇異值分解_SVD奇異值分解
    後,因為是升空間次元操作,是以不存在資料丢失問題,而是1:1映射的。是以
    svd奇異值分解_SVD奇異值分解
    越小,則
    svd奇異值分解_SVD奇異值分解
    就會越小,
    svd奇異值分解_SVD奇異值分解
    會越大。

是以本質上:先是有了奇異值分解,随後才有四大子空間角度的動态變換解釋! (

而不是反過來從子空間變換角度去倒推奇異值分解的實作

)

  1. 子空間角度:給出了奇異值降維的方案:減小r值.
  2. 而減少r值:本質就是減少特征值個數. 也就是挑選主元.(跟PCA一緻)

再強調一下:【子空間表達形式】是【奇異值分解】的動态降維的操作方案!

是以我們可以得出一個式子:

svd奇異值分解_SVD奇異值分解
svd奇異值分解_SVD奇異值分解

前者是【奇異值分解形式】,後者是對其降維後的表達形式!r越大則越接近。