1.5 PCA/SVD/MCA

1.PCA引入和推導:

引例:有5個二維空間的點(以列向量形式給出):\begin{bmatrix} -1 &-1 & 0 &2 & 0\\ -2& 0&0 & 1&1 \end{bmatrix},如圖:,可以很清晰地發現:它們可以由一個斜向量近似表示出來,這個斜向量就是\bigl(\begin{smallmatrix} 1/\sqrt2\\1 /\sqrt2 \end{smallmatrix}\bigr),因爲原先的5個2維向量中,第一個維度和第二個維度有着比例關係,所以可以進行降維處理,方法就是投影到這個斜向量上,以這個斜向量重新作爲一個基,也能恢復保存原先的結構不發生大的變換。如果作爲基的向量是一組標準基,那麼投影之前的向量投影到這組新基後的座標就是與這些新的標準基做內積,即:

\bigl(\begin{smallmatrix} 1/\sqrt2 & 1/\sqrt2 \end{smallmatrix}\bigr)\begin{bmatrix} -1 &-1 & 0 &2 & 0\\ -2& 0&0 & 1&1 \end{bmatrix}=\bigl(\begin{smallmatrix} -3/\sqrt2 ,&-1/\sqrt2 ,&0 , &3/\sqrt2 ,&1/\sqrt2 \end{smallmatrix}\bigr)。更爲形式化的語言表述如下:

\large X_{m,n}=\begin{bmatrix} \mathbf{x_1 }&\mathbf{x_2} &... & \mathbf{x_n }\end{bmatrix}_{m,n}是n個m維列向量的集合,記P_{k,m}=\begin{bmatrix} p_1^T\\ p_2^T\\ ...\\p_k^T \end{bmatrix}_{k,m},那麼有:

\large P_{k,m}X_{m,n}=\begin{bmatrix} p_1^T\\ p_2^T\\ ...\\p_k^T \end{bmatrix}_{k,m}\begin{bmatrix} \mathbf{x_1 }&\mathbf{x_2} &... & \mathbf{x_n }\end{bmatrix}_{m,n}=\begin{bmatrix} p_1^Tx_1 & p_2^Tx_2 & ... & p_1^Tx_n\\ p_2^Tx_1 & p_2^Tx_2 & ... & p_2^Tx_n\\ ...& ... & ... & ...\\ p_k^Tx_1 & p_k^Tx_2 & ... & p_k^Tx_n \end{bmatrix},觀察乘積後的矩陣,是一個KxN的矩陣,這個矩陣中第一列是原先x_1在新基下的表示,以此類推,第j列是原先n個向量中,第j個向量在新基下的表示,是一個k維的向量。

那麼如何選取這k個m維的向量呢?

 

如上圖所示,x爲原先的向量,p是新的標準基,\hat{x}是x在p方向上的投影,e就是誤差。如果我們想讓投影后的數據保留更多的信息,即投影前和投影后的誤差項||e||就要儘可能的小,同時因爲||x||是固定的,那麼||\hat{x}||的模長就就更大一些。即滿足:

對於每一個新基p向量,都有:\frac{1}{n}\sum_{i=1}^{n}(p^Tx_i)^2最大化,\sum_{i=1}^{n}(p^Tx_i)^2=\sum_{i=1}^{n}(p^Tx_i)^T(p^Tx_i)=\sum_{i=1}^{n}x_i^Tpp^Tx_i注意到這樣的變形是有問題的:因爲我們的x_i是已知的,這裏的p是未知的!因爲p^Tx=x^Tp,所以我們這樣推導:\sum_{i=1}^{n}(p^Tx_i)^2=\sum_{i=1}^{n}(x_i^Tp)^2=\sum_{i=1}^{n}(x_i^Tp)^T(x_i^Tp)=\sum_{i=1}^{n}p^Tx_ix_i^Tp。前面再加上1/n,就得到:\frac{1}{n}\sum_{i=1}^{n}p^Tx_ix_i^Tp=p^T(\frac{1}{n}\sum_{i=1}^{n}x_ix_i^T)p

當我們在預處理的時候,將m個特徵每一個都做了標準化後(即滿足X的每一行均值爲0,方差爲1),那麼就可以明顯的知道,

\frac{1}{n}\sum_{i=1}^{n}x_ix_i^T其實就是X的協方差矩陣\SigmaX必須進行了標準化!):協方差不懂的朋友可以看這裏

因爲我們選取的新基向量必須是標準基,所以我們有如下的優化問題:

\max_{\mathbf{p}}\ p^T\Sigma p\\s.t. p^Tp=1(按照p是向量去優化,不以整個矩陣去優化)利用拉格朗日乘子法,可以得到\Sigma p=\lambda p,即p是協方差矩陣\Sigma的特徵向量。

如果沒有做標準化,\frac{1}{n}\sum_{i=1}^{n}x_ix_i^T=\frac{1}{n}(x_1x_1^T+x_2x_2^T+...+x_nx_n^T)=\frac{1}{n}(XX^T)=E(xx^T),其實中間的矩陣就不在是協方差矩陣了,而是自相關矩陣。關於自相關矩陣和自協方差矩陣,可以看我的1.3(隨機變量和隨機向量)中詳細的講解。

根據協方差矩陣/XX^T算出來的特徵向量後,選取K個比較大的特徵值對應的特徵向量,每一個按行向量的形式,組成P_{k,m},

然後算得P_{k,m}X_{m,n},就得到了降維後的向量。maltab代碼如下:
(1)自己算特徵值分解法:

X = [-1 -1 0 2 0;-2 0 0 1 1];
[eigvectors,eigvalues]=eig(X*X');
Y = eigvectors(:,2)'*X;

X是數據矩陣,第一行是第一個特徵在n個樣本上的取值,第一列是一個樣本的所有特徵取值。

eig()給出的eigvectors是列向量形式的。eigvalues是對角陣,對角元素是特徵值。因爲第二個比較大,所以取出來後,與X做內積,得到1x5矩陣。

(2)調用庫函數法:

X = [-1 -1 0 2 0;-2 0 0 1 1];
[coff,score,latent]=pca(X');


results:
coff =

    0.7071    0.7071
    0.7071   -0.7071
score =

   -2.1213    0.7071
   -0.7071   -0.7071
         0         0
    2.1213    0.7071
    0.7071   -0.7071
latent =

    2.5000
    0.5000

X仍然是原先的X,但是送入pca函數中要轉置一下,送入pca函數中的矩陣必須是這樣的:每一行是一個樣本,每一列是在一個特徵上,所有樣本的取值。給出的結果中,latent是從小到大的特徵值,coff依次是對應的特徵向量(列向量),score是原向量投影在新基下的座標,每一行是一個樣本,每一列是一個特徵,也是按“重要性”的順序排序。

(3)PCA應用:

a.降維:在coursera上的PCA作業中,完成一個任務就是降維。

在降維過後,用了100個人臉圖像集合,每一張圖像向量化後作爲一個樣本,然後用這100個樣本去分析它們的“主成分”,即分析這些人臉主要的輪廓。

b.可視化數據:

c.進行排序:

d.和PCA思想相似的一個應用:圖像處理中彩色轉換成灰度圖片。

\large A_{m \times n \times 3}是一個彩色圖像,\large X_{3 \times mn}\large X的每一列是一個像素點,有mn列(每一行都要做歸一化!)。記\large u=\begin{bmatrix} \alpha\\\beta \\\gamma \end{bmatrix}

從彩色到灰度的映射就是:對於一個圖像R,G,B三個圖像,分別給與不同的權值\large \alpha,\beta ,\gamma加權平均\large \alpha+\beta +\gamma=1

而比較滿意的效果就是,加權組合後的灰度值差異儘可能的“大”,即方差大。所以有如下式子:

\large \max_{z} (u^TX)(u^TX)^T,\large u^TX就是映射後的所以樣本點,是一個1xMN的行向量,因爲只有一個維度,所以協方差就是方差。

化簡就是:\large \mathbf{\max_{z} u^TXX^Tu }\\s.t.\mathbf{ 1^Tu=1,u\succeq 0}。觀察可以發現和PCA很像,但是不一樣。詳細的求解這裏不涉及。

2.SVD的應用:

主要針對單個的矩陣\large A=U\Sigma V^T=\sum_{i=1}^{r}\sigma_iu_iv_i^T可以講矩陣進行壓縮。更實際的就是一個圖像,進行圖像的壓縮,和分析主要的部分。

3.MCA:次分量分析:利用數據向量的次分量(小特徵值對應的特徵向量)進行數據分析稱爲次分量分析。

暫時沒有詳細接觸,只是有個概念。伴隨着疑問:較小的特徵值對應的不是噪聲之類的東西嗎?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章