PCA演算法學習 2 PCA理論的matlab實現

2021-09-09 04:57:55 字數 2512 閱讀 9050

前言

在前面的博文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表...