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

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

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

對於普通矩陣\(A\)來講,是否是也能夠找到這樣的向量,使得經\(A\)變換後,不改變方向而只伸縮?答案是能夠的,這種向量就是\(A\)的特徵向量,而對應的伸縮比例就是對應的特徵值。學習

特徵值會有複數是爲何?spa

首先要知道,虛數單位\(i\)對應的是旋轉\(90^o\),那麼,若是特徵值是複數,則對應的特徵向量經矩陣\(A\)變換後將會旋轉\(90^o\),且伸縮率是複數的模。排序

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

一個方陣\(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\)作特徵分解,以提取主成分。

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頗有效,對我來講更重要的是幫助理解特徵值分解和奇異值分解。

相關文章
相關標籤/搜索