奇異值分解的理解與oepncv程式碼
特徵分解的缺點
特徵分解的推導與意義與opencv程式碼在上一篇部落格中介紹了特徵分解的原理和推導,特徵分解在一定的情況下可以很好的分解(實對稱矩陣),但是也有很大的侷限性
1. 只能對可對角化的方陣使用
2. 在可以對角化的情況下,特徵向量之間也不一定相互正交
為了克服這些缺點,我們便在尋找對一個任意的M*N的矩陣都能找到一個類似特徵分解的公式(以下的是我的理解,如果有錯歡迎指出):
1.特徵分解所幹的事情:將在以I為基底的情況下,轉換到以特徵向量為基底的表示方法,並且將之在特徵向量的方向上進行特徵值倍的拉伸,最終再轉換回以I為基底的表示方法。換一個說法就是一個可以對角化的矩陣A的作用便是:對一個基底進行拉伸,即 。
2.我們在尋找的對任意矩陣都適用的類似的方法:由於不是所有矩陣都可以找到一個基底,並且對這個基底進行拉伸一定倍數便等於A的效果,例如,P不存在逆的情況。此時我們的目標變成將在以I為正交基底的情況下,轉換到另一個正交基底,再拉伸一定倍數再旋轉一定的角度(在特徵分解裡對映到原來的基底I可以看成是旋轉一個比較特殊的角度),所產生的效果和與矩陣A直接相乘的效果是一樣的。換一個說法就是將一個單位正交基底經過A的對映到另一個正交基底,將拉伸的倍數提取出來,使新基底仍然是單位基底。
- PS:第一種說法是我根據特徵分解的思路去理解svd分解每個矩陣代表的意義,第二種說法是根據另一篇部落格的證明思路去理解的。我不知道兩種思路是否都正確,歡迎指出錯誤。
- 第一種思路 :從右到左,第一個矩陣代表將從基底I轉換到基底V,第二個矩陣代表在V基底下的一定的拉伸,U是一個單位正交矩陣(因為旋轉矩陣一定是單位正交矩陣,但是單位旋轉矩陣是否是正交矩陣我不確定,假設是吧),那麼U的作用便是一個旋轉。
- 第二種思路 :等式左邊是一個正交基底,經過A的轉換到另一個正交基底,同時把拉伸倍數提取出來,則成為了 。從這個角度來說,應該是任何一個矩陣的作用都是對某個基底旋轉加拉伸,而可對角化的矩陣的作用剛好是旋轉的角度為0,而對角矩陣的基底剛剛好是I,所以作用只是對各個軸上進行拉伸。
其實svd正是在做這麼一件事情,以下的推導用第二種思路(畢竟是看別人部落格的)。
奇異值分解(SVD)
將奇異分解所做的事情寫成數學表示式,即為
V是一個正交基底,U也是一個正交基底,
是一個對角陣,對角線上的值為U裡的每個列向量的拉伸倍數。我們的目標就是找到
這個三個矩陣。
接下來尋找一下這三個矩陣
1. 具體怎麼選取正交基底V我也不太清楚,不過前人已經幫我們找到了,就是 的單位特徵向量
( ),並且各個列向量都是正交的(因為 是一個實對稱陣),即
2. 則A矩陣會將這組基底對映成 ,對映後的各個列向量依然是正交的,即
3.到此,我們已經證明了AV的基底也是正交的,即U的每一列都是正交的,即 接下來是將U給單位化,因為我們的目的是得到單位正交基底。
已知
又
可以得到
則令 (由於 的模長與 相等,則 一定為與