文章目錄
- 一、概述
- 二、SVD奇異值分解
- 1. A v = σ u Av=\sigma u Av=σu 公式
- 2.矩陣分解
- 3.將結果進行降維
- 3.1 行壓縮資料降維
- 3.2 列壓縮資料降維
- 3.3 矩陣整體壓縮資料降維
歡迎回到機器學習編程系列,在這篇文章中,我們將講解使用奇異值分解進行PCA降維處理,廢話不多說,我們開始吧,

一、概述
之前講了一種方法叫做特征值分解,它是將我們的協方差矩陣進行分解,但是這時會有一定的約束條件才可以進行分解
- 必須是方陣
- 能夠被對角化
這兩個要求是相對來說較高的,對于協方差矩陣是方陣,而且是對稱矩陣,實對稱矩陣一定可以對角化,但是如果對于一般形狀的矩陣能不能仍對其進行分解呢?
答案是肯定的,本文將講解如何使用大殺器SVD對一般形式的矩陣進行分解,
對于之前講的特征值分解,我們的目標就是找到一個映射矩陣P,然后將其與原資料A進行相乘,從而實作降維的效果,其實SVD也是這樣,也是要找到一個映射矩陣,只不過是這兩種方法找這個映射矩陣的方式不同,特征值分解是將協方差矩陣C進行分解,而我們的奇異值分解是直接分解原資料樣本A,
接下來就具體講解一下SVD是如何分解矩陣的,
二、SVD奇異值分解
1. A v = σ u Av=\sigma u Av=σu 公式
該公式非常重要,第一眼看起來它是不是有點像特征方程 A x = λ x Ax=\lambda x Ax=λx ,其實特征多項式知識該式子的特殊情況,當 v = u v=u v=u 時,就變成了特征多項式,
為了講述方便,這里先做一些約定:
- 假設A的形狀為(m,n)
- 矩陣的秩為r
- r<=n<=m
如果是這樣,我們一定可以找到n組等式符合 A v = σ u Av=\sigma u Av=σu ,我們的矩陣A為m行n列,而且行數大于列數,所以矩陣A的作用就是將一個向量從n維映射到更高的m維度,為什么呢?
A為(m,n),如果此時向量x為(n,1),將Ax做乘法,得到的結果就是(m,1),這樣x經過矩陣A的作用就從原來的n維升到了m維,
那么對應 A v = σ u Av=\sigma u Av=σu 這個式子,也就是經過A的作用,我們將n維向量v映射到了m維向量u,那么也就是說我一定可以在原來的n維空間內找到一組標準正交向量 v 1 , v 2 , . . . , v n v_1,v_2,...,v_n v1?,v2?,...,vn? ,和在映射后的m維空間內找到一組標準正交向量 u 1 , u 2 , . . . , u m u_1,u_2,...,u_m u1?,u2?,...,um? 使之滿足 A v i = σ i u i Av_i=\sigma_i u_i Avi?=σi?ui? ,(其中i=1,2,…,n),共有n組方程,
那么這n組線性變換的結果就是將m維空間中的基向量 u i u_i ui? ,沿著自身的方向延長 σ i \sigma_i σi? 倍,
我們可以將上面得到的結果寫成:
A
V
=
σ
U
A
[
v
1
v
2
v
3
?
v
n
]
=
[
u
1
u
2
u
3
?
u
n
]
[
σ
1
0
?
0
σ
2
?
?
σ
n
]
AV=\sigma U\\ A\begin{bmatrix} v_1&v_2&v_3&\cdots&v_n \end{bmatrix}= \begin{bmatrix} u_1&u_2&u_3&\cdots&u_n \end{bmatrix} \begin{bmatrix} \sigma_1&0&\cdots\\ 0&\sigma_2\\ \vdots&\cdots&\sigma_n\\ \end{bmatrix}
AV=σUA[v1??v2??v3????vn??]=[u1??u2??u3????un??]????σ1?0??0σ2????σn??????
但是我們上面說到m是大于n的,所以說
u
n
+
1
,
.
.
.
u
m
u_{n+1},...u_m
un+1?,...um? 這些還沒有添加進去,所以將這些添加到矩陣U的右側,然后再
σ
\sigma
σ 矩陣的下面全部補0,使維度符合要求,那么此時的
σ
\sigma
σ 矩陣就變成了m*n,我們最終得到的就是:
A
V
=
U
Σ
AV=U\Sigma
AV=UΣ
因為我們之前講過由于矩陣V的各列是標準正交的特征向量,所以滿足等式
V
?
1
=
V
T
V^{-1}=V^T
V?1=VT ,所以上面的式子可以變成 :
A
=
U
Σ
V
T
A=U\Sigma V^T
A=UΣVT
這就是我們最終需要的分解式子,任何形狀的矩陣A都可以利用該式子進行分解,
- A:m*n
- U:m*m
- Σ \Sigma Σ :m*n
- V T V^T VT :n*n
其中U矩陣是對應m個m維的標準正交向量,而 V T V^T VT 則對應著 n個n維的標準正交向量, Σ \Sigma Σ 是一個m行n列的對角矩陣,
此時的問題就是,我們已經找到了一種方程形式進行矩陣A的分解,那么我們 U 、 V 、 Σ U、V、\Sigma U、V、Σ 分別對應什么呢?
接下來就講講如果獲得等式右邊的內容,
2.矩陣分解
對于該式子的結論非常好,同時也給我們指明了如何尋找其解,就是原n維空間找到n組標準正交向量,和目標m維空間找到m組標準正交向量,那具體怎么找呢?接下來進行講解
A
=
U
Σ
V
T
A=U\Sigma V^T
A=UΣVT
我們利用矩陣轉置這條性質,將矩陣A進行轉置,得到:
A
T
=
(
U
Σ
V
T
)
T
=
V
Σ
T
U
T
A^T=(U\Sigma V^T)^T=V\Sigma^TU^T
AT=(UΣVT)T=VΣTUT
我們此時將兩個矩陣進行乘法操作,會得到兩個式子:
A
A
T
=
U
Σ
V
T
(
V
Σ
T
U
T
)
=
U
Σ
2
U
T
AA^T=U\Sigma V^T(V\Sigma^TU^T)=U\Sigma^2U^T
AAT=UΣVT(VΣTUT)=UΣ2UT
A
T
A
=
(
V
Σ
T
U
T
)
U
Σ
V
T
=
V
Σ
2
V
T
A^TA=(V\Sigma^TU^T)U\Sigma V^T=V\Sigma^2V^T
ATA=(VΣTUT)UΣVT=VΣ2VT
由于任何矩陣乘以自身的轉置之后得到的都是對稱矩陣,所以可以對角化進行分解,那么就可以輕松的獲得矩陣
U
和
V
U和V
U和V?? ,它們分別對應著兩個對稱矩陣的分解特征向量,而且
Σ
\Sigma
Σ?? 對角線上的元素就是我們對應特征值的開根號,由于矩陣的秩為r,所以
Σ
\Sigma
Σ??? 對角線上的非0特征值分別為:
λ
1
,
λ
2
,
.
.
.
,
λ
r
\sqrt{\lambda_1},\sqrt{\lambda_2},...,\sqrt{\lambda_r}
λ1?
?,λ2?
?,...,λr?
??

3.將結果進行降維
我們現在已經可以將原來的矩陣進行分解,那么如果進行降維操作呢?
SVD對應的降維方式主要有三種:
- 行壓縮資料降維
- 列壓縮資料降維
- 矩陣整體壓縮資料降維
下面分別講述下三種降維方式:
3.1 行壓縮資料降維
從矩陣分解的式子出發,將式子兩端分別左乘 U T U^T UT ,就變成了 U T A = Σ V T U^TA=\Sigma V^T UTA=ΣVT,那么就會得到下方的式子:

我們之前講過特征值分解,是將原矩陣A左乘P,得到了行之間線性無關的特征,那么此時的U和當時的P的求法是一樣的,所以我們此時的行與行之間也是線性無關的,
那么此時如果將行看作特征,列看作樣本,那么就可以從矩陣U中按照要求提取k個特征向量,變成k行m列,然后做成原資料Am行n列,就會得到結果k行n列,從而實作降維的效果,這里m代表特征,n代表樣本數,
3.2 列壓縮資料降維
其實列壓縮和行資料壓縮同理,將上式右乘矩陣V得到: A V = U Σ AV=U\Sigma AV=UΣ ,進而得到下式:

它與行壓縮相反,此時得到的是列與列線性無關,此時的m代表樣本數,n代表特征,那么我們將V矩陣提取k個向量,形成k行n列,左乘原資料樣本n行m列,得到結果k行m列,進而達到降維效果,
3.3 矩陣整體壓縮資料降維
對資料總體進行壓縮,是從一個新的角度去看待,可以理解為貢獻率的問題,我們可以將原來的A分解為多個相同形狀的矩陣,然后進行按照權重進行疊加,

將其進行展開獲得:
A
=
σ
1
u
1
v
1
T
+
σ
2
u
2
v
2
T
+
.
.
.
+
σ
r
u
r
v
r
T
A=\sigma_1u_1v_1^T+\sigma_2u_2v_2^T+...+\sigma_ru_rv_r^T
A=σ1?u1?v1T?+σ2?u2?v2T?+...+σr?ur?vrT?
其中
σ
1
u
1
v
1
T
\sigma_1u_1v_1^T
σ1?u1?v1T? 為一個m行n列的矩陣,前面的
σ
\sigma
σ 代表每個矩陣的權重,我們會從r個這樣的矩陣中挑去權重大的矩陣進行疊加,
這樣就可以理解為每個矩陣片段的重要性,按照 σ 1 > σ 2 > σ 3 \sigma_1>\sigma_2>\sigma_3 σ1?>σ2?>σ3? 的方式選取對應權重大的矩陣片段,
那么A就可以近似為:
A
≈
σ
1
u
1
v
1
T
+
σ
2
u
2
v
2
T
+
.
.
.
+
σ
k
u
k
v
k
T
A\approx\sigma_1u_1v_1^T+\sigma_2u_2v_2^T+...+\sigma_ku_kv_k^T
A≈σ1?u1?v1T?+σ2?u2?v2T?+...+σk?uk?vkT?

寫在最后
大家好,我是阿光,覺得文章還不錯的話,記得“一鍵三連”哦!!!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294119.html
標籤:AI
上一篇:【李宏毅深度學習CP13】Transformer(part2)
下一篇:佚段的小筆記
