降維 PCA 主成分分析

2022-09-03 22:03:29 字數 2031 閱讀 4623

其實早該整理一下pca了,怎奈一直沒有時間,可能是自己對時間沒有把握好吧,下面進入正題。

所謂降維,就是降低資料的維數。在機器學習中尤其常見,之前做過對一幅提取小波特徵,對於一幅大小為800*600的,如果每個點提取五個尺度、八個方向的特徵,那麼每乙個畫素點提取40個特徵,那麼一副的話就是40*800*600=19200000個特徵。也就是我們用乙個19200000的向量描述一幅。如果有m幅,那麼特徵為m*19200000的大小。顯然這個維數太大了,所以需要降維。

形式化的描述:假設資料矩陣為xm,n(這個矩陣可能是feature矩陣,也可能是其他矩陣)。m代表資料的大小,n代表維數,通常n非常大。降維的目的是我們希望找到乙個矩陣y=xp,使得y滿足以下兩個條件:

(a) y的維度小於x的維度(這樣就起到了降維的目的)。

(b) y的各個維度之間的差異越大越好(差異越大,表示包含的資訊越多,對描述資料越有效);

條件(a)比較容易滿足,我們只需要pn,t(tm,t顯然起到了降維的目的。因此我們的重點是找到p滿足(b)。

為此,我們首先給出差異性度量的準則-方差和協方差。

對於資料矩陣xm,n,它的第 j 維資料的差異性可以用方差來表示:

對於資料xm,n,我們希望的是它的所有的維與維之間的差異性越大越好,維p與維q之間的差異性可以用協方差表示:

這樣,資料xm,n的各個維度的差異性可以用協方差矩陣c表示

顯然,協方差矩陣是乙個實對陣矩陣。通過上面的式子計算協方差矩陣還是比較麻煩的,我們直接在矩陣上操作,對矩陣x進行中心化

那麼協方差矩陣可以通過下式得到

可見協方差矩陣計算起來還是挺簡單的。

有了協方差矩陣的概念以後,我們繼續前面的討論:前面提到,我們需要乙個這樣的y=xp(中心化的),它的各個維度之間的差異越大越好,也就是y的協方差矩陣d的不同維度之間的協方差越小越好,形式化的表述為

到了這一步就比較明了了。還記得我們需要乙個什麼樣的d嗎,這個d最好是乙個對角陣,使得不在對角線上的元素均為0。問題轉化為實對稱矩陣的對角化問題。根據矩陣論的知識我們知道,乙個是對稱矩陣必存在乙個正交矩陣p使得ptap為對角陣。

原則上說講到這裡就算講完了,但是這個定力還有乙個限制,a是線性無關的(或者說a有n個不同的特徵值),此時把a的特徵值從大到小排序,每乙個特徵值對應乙個特徵向量,我們把這些特徵向量從左到右排起來就得到了p。如果我們取前 t 個特徵值,那麼p的大小為n*t,通過y=xp,我們得到的 y 就是乙個m*t的矩陣(x是m*n的矩陣),從而起到了降維的作用。當然,如果p的大小為n*n,那麼沒有起到降維的目的,但是將x對映到了乙個新的空間。

從幾何的角度來講,其實線性變換就是空間對映,我們沒有改變資料在空間中的位置,但是用了不同的基來表示他,關於基感覺這篇部落格講的很到位:

m=10;

n=100;

t=50;

x=100*rand([m,n]);%%original data

x=x-repmat(mean(x),m,1);%centralization

c=(x'

*x)/m;

[e,d]=eig(c);

[dummy,order] = sort(diag(-d));

e = e(:,order);%將特徵向量按照特徵值大小進行降序排列,每一列是乙個特徵向量

d =d(:,order);

y=x*e(:,1:t); %y

PCA主成分分析(降維)

opencv中使用 實現降維分類預處理 參考 降維 我的理解是,通過降維得到基本特徵可以加快學習演算法。並且由於降維後的資料本身就是正交的,和聚類一樣可以實現分類 識別問題。在自我學習中也可以採用大量無標註的影象,對這些影象降維分類,並結合部分編碼資料得到特徵。例如 將很2500張人臉資訊,通過25...

降維方法 主成分分析(PCA)

推薦一篇絕對好的文章 理解pca的數學原理 pca principle component analysis 主成分分析,主要應用於資料降維,它是一種非監督的降維方法,主要捕獲觀測資料之間的變異程度。當資料集的維度過高之後,運用各種演算法處理起來的時間複雜度可能會很高,所以需要對資料進行降維處理,而...

主成分分析PCA降維函式

在matlab中有內建的built in function pca降維函式 coeff,score,latent,tsquared,explained princomp x 其中輸出score即為經過pca變換後的資料,但是預設取全部主成分,如x是100x20,其中100是樣本數,20是特徵維數,則...