前言
在前面的博文pca演算法學習_1(opencv中pca實現人臉降維)中已經初步介紹了pca演算法的大概流程及在人臉降維上面的應用。本文就進一步介紹下其理論基礎和matlab的實現(也是網上學者的**)。
開發環境:matlab2012a
基礎
假設x是乙個m*n的矩陣,是由樣本資料構成的矩陣。其中m表示樣本的屬性維數,n表示樣本的個數。現在要對x進行線性變換變成另乙個矩陣y,使得y的協方差矩陣為對角矩陣,這樣的y就認為是對原始矩陣x提取主成分後的矩陣,實際過程中只需取y的前面主要的行即可。
x變換到y的線性變換公式為:
x和y的協方差計算方法為:
從下面的公式可以看出cy和cx的關係為:
因為cx是對稱矩陣,對cx進行特徵值分解就可以將其變換成對角矩陣,見下面的公式推導:
公式中的p和e滿足:
其中d是由cx的特徵向量構成的對角矩陣。p是線性變換矩陣,p的每一行都是cx矩陣的特徵向量,且p是正交矩陣,一般情況下把特徵值大的特徵向量排在矩陣前面幾行。
由此可知,求出p後就可以求出x主成分矩陣了。
另外,還可以求出pca的白化矩陣,pca的白化矩陣就是特徵向量去相關的矩陣,白化矩陣的協方差陣一般為單位矩陣,在pca中可以這麼求:inv(sqrt(d))*e'。普通的pca演算法可以將輸入矩陣x變成主成分矩陣y,儘管y的協方差矩陣是個對角矩陣,但不一定是單位矩陣,如果對y繼續使用白化操作,則y的協方差矩陣就變成了單位矩陣了。
原始碼
該pca函式介面形式為:
[y,v,e,d] = pca(x)其中x為輸入資料,x的每一列是乙個輸入樣本。返回值y是對x進行pca分析後的投影矩陣。v是與x有關的協方差矩陣特徵向量的白化矩陣,e是對應的特徵向量(列)構成的矩陣,d是對應的特徵值構成的對角矩陣(特徵值處於對角線上)。返回值中的白化矩陣,特徵向量和特徵值都是按照對應特徵值大小進行排序後了的。
其matlab原始碼如下:
function [y,v,e,d] =pca(x)% do
pca on image patches
%%input variables:
% x matrix with image patches as
columns
%%output variables:
%y the project matrix of the input data x without whiting
%v whitening matrix
%e principal component transformation (orthogonal)
%d variances of the principal components
%去除直流成分
x = x-ones(size(x,1),1)*mean(x);
% calculate the eigenvalues and eigenvectors of the new
covariance matrix.
covariancematrix = x*x'
/size(x,2); %求出其協方差矩陣
%e是特徵向量構成,它的每一列是特徵向量,d是特徵值構成的對角矩陣
%這些特徵值和特徵向量都沒有經過排序
[e, d] =eig(covariancematrix);
%sort the eigenvalues and recompute matrices
%因為sort函式是公升序排列,而需要的是降序排列,所以先取負號,diag(a)是取出a的對角元素構成
%乙個列向量,這裡的dummy是降序排列後的向量,order是其排列順序
[dummy,order] = sort(diag(-d));
e = e(:,order);%將特徵向量按照特徵值大小進行降序排列,每一列是乙個特徵向量
y = e'
*x;d = diag(d); %d是乙個列向量
%dsqrtinv是列向量,特徵值開根號後取倒,仍然是與特徵值有關的列向量
%其實就是求開根號後的逆矩陣
dsqrtinv = real(d.^(-0.5
));
dsqrtinv = diag(dsqrtinv(order));%是乙個對角矩陣,矩陣中的元素時按降序排列好了的特徵值(經過取根號倒後)
d = diag(d(order));%d是乙個對角矩陣,其對角元素由特徵值從大到小構成
v = dsqrtinv*e'
;%特徵值矩陣乘以特徵向量矩陣
PCA演算法學習 2 PCA理論的matlab實現
本文 前言 在前面的博文pca演算法學習 1 opencv中pca實現人臉降維 中已經初步介紹了pca演算法的大概流程及在人臉降維上面的應用。本文就進一步介紹下其理論基礎和matlab的實現 也是網上學者的 開發環境 matlab2012a 基礎 假設x是乙個m n的矩陣,是由樣本資料構成的矩陣。其...
PCA演算法學習 2 PCA理論的matlab實現
pca演算法學習 2 pca理論的matlab實現 前言 在前面的博文 pca演算法學習 1 opencv中pca實現人臉降維 中已經初步介紹了pca演算法的大概流程及在人臉降維上面的應用。本文就進一步介紹下其理論基礎和matlab的實現 也是網上學者的 開發環境 matlab2012a 基礎 假設...
PCA演算法學習 2 PCA理論的matlab實現
前言 在前面的博文pca演算法學習 1 opencv中pca實現人臉降維 中已經初步介紹了pca演算法的大概流程及在人臉降維上面的應用。本文就進一步介紹下其理論基礎和matlab的實現 也是網上學者的 開發環境 matlab2012a 基礎 假設x是乙個m n的矩陣,是由樣本資料構成的矩陣。其中m表...