中文就是主成成分分析。在學數學建模的時候將這分爲了評價類的方法(我實在是很難看出來,在機器學習中是屬於無監督學習降維方法的一種線性降維方法。
舉一個最簡單的栗子(下圖,二維的數據降到一維,就得找到一條直線將全部的點都投影到該直線上,這條直線須要知足的條件就是投影在這條直線上的全部點的方差最大,減小信息的損失。
PCA主要用於當數據的維度太高或者不一樣維度的數據之間存在相關的關係,形成了機器學習性能的降低的問題。這個時候PCA就是要將高維特徵轉化爲獨立性較高的低維特徵,下降特徵之間的相關性。python
\(X_{nxm}\):n維特徵的數據,\(Z_{kxm}\):k維特徵的數據,PCA技術就是要找到一組\(W_{kxn}\)使得\(Z=W\cdot X\),同時\(Maximize(\sum_i^kVar(Z_i))\),\(Z_i\)表示第i-D下的投影。機器學習
第一步 將X降到\(Z_1,Z_2\)上
\(Z_1=W_1\cdot X\)
\(Var(Z_1)=\frac{1}{m}\sum_{j=1}^m(Z_{1j}-\overline{Z_1})^2\),\(|W_1|=1\)投影可是不影響大小
\(Z_2=W_2\cdot X\)
\(Var(Z_2)=\frac{1}{m}\sum_{j=1}^m(Z_{2j}-\overline{Z_2})^2\),\(|W_2|=1\)投影可是不影響大小,可是爲了是方差最大或者說使特徵之間的相關性最低,\(W_1\cdot W_2=0\)
PS:若是不加這個條件的話\(W_1==W_2\)性能
\(Z_{1j}=W_1\cdot X_j,\overline{Z_1}=\frac{1}{m}\sum_{j=1}^mZ_{1j}=\frac{1}{m}\sum_{j=1}^mW_1\cdot X_j=W_1\cdot \overline{X_j}\)學習
\(Var(Z_1)=\frac{1}{m}\sum_{j=1}^m(W_1\cdot X_j-W_1\cdot \overline{X_j})^2=\frac{1}{m}\sum_{j=1}^m[W_1\cdot (X_j-\overline{X_j})]^2=W_1^T[\frac{1}{m}\sum_{j=1}^m(X_j-\overline{X_j})(X_j-\overline{X_j})^T]W_1=W_1^TCov(X)W_1=W_1^TSW_1,S=Cov(X)\)spa
接下來是最大化\(Var(Z_1)\),存在Constraint:\(|W_1|=1,W_1.TW_1-1=0\),利用拉格朗日算子法
\(g(W_1)=W_1^TSW_1-\alpha(W_1.TW_1-1)\)
\(\forall i<=m, \frac{\partial g(W_1)}{\partial W_{1i}}=0\rightarrow SW_1-\alpha W_1=0\) 可知\(W_1\)是S的特徵向量,\(\alpha\)是S的特徵值
\(Var(Z_1)=W_1^TSW_1=W_1^T\alpha W_1=\alpha W_1^TW_1=\alpha\),要是方差最大則\(\alpha\)是S的最大特徵值,\(W_1\)爲所對應的特徵向量。code
按照相同的思路來最大化\(Var(Z_2)\),存在constraints:\(W_2^TW_2-1=0,W_1^TW_2=0\)
\(g(W_2)=W_2^TSW_2-\alpha(W_2^TW_2-1)-\beta(W_2^TW_1)\)
\(\forall i<=m, \frac{\partial g(W_2)}{\partial W_{2i}}=0\)
\(\rightarrow SW_2-\alpha W_2-\beta W_1=0 \rightarrow W_1^TSW_2-\alpha W_1^TW_2-\beta W_1^TW_1=0\)
\(\rightarrow \beta=W_1^TSW_2=(W_1^TSW_2)^T=W_2^TSW_1=W_2^T\lambda W_1=\lambda W_2^TW_1=0\)
由於\(\beta=0\)因此\(SW_2=\alpha W_2\),同理可知\(W_1\)是S的特徵向量,\(\alpha\)是S的特徵值
\(Var(Z_2)=W_2^TSW_2=\alpha\),要想方差最大且知足約束條件(隱含條件S是Symmetric的,特徵向量是正交的),則\(\alpha\)是第二大的特徵值且\(W_2\)是對應的特徵向量。component
第三步 得出結論
降至不一樣空間維度上保存的信息量的大小是降維所用S的特徵向量所對應的特徵值的大小決定的blog
一、由於S必定是實對稱矩陣,則通過對S的奇異值分解之後\(S=Q\sum Q^T\),\(\sum\)是一個對角線爲S的特徵值的矩陣,Q是特徵值對應的特徵列向量矩陣,從Q中抽取特徵值最大的對應的特徵列向量就能夠進行降維,而且經過特徵值算出簡單的信息損失狀況。ip
import numpy as np U,S,V=np.linalg.svd(S)
人生此處,絕對樂觀
ci