推薦一篇絕對好的文章:理解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在sklearn中的使用:herepca作為非監督的降維方法,也不會考慮資料的測量標度和分布,它不會考慮結局變數。所以,沒有相關的指導資訊,可能得到的主成分與最終的結局變數沒有任何關係。
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是特徵維數,則...