引用:http://www.javashuo.com/article/p-cjkvrihl-ne.html算法
將n維特徵映射到k維上,只保留包含絕大部分方差的維度特徵,而忽略包含方差幾乎爲0的特徵維度,實現對數據特徵的降維處理。ui
PCA算法有兩種實現方法:基於特徵值分解協方差矩陣實現PCA算法、基於SVD分解協方差矩陣實現PCA算法。spa
1:對原始矩陣X進行去平均值。.net
2:求原始矩陣的協方差。blog
3:根據協方差矩陣計算特徵值和對應的特徵向量和標準化特徵向量。排序
4:根據特徵值,將對應的標準化特徵向量進行排序,每一個特徵向量寫做行向量Pip
5:最終降維結果:Y=Pk*Xget
1首先去平均值,每一位特徵減去各自的平均值。平均值爲0,減0仍爲原值。class
2以後計算協方差,。。得協方差矩陣。引用
3而後根據0,求得(5/6-λ)^2=16/25。求得λ:。根據,得當λ=2,X1=X2。令X1=1,則X2=1,特徵向量P1=[1;1],同理,P2=[1;-1].而後求出P1和P2的標準特徵向量。組成P。
4根據特徵值,進行排序並寫做行向量:,降到1維,則取第一行
5最終降維
針對第二種方案基於SVD分解協方差:
1:對原始矩陣X進行去平均值。
2:根據SVD計算特徵值和對應的特徵向量和標準化特徵向量。
3:根據特徵值,將對應的標準化特徵向量進行排序,每一個特徵向量寫做行向量P
4:最終降維結果:Y=Pk*X
選擇左奇異矩陣,進行使用,而後求得協方差矩陣的特徵值與特徵向量。
引用:https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/Dv51K8JETakIKe5dPBAPVg
針對任意矩陣A,分解爲:。U爲A的行爲參照的方陣,爲左奇異矩陣。Σ和A的行列相同,除了對角線其它元素都爲0。V爲A的列爲參照的方陣,爲右奇異矩陣。
分解的步驟爲:
1求出:,設爲M,做爲U的計算準備。,設爲N做爲V的計算準備。
2針對M矩陣求出特徵值,特徵向量。針對N矩陣求出特徵值,特徵向量。並將所求特徵向量標準化爲ui和vi。
3利用根據ui和vi求出σ的全部值。
4將全部值進行歸併,求出表達式。並利用U得到原始A的特徵值,特徵向量。
例如:計算。
使用MATLAB的算法:
clear all,clc; A=[[-1,1];[-2,-1];[-3,-2];[1,1];[2,1];[3,2]]; A_mean=A-mean(A);#去平均值 A_div=A_mean; M=A_div'*A_div; N=A_div*A_div'; [M_vector,M_val]=eig(M); [N_vector,N_val]=eig(N); M_vector=fliplr(M_vector); N_vector=fliplr(N_vector); %M_vector=flipud(M_vector) %N_vector=flipud(N_vector) M_val=diag(M_val); N_val=diag(N_val); M_val=flipud(M_val) N_val=flipud(N_val) theta1=sqrt(M_val(1)); theta2=sqrt(M_val(2)); cgma=zeros(size(A)); cgma(1,1)=theta1; cgma(2,2)=theta2; %-(N_vector*cgma*M_vector') -N_vector*cgma
取第一列即得到了降維哦!