一個對角陣\(A\),用它作變換時,天然座標系的座標軸不會發生旋轉變化,而只會發生伸縮,且伸縮的比例就是\(A\)中對角線對應的數值大小。算法
對於普通矩陣\(A\)來講,是否是也能夠找到這樣的向量,使得經\(A\)變換後,不改變方向而只伸縮?答案是能夠的,這種向量就是\(A\)的特徵向量,而對應的伸縮比例就是對應的特徵值。學習
特徵值會有複數是爲何?spa
首先要知道,虛數單位\(i\)對應的是旋轉\(90^o\),那麼,若是特徵值是複數,則對應的特徵向量經矩陣\(A\)變換後將會旋轉\(90^o\),且伸縮率是複數的模。排序
一個方陣\(A\),它的線性無關的特徵向量個數不會超過其維度,不一樣特徵值對應的特徵向量必定是線性無關的。而同一特徵值對應的特徵向量也不必定相關。ci
可是,若是重複特徵值重複計數,特徵值的個數必定是\(n\),對應的也有\(n\)個特徵向量。那麼矩陣就能夠分解:數據分析
\(Ax_i=\lambda x_i\)it
\(AX=\Lambda X\)class
其中,\(\Lambda\)是將\(A\)的特徵值做爲對角元素的對角陣,\(X\)是與特徵值位置對應的特徵向量(列)排成的矩陣。變量
\(A=X^{-1}\Lambda X\)lambda
從而,能夠將\(A\)分解爲上面的形式,這樣,在計算,分析性質等會頗有幫助。
一個應用就是PCA時,對協方差矩陣\(A^TA\)作特徵分解,以提取主成分。
上面的特徵值分解只針對於方陣,而對於通常矩陣,可不能夠作相似分解呢?
這就是奇異值分解。
什麼是奇異值: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\)的特徵值個數。
爲何作主成分分析?
作數據分析處理,針對每一個樣本都收集了大量特徵,設樣本數爲\(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\)維特徵正好處於新座標系的軸上。
上面的過程很相似於奇異值分解,實際上,學習庫中的PCA不會真的對\(A^TA\)求特徵向量,這太費時了,由於求特徵向量實際上就要首先求特徵多項式,大於三階不存在通用算法求解。實際上,scikit-learn作奇異值分解的途中,有算法能夠直接獲得右邊的\(V\),從而肯定了方向。
PCA的缺點是解釋性不強,即變換後的特徵到底表明了什麼是不可以解釋的,但這不影響PCA頗有效,對我來講更重要的是幫助理解特徵值分解和奇異值分解。