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\)維特征正好處於新坐標系的軸上。
- 求\(A^TA\)特征值以及對應的特征向量,按大小排序。
- 該特征向量就是新的坐標軸方向,將A的各行向新的特征值方向上做投影,得到主成分。
- 根據貢獻率,選擇需要的主成分數。
上面的過程很類似於奇異值分解,實際上,學習庫中的PCA不會真的對\(A^TA\)求特征向量,這太費時了,因為求特征向量實際上就要首先求特征多項式,大於三階不存在通用算法求解。實際上,scikit-learn做奇異值分解的途中,有算法可以直接得到右邊的\(V\),從而確定了方向。
PCA的缺點是解釋性不強,即變換后的特征到底代表了什么是不能夠解釋的,但這不影響PCA很有效,對我來說更重要的是幫助理解特征值分解和奇異值分解。
