主成分分析(PCA)

ckxllf發表於2020-04-28

協方差矩陣——PCA的關鍵。 

   PCA的目的就是“降噪”和“去冗餘”。“降噪”的目的就是使保留下來的維度間的相關性儘可能小,而“去冗餘”的目的就是使保留下來的維度含有的“能量”即方差儘可能大那首先的首先,我們得需要知道各維度間的相關性以及個維度上的方差!那有什麼資料結構能同時表現不同維度間的相關性以及各個維度上的方差呢?自然是非協方差矩陣莫屬。回憶下《淺談協方差矩陣》的內容,協方差矩陣度量的是維度與維度之間的關係,而非樣本與樣本之間。協方差矩陣的主對角線上的元素是各個維度上的方差(即能量),其他元素是兩兩維度間的協方差(即相關性)。我們要的東西協方差矩陣都有了,先來看“降噪”,讓保留下的不同維度間的相關性儘可能小,也就是說讓協方差矩陣中非對角線元素都基本為零。達到這個目的的方式自然不用說,線代中講的很明確——矩陣對角化。而對角化後得到的矩陣,其對角線上是協方差矩陣的特徵值,它還有兩個身份:首先,它還是各個維度上的新方差;其次,它是各個維度本身應該擁有的能量(能量的概念伴隨特徵值而來)。這也就是我們為何在前面稱“方差”為“能量”的原因。也許第二點可能存在疑問,但我們應該注意到這個事實,通過對角化後,剩餘維度間的相關性已經減到最弱,已經不會再受“噪聲”的影響了,故此時擁有的能量應該比先前大了。看完了“降噪”,我們的“去冗餘”還沒完呢。對角化後的協方差矩陣,對角線上較小的新方差對應的就是那些該去掉的維度。所以我們只取那些含有較大能量(特徵值)的維度,其餘的就舍掉即可。PCA的本質其實就是對角化協方差矩陣.

 PCA的本質是對角化協方差矩陣,目的是讓維度之間的相關性最小(降噪),保留下來的維度的能量最大(去冗餘)。

 


 

PCA簡介以及模型

  Web的發展產生了大量的資料,尤其是現在的網際網路公司,集結了大量的使用者資訊。,怎樣從這些複雜混亂的資料中提取有用的資訊才是重點。我們舉一個物理模型

如圖所示:

  當把一個彈簧球沿著X方向進行拉伸的時候,彈簧球會在X方向上進行來往復運動。假設我們有三個相機,用來描述彈簧球的運動軌跡,分別為CameraA(x,y,z),CameraB(x,y,z),CameraC(x,y,z),相機的擺放並不呈現正交。

  感官上,如果以小球運動的平面作為XOY平面,我們可以最大限度的描述小球的運動軌跡,畢竟小球只是在X方向上進行往返運動,可是在相機A,B,C中卻會對同一時刻的小球位置產生三個不同的描述,這是因為三個相機有不同的座標系,因此,如何從三個相機中產生的冗餘資料進行去除,得到最佳的描述小球運動軌跡的資訊,正是PCA的功勞。

  線性代數中對PCA這樣進行描述:PCA的目標就是用另一組基去重新描述得到的資料空間,而新的基要儘可能的描述原有資料間的關係,簡單總結:一方面要體現出最主要的特徵,另一方面要區分開主要特徵和次要特徵的差距。上面的例子中,沿著X軸進行運動無疑是最主要的特徵,也就是我們所說的“主元”。那麼怎樣才能最好的表示原資料呢?無疑是選擇最好的基,那怎樣的基才是最好的基呢?關於基的概念,線性代數給出這樣的描述:

  線上性空間V中,如果存在n個元素a1,a2,a3,...,an,滿足

  (1)a1,a2,a3,...,an線性無關

  (2)V中的任何元素都可以用a1,a2,a3,...,an進行描述

  PCA進行座標基變換的原則是:

  (1)主元軸擁有最大的方差,次元軸擁有次級大的方差......

  (2)座標基的相關性為0(其實根據基的基本概念,只要是基的話就已經是線性無關的)

  1. 去噪聲

  線性系統中,我們用”訊雜比“來描述噪聲的大小,通常,變化大的被認為是噪聲,而變化小的被認為是訊號,而變化的快慢使用方差來描述的。

  當座標軸和橢圓的長短軸平行,那麼代表長軸的變數就描述了資料的主要變化,而代表短軸的變數就描述了資料的次要變化。但是,座標軸通常並不和橢圓的長短軸平行(這點在下面的圖C中也有體現)。由於C中的水平座標和垂直座標都是以(x1,x2)作為座標系的,如果我們以x1,x2作為座標軸,將F1,F2投影到x1,x2座標軸上並不能獲得描述物件的最大方差,。因此,需要尋找橢圓的長短軸,並進變換,使得新變數和橢圓的長短軸平行。這個過程叫做去噪聲!

  2. 去冗餘

 

 

(從左向右分別為a,b,c)

  如圖所示:(a)的長軸和短軸方向上的方差基本大小一致,因此,相關性越低,冗餘度越小,(c)次之,而(b)的短軸方向上資料分佈高度集中,因此方差非常小,短軸上的座標可以用長軸進行線性表示(考慮一下y = kx+b,我們可以將座標表示為(x,kx+b),此時,長軸包含了資料的大部分資訊,可以用長軸代替原先用長軸和短軸這兩個軸進行描述。這已經就是將二維降低到一維!橢圓的長短軸差距越大,我們就越有把握說長軸代表了大部分的資訊)。對於高維的情況,和二維的情況一致,如果是一個N維的橢球(抱歉我們大腦中無法構建出這個場景),我們首先找到描述它的N個正交基,保留下最能代表其特徵的前N個正交基作為變數,這樣就完成了降低維度的過程。

正如二維橢圓有2個主軸,3維橢球有3個主軸,N維橢形有N個主軸,有幾個變數,就有幾個主成分,另外,通常情況下所選的主軸的數目是所有主軸數目的85%。


 

數學建模

假設有N個樣本,每個樣本用X中的列表示,其中,P代表的是特徵的數目,我們的目的是降低P的數目,以便用較少的特徵數目來描述X的特徵。

(1)協方差:

 整個PCA裡面,為什麼要用協方差矩陣來計算PCA,這才是PCA計算的關鍵。

協方差(Covariance)在概率論統計學中用於衡量兩個變數的總體誤差。而方差是協方差的一種特殊情況,即當兩個變數是相同的情況。

         ,
         ,
當X與Y相互獨立時

 

(2)協方差矩陣

統計學概率論中,協方差矩陣是一個矩陣,其每個元素是各個向量元素之間的協方差。這是從標量隨機變數到高維度隨機向量的自然推廣。

假設是以個標量隨機變數組成的列向量

並且是其第i個元素的期望值,即, 。協方差矩陣被定義的第i,j項是如下:

即:

 

所以協方差矩陣一定是對角陣。維度為元素物件的個數

(考慮一下:Matlab裡面怎麼計算兩個矩陣的相關性?)

程式碼實現

實現過程如下:

(1)去除平均值,計算協方差

(2)根據協方差矩陣計算特徵值和特徵向量

(3)將特徵值進行有大到小排列,保留所有特徵值中的前N個特徵值,並或者其對應的特徵向量

(4)將獲得的N個特徵向量對映到新的空間

Matlab程式碼實現

http://www.cnblogs.com/tornadomeet/archive/2012/12/30/2839615.html

function [Y,V,E,D] = pca(X)
% do PCA on image patches
%
% INPUT variables:
% X                  matrix with image patches as columns
%
% OUTPUT variables:
% Y                  the project matrix of the input data X without whiting
% V                  whitening matrix
% E                  principal component transformation (orthogonal)
% D                  variances of the principal components
 
%去除直流成分
X = X-ones(size(X,1),1)*mean(X);
 
% Calculate the eigenvalues and eigenvectors of the new covariance matrix.
covarianceMatrix = X*X'/size(X,2); %求出其協方差矩陣
%E是特徵向量構成,它的每一列是特徵向量,D是特徵值構成的對角矩陣
%這些特徵值和特徵向量都沒有經過排序
[E, D] = eig(covarianceMatrix);
 
% Sort the eigenvalues  and recompute matrices
% 因為sort函式是升序排列,而需要的是降序排列,所以先取負號,diag(a)是取出a的對角元素構成
% 一個列向量,這裡的dummy是降序排列後的向量,order是其排列順序
[dummy,order] = sort(diag(-D));
E = E(:,order);%將特徵向量按照特徵值大小進行降序排列,每一列是一個特徵向量
Y = E'*X;
d = diag(D); %d是一個列向量
%dsqrtinv是列向量,特徵值開根號後取倒,仍然是與特徵值有關的列向量
%其實就是求開根號後的逆矩陣
dsqrtinv = real(d.^(-0.5));
Dsqrtinv = diag(dsqrtinv(order));%是一個對角矩陣,矩陣中的元素時按降序排列好了的特徵值(經過取根號倒後)
D = diag(d(order));%D是一個對角矩陣,其對角元素由特徵值從大到小構成
V = Dsqrtinv*E';%特徵值矩陣乘以特徵向量矩陣


相關文章