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

2021-07-29 15:08:24 字數 1904 閱讀 8138

推薦一篇絕對好的文章:理解pca的數學原理

pca(principle component analysis)主成分分析,主要應用於資料降維,它是一種非監督的降維方法,主要捕獲觀測資料之間的變異程度。

當資料集的維度過高之後,運用各種演算法處理起來的時間複雜度可能會很高,所以需要對資料進行降維處理,而且可以盡量保證資料的資訊丟失最少。總的來說,pca的過程步驟如下:

設有 m

m條 n

' role="presentation" style="position: relative;">n

n維資料;

(1)、將原始資料按列組成 n∗

m n∗m

的矩陣

x x

; (2)、將

x' role="presentation" style="position: relative;">x

x的每一行(代表乙個屬性字段)進行零均值化,即減去這一行的均值;

(3)、求出協方差矩陣:c=

1mx⋅xtc

=1mx

⋅xt(4)、求出協方差矩陣的特徵值及其對應的特徵向量;

(5)、將特徵向量按對應特徵值大小從上到下按行排列成矩陣,取前

k k

行組成矩陣

p' role="presentation" style="position: relative;">pp;

(6)、y=pxy

=px即為降維到

k k

維後的資料;

關鍵的步驟:

我們主要目的是:實現資料的降維,並且能夠保證資料盡可能不要丟失資訊。

這裡需要實現的就是兩點

(1)、最大化資料投影後的方差;

(2)、使降維後資料之間的重疊資訊盡量少,也就是新的

k' role="presentation" style="position: relative;">k

k維空間的基向量相互正交。

所以導致了乙個結果

(1)、降維後資料的協方差矩陣應該是對角矩陣;

(2)、而且對角線上的元素值盡可能大。

最後推導得到:

優化目標變成了尋找乙個矩陣

p p

,滿足p⋅c

⋅pt' role="presentation" style="position: relative;">p⋅c

⋅ptp

⋅c⋅p

t是乙個對角矩陣,並且對角元素按從大到小依次排列,那麼p的前k行就是要尋找的基,用p的前k行組成的矩陣乘以x就使得x從n維降到了k維並滿足上述優化條件。

pca捕捉了大部分**變數方差,第乙個主成分是在所有可能的線性組合中能夠捕捉最多**變數方差的組合。之後的主成分依次與之前的主成分不相關。

pca作為非監督的降維方法,也不會考慮資料的測量標度和分布,它不會考慮結局變數。所以,沒有相關的指導資訊,可能得到的主成分與最終的結局變數沒有任何關係。

pca在sklearn中的使用:here

pca演算法乙個簡單的實現:github

from sklearn.decomposition import pca   

pca = pca(n_components=1)

newdata = pca.fit_transform(data)

各降維方法的討論見:he

PCA主成分分析(降維)

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

降維 PCA 主成分分析

其實早該整理一下pca了,怎奈一直沒有時間,可能是自己對時間沒有把握好吧,下面進入正題。所謂降維,就是降低資料的維數。在機器學習中尤其常見,之前做過對一幅提取小波特徵,對於一幅大小為800 600的,如果每個點提取五個尺度 八個方向的特徵,那麼每乙個畫素點提取40個特徵,那麼一副的話就是40 800...

主成分分析PCA降維函式

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