【ML】從特征分解,奇異值分解到主成分分析


1.理解特征值,特征向量

一個對角陣\(A\),用它做變換時,自然坐標系的坐標軸不會發生旋轉變化,而只會發生伸縮,且伸縮的比例就是\(A\)中對角線對應的數值大小。

對於普通矩陣\(A\)來說,是不是也可以找到這樣的向量,使得經\(A\)變換后,不改變方向而只伸縮?答案是可以的,這種向量就是\(A\)的特征向量,而對應的伸縮比例就是對應的特征值。

特征值會有復數是為什么?

首先要知道,虛數單位\(i\)對應的是旋轉\(90^o\),那么,如果特征值是復數,則對應的特征向量經矩陣\(A\)變換后將會旋轉\(90^o\),且伸縮率是復數的模。

2.矩陣的分解1:特征值分解

一個方陣\(A\),它的線性無關的特征向量個數不會超過其維度,不同特征值對應的特征向量一定是線性無關的。而同一特征值對應的特征向量也不一定相關。

但是,如果重復特征值重復計數,特征值的個數一定是\(n\),對應的也有\(n\)個特征向量。那么矩陣就可以分解:

\(Ax_i=\lambda x_i\)

\(AX=\Lambda X\)

其中,\(\Lambda\)是將\(A\)的特征值作為對角元素的對角陣,\(X\)是與特征值位置對應的特征向量(列)排成的矩陣。

\(A=X^{-1}\Lambda X\)

從而,可以將\(A\)分解為上面的形式,這樣,在計算,分析性質等會很有幫助。

一個應用就是PCA時,對協方差矩陣\(A^TA\)做特征分解,以提取主成分。

3.矩陣的分解2:奇異值分解SVD

上面的特征值分解只針對於方陣,而對於一般矩陣,可不可以做類似分解呢?

這就是奇異值分解。

什么是奇異值:A的奇異值是\(A^TA\)的特征值的平方根。因為矩陣是變換,經非方陣\(A\)變換后也有向量其方向不變,只伸縮,這個伸縮率就是奇異值,對應的向量為\(A^TA\)的特征向量。

酉矩陣:\(A^T=A^{-1}\)的矩陣。

什么是奇異值分解?

具體來說:對於非方陣\(A\),它的奇異值分解形式是:

\(A=U\sum V^T\)

其中,\(A:m*n;U:m*m ; \sum : m*n; V:n*n\),且\(、U、V\)都是酉矩陣。

\(\sum\)矩陣只有對角線元素不為0,稱為奇異值。

並且:

\(V\)是矩陣\(A^TA\) 的標准化特征向量構成的矩陣,稱為右奇異向量矩陣。右奇異向量實現列數壓縮。

\(U\)是矩陣\(A^TA\)的標准化特征向量構成的矩陣,稱為左奇異向量矩陣。左奇異向量實現列數壓縮。

\(\sum\)矩陣對角線的奇異值就是矩陣\(A^TA\)的特征值的平方根。

下面推導一下為什么是這樣:

奇異值分解,將\(m*n\)的矩陣\(A\),分解為:

$A=U\sum V^T $

則:\(A^T=V\sum^T U^T => A^TA=V\sum^TU^TU\sum V^T=V\sum^2V^T\)

上面用到了\(U^TU=I\)

即得到了:

$ A^TA=V\sum^TU^TU\sum V^T=V\sum^2V^T$

因而很顯然,方陣\(A^TA\)的標准化特征向量排列成的矩陣就是\(V\),而特征值開根號就是奇異值

所以,從這里也可知,奇異值的個數就是\(A^TA\)的特征值個數。

4. 主成分分析PCA

為什么做主成分分析?

做數據分析處理,針對每個樣本都收集了大量特征,設樣本數為\(m\),特征數為\(n\),則我們得到的數據矩陣為:

\(A=[m*n]\);每行為一個樣本,每列為一個特征。

大量的數據會導致處理計算復雜,並且多個特征相互之間可能存在多重相關關系,導致把所有數據放在一起處理過分擬合了某些指標;而盲目的刪除一些特征又可能導致關鍵信息的損失。

如何減少特征數,又保留住絕大部分信息呢?+正則化項可以自動學習這個過程。PCA主成分分析可以實現這個目的,其本質是數據降維。

怎么做主成分分析?

1.找主成分方向:正交的

將列數\(n\)降維到\(n'\),怎么做呢?如果有一個維度它的變化不大,那么包含的信息就很少,自然可以刪除,但在現有數據下,很難看出哪個維度變化不大,數據是雜亂的。因此將其變換到以特征向量為基的坐標系下,\(n\)維矩陣自然可以變換到\(n\)維特征向量坐標系,這樣,所有\(n\)個特征是相互正交的。變換到新的坐標系后,由於特征值的大小表征了離散程度,哪個特征變化小就可以通過特征值大小看出來。

根據最大方差理論,變化大的維度含有的信息遠大於變化小的。

求PCA方向就是\(A^TA\)的特征值方向。

為什么要對\(A^TA\)求特征向量呢(為什么是這個方向)?

這是因為,原本我們想將列向量變換到正交的特征向量方向,即尋找新的坐標系,將每條數據在這個新的坐標系下標出。這個方向實際上就是\(A^TA\)的特征向量的方向。因為,根據第5部分,\(A=U\sum V^T=>AV=U\sum\),可以看到,\(V\)的各個向量的方向就是相互正交方向,這個方向使得數據\(A\)的列向量變換后依然正交。而如何將列向量變換到正交方向上去呢?投影。這個式子也給了我們答案,即相乘,類似於內積,(一個向量到另一個向量的投影)。因此,這樣就將所有列向量(特征)映射到了相互正交的空間,倘若有的變量變化不大,此時可以根據特征值大小看出,即特征值小則方差小,信息量小。

另外可以發現,中心化后,\(A^TA\)就是協方差矩陣,這是為什么許多教材上直接說對協方差矩陣求特征向量,特征向量的方向就是主成分方向。

那么,確定了主成分方向,如何確定使用哪幾個主成分呢?

特征值的意義就是特征向量方向上的伸縮率,因此,特征值的大小衡量了該主成分方向上的離散程度,特征值越大,則越離散,方差越大,信息越多。

因此可以定義貢獻率:該特征值/特征值之和。

所以,只要選取特征值最大的幾個主成分方向以及對應的主成分向量(主成分特征)就可以了。這是為什么教材中按特征值大小排序。

總結一下主成分步驟:

要將列特征變換到另一個空間,使得特征之間是相互正交的,即變換后的\(n\)維特征正好處於新坐標系的軸上。

  1. \(A^TA\)特征值以及對應的特征向量,按大小排序。
  2. 該特征向量就是新的坐標軸方向,將A的各行向新的特征值方向上做投影,得到主成分。
  3. 根據貢獻率,選擇需要的主成分數。

上面的過程很類似於奇異值分解,實際上,學習庫中的PCA不會真的對\(A^TA\)求特征向量,這太費時了,因為求特征向量實際上就要首先求特征多項式,大於三階不存在通用算法求解。實際上,scikit-learn做奇異值分解的途中,有算法可以直接得到右邊的\(V\),從而確定了方向。

PCA的缺點是解釋性不強,即變換后的特征到底代表了什么是不能夠解釋的,但這不影響PCA很有效,對我來說更重要的是幫助理解特征值分解和奇異值分解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM