相對與網上很多人分享的有關PCA的經歷,我第一次接觸PCA卻不是從人臉表情識別開始的,但我所在的實驗室方向之一是人臉的研究,最后也會回到這個方向上來吧。
PCA(principal components analysis)是一種非常有用的統計技術,它已經應用於人臉識別和圖像壓縮領域中,並且是高維數據計算模型的常用技術。簡單說是把高維數據將成低維數據,比如100000x100000的矩陣降成100000x100的。
從例子中也看得出在數學模型中直觀看到的是對矩陣進行的各種各樣的變形最終達到我們所需要的矩陣形式。所以一定的關於矩陣的線性代數的知識是不可或缺的數學基礎。
pca的原理我暫且不寫,我要按照我所認識的PCA經歷一點點寫吧。
我一開始接觸到PCA是偏於實踐的,因為實驗室的一個項目的大量數據需要用PCA做分析,所以安排我負責PCA這一部分,對數據進行降維處理。我是在matlab中進行的。
matlab中的PCA
http://blog.csdn.net/wangzhiqing3/article/details/12193131
這個里面比較全,有講解和例子。
原文地址:http://www.cnblogs.com/sunwufan/archive/2011/08/31/2159952.html
主要涉及一個函數:[coef,score,latent,t2] = princomp(x);
x:為要輸入的n維原始數據。帶入這個matlab自帶函數,將會生成新的n維加工后的數據(即score)。此數據與之前的n維原始數據一一對應。
score:生成的n維加工后的數據存在score里。它是對原始數據進行的分析,進而在新的坐標系下獲得的數據。他將這n維數據按貢獻率由大到小排列。(即在改變坐標系的情況下,又對n維數據排序)
latent:是一維列向量,每一個數據是對應score里相應維的貢獻率,因為數據有n維所以列向量有n個數據。由大到小排列(因為score也是按貢獻率由大到小排列)。
降維操作的時候也是根據latent中前n個的貢獻率之和與全部的比例(一般為85%-90%以上),取前n個,即完成降維操作。
coef:是系數矩陣。通過cofe可以知道x是怎樣轉換成score的。
則模型為從原始數據出發:
score= bsxfun(@minus,x,mean(x,1))*coef;(作用:可以把測試數據通過此方法轉變為新的坐標系)
逆變換:
x= bsxfun(@plus,score*inv(coef),mean(x,1))
原文地址:http://www.ilovematlab.cn/thread-54600-1-1.html
我的做法:對於訓練數據利用princomp函數降維得到相應的coef和latent后都取其前n列保證貢獻率在90%以上。
測試數據要減去訓練數據樣本均值后乘上面得到的coef得到測試數據的降維后的數據。
參考:
1
http://blog.csdn.net/rogerzhanglijie/article/details/8251359
PCA簡單的說,它是一種通用的降維工具。在我們處理高維數據的時候,
了能降低后續計算的復雜度,在“預處理”階段通常要先對原始數據進行降維,而PCA就是干這個事的
本質上講,PCA就是將高維的數據通過線性變換投影到低維空間上去,但這個投影可不是隨便投投,
遵循一個指導思想,那就是:找出最能夠代表原始數據的投影方法。這里怎么理解這個思想呢?“最
表原始數據”希望降維后的數據不能失真,也就是說,被PCA降掉的那些維度只能是那些噪聲或是冗
數據。這里的噪聲和冗余我認為可以這樣認識:
噪聲:我們常說“噪音污染”,意思就是“噪聲”干擾我們想聽到的真正聲音。同樣,假設樣本中某
主要的維度A,它能代表原始數據,是“我們真正想聽到的東西”,它本身含有的“能量”(即該維度
方差,為啥?別急,后文該解釋的時候就有啦~)本來應該是很大的,但由於它與其他維度有那
些千絲萬縷的相關性,受到這些個相關維度的干擾,它的能量被削弱了,我們就希望通過PCA
理后,使維度A與其他維度的相關性盡可能減弱,進而恢復維度A應有的能量,讓我們“聽的更清
楚”!
冗余:冗余也就是多余的意思,就是有它沒它都一樣,放着就是占地方。同樣,假如樣本中有
個維度,在所有的樣本上變化不明顯(極端情況:在所有的樣本中該維度都等於同一個數),也
說該維度上的方差接近於零,那么顯然它對區分不同的樣本絲毫起不到任何作用,這個維度即
冗余的,有它沒它一個樣,所以PCA應該去掉這些維度。
能小,而“去冗余”的目的就是使保留下來的維度含有的“能量”即方差盡可能大。那首先的首先,我們得需
要知道各維度間的相關性以及個維度上的方差啊!那有什么數據結構能同時表現不同維度間的相關性以
及各個維度上的方差呢?自然是非協方差矩陣莫屬。協方差矩陣度量的是維度與維度之間的關系,而非樣本與樣本之間。協方差矩陣的主對角線上的元素是各個維度上的
方差(即能量),其他元素是兩兩維度間的協方差(即相關性)。我們要的東西協方差矩陣都有了,先來
看“降噪”,讓保留下的不同維度間的相關性盡可能小,也就是說讓協方差矩陣中非對角線元素都基本為
零。達到這個目的的方式自然不用說,線代中獎的很明確——矩陣對角化。而對角化后得到的矩陣,其
對角線上是協方差矩陣的特征值,它還有兩個身份:首先,它還是各個維度上的新方差;其次,它是各
個維度本身應該擁有的能量(能量的概念伴隨特征值而來)。這也就是我們為何在前面稱“方差”為“能量”的
原因。也許第二點可能存在疑問,但我們應該注意到這個事實,通過對角化后,剩余維度間的相關性已
經減到最弱,已經不會再受“噪聲”的影響了,故此時擁有的能量應該比先前大了。看完了“降噪”,我們
的“去冗余”還沒完呢。對角化后的協方差矩陣,對角線上較小的新方差對應的就是那些該去掉的維度。
所以我們只取那些含有較大能量(特征值)的維度,其余的就舍掉即可。PCA的本質其實就是對角化協方
差矩陣。
Xnor(i,:)=X(i,:)./sum(X(i,:));
end
[p,t,latent]=princomp(Xnor,'econ');
latent=latent./sum(latent)*100;
latent(1:10)
第一步導入矩陣29 X 14 前15對照組求特征值
hold on
plot(t(16:29,1),t(16:29,2),'*')
xlabel('PC1(36.3%)')
ylabel('PC2(26.9%)')
PCA是一種統計技術,經常應用於人面部識別和圖像壓縮以及信號去噪等領域,是在高維數據中提取模式的一種常用技術。要了解PCA首先要了解一些相關的數學知識,這里主要介紹協方差矩陣、特征值與特征矢量的概念。
1、 協方差矩陣
協方差總是在兩維數據之間進行度量,如果我們具有超過兩維的數據,將會有多於兩個的協方差。例如對於三維數據(x, y, z維),需要計算cov(x,y),cov(y,z)和cov(z,x)。獲得所有維數之間協方差的方法是計算協方差矩陣。維數據協方差矩陣的定義為
(1)
這個公式告訴我們,如果我們有一個n維數據,那么協方差矩陣就是一個n行n列的方矩陣,矩陣的每一個元素是兩個不同維數據之間的協方差。
對於一個3維數據(x,y,z),協方差矩陣有3行3列,它的元素值為:
(2)
需要注意的是:沿着主對角線,可以看到元素值是同一維數據之間的協方差,這正好是該維數據的方差。對於其它元素,因為cov(a,b)=cov(b,a),所以協方差矩陣是關於主對角線對稱的。
2、特征值和特征矢量
只要矩陣大小合適,就可以進行兩矩陣相乘,特征矢量就是其中的一個特例。考慮圖2.1中兩個矩陣和矢量乘法。
圖2.1 一個非特征矢量和一個特征矢量的例子
圖2.2 一個縮放的特征矢量仍然是一個特征矢量
在第一個例子中,結果矢量不是原來因子矢量與整數相 乘,然而在第二個例子中,結果矢量是原來因子矢量的4倍,為什么會這樣呢?該矢量是一個2維空間矢量,表示從原點(0,0)指向點(3,2)的箭矢。方矩 陣因子可以看作是轉換矩陣,一個矢量左乘該轉換矩陣,意味着原始矢量轉換為一個新矢量。
特征矢量來自於轉換特性。設想一個轉換矩陣,如果用其左乘一個矢量,映射矢量是它自身,這個矢量(以及它的所有尺度縮放)就是該轉換矩陣的特征矢量。
特征矢量有什么特性呢?首先只有方陣才有特征矢量,而且並不是所有方陣都有特征矢量,如果一個nXn方陣有特征矢量,那么它有n個特征矢量。
特征矢量的另外一個性質是對特征矢量的縮放會得到縮放前同樣地結果,如圖2.2所示,這是因為你對矢量的縮放只是改變它的長度,不會改變它的方向。最后, 矩陣的所有特征矢量是正交的。這是一個非常重要的性質,因為這意味着你可以在這些正交矢量上表示一組數據,而不僅是在x和y軸上。在下面的PCA小節內我 們將作這個工作。
另外一個需要了解的是數學家尋找特征矢量,總喜歡尋找長度為1的那一個特征矢量,這是因為矢量的長度不影響它是否是特征矢量,因此,為了保證特征矢量是標准的矢量,我們通常將特征矢量的長度縮放為1,從而所有的特征矢量都有相同的長度。
怎樣去找到這些神秘的特征矢量呢?不幸的是,只有對相當小維數的矩陣才有簡單地方法,比如不超過3X3,對於較大維數的矩陣,需要復雜的迭代算法。
特征值是與特征矢量極其相關的,事實上,在圖2.1中我們已經看到了一個特征值。注意在兩個例子中,原始矢量左乘方陣后與矢量縮放數一樣。在這個例子中,縮放數為4。4就是對應該特征矢量的特征值。不管在左乘方陣之前如何縮放特征矢量,我們總是得到該矢量的4倍(如圖2.2)。所以特征值和特征矢量總是成對出現,當你使用程序計算特征矢量時,你總是同時得到對應的特征值。
3、主成分分析(PCA)
最后我們將進行主成分分析的介紹,那么什么是主成分分析呢?它是一種在數據中辨別模式的方法,表達數據的相似與不同之處的方法。因為高維數據的模式難以發現——圖形表述不可用,PCA是一個有力的數據分析工具。
PCA的另外一個重要優勢是,一旦你找到了數據的這些模式,你可以壓縮它,也就是在不丟失很多信息的基礎上,降低數據的維數。在下一節將會看到,這種技術被用於圖像壓縮。
本節將一步一步地帶你對一組數據進行PCA操作。我將不具體描述該技術為什么適用,只是介紹怎樣使用該技術。
§3.1 方法
第一步:獲得數據
在我簡單的例子中,將使用我自己制作的2維數據,使用2維數據的原因是我可以提供這些數據的圖形,以便直觀地觀察PCA的操作步驟。下面就是我使用的數據
x=[2.5, 0.5, 2.2, 1.9, 3.1, 2.3, 2, 1, 1.5, 1.1]T
y=[2.4, 0.7, 2.9, 2.2, 3.0, 2.7, 1.6, 1.1, 1.6, 0.9]T
第二步:減去均值
要使PCA正常工作,必須減去數據的均值。減去的均值為每一維的平均,所有的x值都要減去,同樣所有的y值都要減去,這樣處理后的數據都具有0均值。
x=[0.69, -1.31, 0.39, 0.09, 1.29, 0.49, 0.19, -0.81, -0.31, -0.71]T
y=[0.49, -1.21, 0.99, 0.29, 1.09, 0.79, -0.31, -0.81, -0.31, -1.01]T;
第三步:計算協方差矩陣
因為數據是2維的,它的協方差矩陣就是2X2維的,這里直接給出結果:
因為非對角元素是正的,我們可以期望 和 變量一起增大。
第四步:計算協方差矩陣的特征矢量和特征值
因為協方差矩陣為方陣,我們可以計算它的特征矢量和特征值,它可以告訴我們數據的有用信息。我們數據的特征值和特征矢量分別為
我們可以看到這些矢量都是單位矢量,也就是它們的長度為1,這對於PCA是非常重要的,幸運的是,大多數數學程序包,當你計算特征矢量時,總是會得到單位特征矢量。
第五步:選擇成分組成模式矢量
現在可以進行數據壓縮降低維數了。如果你觀察上一節中的特征矢量和特征值,會注意到那些特征值是十分不同的。事實上,可以證明對應最大特征值的特征矢量就是數據的主成分。在我們的例子中,對應大特征值的特征矢量就是那條穿過數據中間的矢量,它是數據維數之間最大的關聯。
一般地,從協方差矩陣找到特征矢量以后,下一步就是按照特征值由大到小進行排列,這將 給出成分的重要性級別。現在,如果你喜歡,可以忽略那些重要性很小的成分,當然這會丟失一些信息,但是如果對應的特征值很小,你不會丟失很多信息。如果你 已經忽略了一些成分,那么最后的數據集將有更少的維數,精確地說,如果你的原始數據是n維的,你選擇了前p個主要成分,那么你現在的數據將僅有p維。
現在要做的是你需要組成一個模式矢量,這只是幾個矢量組成的矩陣的一個有意思的名字而已,它由你保持的所有特征矢量構成,每一個特征矢量是這個矩陣的一列。
對於我們的數據集,因為有兩個特征矢量,因此我們有兩個選擇。我們可以用兩個特征矢量組成模式矢量:
我們也可以忽略其中較小特征值的一個特征矢量:
下一節我們將會看到它們的結果。
x=[-0.828, 1.778, -0.992, -2.742, -1.676, -0.913, 0.099, 1.145, 0.438,1.224]T
第六步:獲得新數據
這是PCA最后一步,也是最容易的一步。一旦你選擇了須要保留的成分(特征矢量)並組成了模式矢量,我們簡單地對其進行轉置,並將其左乘原始數據的轉置:
其中rowFeatureVector是由特征矢量作為列組成的矩陣的轉置,因此它的 行就是原來的特征矢量,而且對應最大特征值的特征矢量在該矩陣的最上一行。rowdataAdjust是減去均值后的數據,即數據項目在每一列中,每一行 就是一維。FinalData是最后得到的數據,數據項目在它的列中,維數沿着行。
這將給我們什么結果呢?這將僅僅給出我們選擇的數據。我們的原始數據有兩個軸(x和 y),所以我們的原始數據按這兩個軸分布。我們可以按任何兩個我們喜歡的軸表示我們的數據。如果這些軸是正交的,這種表達將是最有效的,這就是特征矢量總 是正交的重要性。我們已經將我們的數據從原來的xy軸表達變換為現在的單個特征矢量表達。如果我們已經忽略了一些特征矢量,則新數據將會用我們保留的矢量 表達。
§3.2 恢復原來的數據
3
http://wenku.baidu.com/link?url=rLdBkVzZ1OrDdF53K23mSclZR3U85xEQ0EIAXeZsWyD6jitn2uOtBlRSDvOAChUpeVx7YgoIaAyZtYxArIZNr056_arZKaY75JrQ88XxUFG
主成分分析模型:
基本思想:PCA采用數學降維的方法,找出幾個綜合變量來代替原來眾多的變量,使這些綜合變量能盡可能的代表原來變量的信息量,而且彼此之間互不相關。這種將把很多個變量化為少數幾個互相無關的綜合變量的統計分析方法就叫做主成分分析或主分量分析。
通常,數學上的處理方法就是將原來的變量做線性組合,作為新的綜合變量,但關鍵是如何選擇這種線性組合呢?
如果將選取的第一個線性組合即第一個綜合變量記為F1,自然希望它盡可能多的反映原來變量的信息,這里的“信息”用方差來測量,即希望Var(F1)越大,表示F1包含的信息越多。因此在所有的線性組合中所選取的F1應該是方差最大的,故稱F1為第一主成分。如果第一主成分不足以代表原來p個變量的信息,再考慮選取F2即第二個線性組合,為了有效地反映原來的信息,F1已有的信息就不需要再出現在F2中,用數學語言表達式就是要求Cov(F1,F2)=0,稱F2為第二主成分,依此類推可以構造出第三,四,,,,第p個主成分。
數學模型:
對於一個樣本資料,觀測個變量
,
個樣品的數據資料陣為:
其中:
主成分分析就是將個觀測變量綜合成為
個新的變量(綜合變量),即
簡寫為:
要求模型滿足以下條件:
①互不相關(
,
)
②的方差大於
的方差大於
的方差,依次類推
③
於是,稱為第一主成分,
為第二主成分,依此類推,有第
個主成分。主成分又叫主分量。這里
我們稱為主成分系數。
上述模型可用矩陣表示為:
,其中
稱為主成分系數矩陣。
(三)主成分分析的幾何解釋
假設有個樣品,每個樣品有二個變量,即在二維空間中討論主成分的幾何意義。設
個樣品在二維空間中的分布大致為一個橢園,如下圖所示:
圖1 主成分幾何解釋圖
將坐標系進行正交旋轉一個角度,使其橢圓長軸方向取坐標
,在橢圓短軸方向取坐標
,旋轉公式為
寫成矩陣形式為:
其中為坐標旋轉變換矩陣,它是正交矩陣,即有
,即滿足
。
經過旋轉變換后,得到下圖的新坐標:
圖2 主成分幾何解釋圖
新坐標有如下性質:
(1)個點的坐標
和
的相關幾乎為零。
(2)二維平面上的個點的方差大部分都歸結為
軸上,而
軸上的方差較小。
和
稱為原始變量
和
的綜合變量。由於
個點在
軸上的方差最大,因而將二維空間的點用在
軸上的一維綜合變量來代替,所損失的信息量最小,由此稱
軸為第一主成分,
軸與
軸正交,有較小的方差,稱它為第二主成分。