日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

PCA(Principal Component Analysis)的原理、算法步骤和实现。

發布時間:2023/11/27 生活经验 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PCA(Principal Component Analysis)的原理、算法步骤和实现。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PCA的原理介紹:?

??????? PCA(Principal Component Analysis)是一種常用的數據分析方法。PCA通過線性變換將原始數據變換為一組各維度線性無關的表示,可用于提取數據的主要特征分量,常用于高維數據的降維。PCA的實質就是在盡最大可能保存原有信息的前提下,對原特征數據進行線性變換、映射變換到低維空間中。

主成分分析 ( Principal Component Analysis , PCA )或者主元分析。是一種掌握事物主要矛盾的統計分析方法,它可以從多元事物中解析出主要影響因素,揭示事物的本質,簡化復雜的問題。計算主成分的目的是將高維數據投影到較低維空間。給定 n 個變量的 m 個觀察值,形成一個 n ′ m 的數據矩陣, n 通常比較大。對于一個由多個變量描述的復雜事物,人們難以認識,那么是否可以抓住事物主要方面進行重點分析呢?如果事物的主要方面剛好體現在幾個主要變量上,我們只需要將這幾個變量分離出來,進行詳細分析。但是,在一般情況下,并不能直接找出這樣的關鍵變量。這時我們可以用原有變量的線性組合來表示事物的主要方面, PCA 就是這樣一種分析方法。 PCA 主要 用于數據降維,對于一系列例子的特征組成的多維向量,多維向量里的某些元素本身沒有區分性,比如某個元素在所有的例子中都為1,或者與1差距不大,那么這個元素本身就沒有區分性,用它做特征來區分,貢獻會非常小。所以我們的目的是找那些變化大的元素,即方差大的那些維,而去除掉那些變化不大的維,從而使特征留下的都是“精品”,而且計算量也變小了。 對于一個k維的特征來說,相當于它的每一維特征與其他維都是正交的(相當于在多維坐標系中,坐標軸都是垂直的),那么我們可以變化這些維的坐標系,從而使這個特征在某些維上方差大,而在某些維上方差很小。例如,一個45度傾斜的橢圓,在第一坐標系,如果按照x,y坐標來投影,這些點的x和y的屬性很難用于區分他們,因為他們在x,y軸上坐標變化的方差都差不多,我們無法根據這個點的某個x屬性來判斷這個點是哪個,而如果將坐標軸旋轉,以橢圓長軸為x軸,則橢圓在長軸上的分布比較長,方差大,而在短軸上的分布短,方差小,所以可以考慮只保留這些點的長軸屬性,來區分橢圓上的點,這樣,區分性比x,y軸的方法要好! 所以我們的做法就是求得一個k維特征的投影矩陣,這個投影矩陣可以將特征從高維降到低維。投影矩陣也可以叫做變換矩陣。新的低維特征必須每個維都正交,特征向量都是正交的。通過求樣本矩陣的協方差矩陣,然后求出協方差矩陣的特征向量,這些特征向量就可以構成這個投影矩陣了。特征向量的選擇取決于協方差矩陣的特征值的大小。 舉例: 對于一個訓練集,100個對象模板,特征是10維,那么它可以建立一個100*10的矩陣,作為樣本。求這個樣本的協方差矩陣,得到一個10*10的協方差矩陣,然后求出這個協方差矩陣的特征值和特征向量,應該有10個特征值和特征向量,我們根據特征值的大小,取前四個特征值所對應的特征向量,構成一個10*4的矩陣,這個矩陣就是我們要求的特征矩陣,100*10的樣本矩陣乘以這個10*4的特征矩陣,就得到了一個100*4的新的降維之后的樣本矩陣,每個特征的維數下降了。 當給定一個測試的特征集之后,比如1*10維的特征,乘以上面得到的10*4的特征矩陣,便可以得到一個1*4的特征,用這個特征去分類。 所以做PCA實際上是求得這個投影矩陣,用高維的特征乘以這個投影矩陣,便可以將高維特征的維數下降到指定的維數。 PCA 的目標是尋找 r ( r<n )個新變量,使它們反映事物的主要特征,壓縮原有數據矩陣的規模。每個新變量是原有變量的線性組合,體現原有變量的綜合效果,具有一定的實際含義。這 r 個新變量稱為“主成分”,它們可以在很大程度上反映原來 n 個變量的影響,并且這些新變量是互不相關的,也是正交的。通過主成分分析,壓縮數據空間,將多元數據的特征在低維空間里直觀地表示出來。例如,將多個時間點、多個實驗條件下的基因表達譜數據( N 維)表示為 3維空間中的一個點,即將數據的維數從 RN 降到 R3 。 在進行基因表達數據分析時,一個重要問題是確定每個實驗數據是否是獨立的,如果每次實驗數據之間不是獨立的,則會影響基因表達數據分析結果的準確性。對于利用基因芯片所檢測到的基因表達數據,如果用 PCA 方法進行分析,可以將各個基因作為變量,也可以將實驗條件作為變量。當將基因作為變量時,通過分析確定一組“主要基因元素”,它們能夠很好地說明基因的特征,解釋實驗現象;當將實驗條件作為變量時,通過分析確定一組“主要實驗因素”,它們能夠很好地刻畫實驗條件的特征,解釋基因的行為。下面著重考慮以實驗條件作為變量的 PCA 分析方法。假設將數據的維數從 R N 降到 R 3 ,具體的 PCA 分析步驟如下: (2) 第二步計算協方差矩陣S的本征向量e1,e2,…,eN的本征值, i = 1,2,…,N 。本征值按大到小排序:; (3)第三步投影數據到本征矢張成的空間之中,這些本征矢相應的本征值為。數據可以在三維空間中展示為云狀的點集。 對于 PCA ,確定新變量的個數 r 是一個兩難的問題。我們的目標是減小 r ,如果 r 小,則數據的維數低,便于分析,同時也降低了噪聲,但可能丟失一些有用的信息。究竟如何確定 r 呢?這需要進一步分析每個主元素對信息的貢獻。 貢獻率表示所定義的主成分在整個數據分析中承擔的主要意義占多大的比重,當取前 r 個主成分來代替原來全部變量時,累計貢獻率的大小反應了這種取代的可靠性,累計貢獻率越大,可靠性越大;反之,則可靠性越小。一般要求累計貢獻率達到 70% 以上。 經過 PCA 分析,一個多變量的復雜問題被簡化為低維空間的簡單問題。可以利用這種簡化方法進行作圖,形象地表示和分析復雜問題。在分析基因表達數據時,可以針對基因作圖,也可以針對實驗條件作圖。前者稱為 Q 分析,后者稱為 R 分析。

PCA算法的步驟:

設有m條n維數據。

1)將原始數據按列組成n行m列矩陣X

2)將X的每一行(代表一個屬性字段)進行零均值化,即減去這一行的均值

3)求出協方差矩陣C=1mXXTC=1mXXT

4)求出協方差矩陣的特征值及對應的特征向量

5)將特征向量按對應特征值大小從上到下按行排列成矩陣,取前k行組成矩陣P

6)Y=PXY=PX即為降維到k維后的數據


PCA的Matlab實現:

  1. %PCA算法,matlab實現??
  2. function?F=pcad(A,n)%A是M*N??
  3. %測試實例A=[2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1;2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9]??
  4. %結果F=[0.8280,-1.7776,0.9922,0.2742,1.6758,0.9129,-0.0991,-1.1446,-0.4380,-1.2238]??
  5. %PCA第一步:均值化??
  6. X=A-repmat(mean(A,2),1,size(A,2))%去均值??
  7. %PCA第二步:求特征協方差矩陣??
  8. B=COV(X')%求協方差??
  9. %PCA第三步:求特征協方差矩陣的特征值和特征向量??
  10. [v,d]=eig(B)%求特征值和特征向量??
  11. %PCA第四步:將特征值按照從大到小的順序排序??
  12. d1=diag(d);%取出對角矩陣,也就是把特征值提出來組成一個新的M*1的d1矩陣??
  13. [d2?index]=sort(d1);?%特征值以升序排序?d2是排序后的結果?index是數排序以前的排名位置??
  14. cols=size(v,2);%?特征向量矩陣的列數??
  15. for?i=1:cols???%對特征向量做相反位置的調整?是個降序排列。這個過程把特征值和特征向量同時做相應的降序排列??
  16. ????vsort(:,i)?=?v(:,index(cols-i+1)?);?%?vsort?是一個M*col(注:col一般等于M)階矩陣,保存的是按降序排列的特征向量,每一列構成一個特征向量??
  17. ????%vsort保存的是協方差矩陣降序后的特征向量,為M*M階??
  18. ????dsort(i)?=?d1(index(cols-i+1));??%?dsort?保存的是按降序排列的特征值,是一維行向量,1*M??
  19. end??%完成降序排列??
  20. M=vsort(:,1:n)%提取主成分量??
  21. %PCA第五步:將樣本點投影到選取的特征向量上??
  22. F=(X'*M)'%最終的投影?
仿真結果:

>> x=[2,4,5;5,8,9;1,6,9;2,7,9];
>> [COFFE,SCORE,latent]=princomp(x);
>> COFFE

COFFE =

??? 0.3827??? 0.8511?? -0.3594
??? 0.6337??? 0.0413??? 0.7725
??? 0.6723?? -0.5234?? -0.5235

>> SCORE

SCORE =

?? -3.6341??? 1.0516??? 0.0121
??? 2.7379??? 1.6767?? -0.0702
?? -0.0601?? -1.8104?? -0.1775
??? 0.9562?? -0.9179??? 0.2356

>> latent

latent =

??? 7.2069
??? 2.6790
??? 0.0307

>> cumsum(latent)./sum(latent)

ans =

??? 0.7267
??? 0.9969
??? 1.0000

>> pareto(latent)





總結

以上是生活随笔為你收集整理的PCA(Principal Component Analysis)的原理、算法步骤和实现。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。