PCA(principal component analysis)主成分分析法

《Aggregating local descriptors into a compact image representation》論文筆記
在論文中,提取到VLAD特徵後,要對特徵向量進行PCA降維,就是用一個大小爲D’ * D的矩陣M,對VLAD特徵向量x做變換,降維後的vector是x’ = Mx,x’的大小是D’維。矩陣M是由原樣本的協方差矩陣的D’個特徵向量構成。
爲什麼M要是特徵向量的矩陣呢?
根據PRML中的內容,理解如下:
這裏寫圖片描述

1,Maxinum Variance Formulation

PCA的一種定義就是要使降維後的特徵點的方差儘可能大。
考慮如上圖中二維的一組特徵點x,現在要對它們降到1維,圖中u1 是單位向量,它描述一個方向,那麼每個x降維後就是uT1x 。我們希望,降維後樣本儘量分散,儘可能不損失或少損失差異信息。也就是說,圖中的紅色點映射到u1 上的綠色點,要儘可能區分開,綠色點距離較近或者重合都會導致特徵點差異信息損失,從而使搜索精度降低。

特徵點均值:x=1NNn=1xn ,映射後均值:uT1x
映射後特徵點方差(variance):1NNn=1(uT1xnuT1x)2=u1Su1
其中S是原特徵點集的協方差矩陣:S=1NNn=1(xnx)(xnx)T
我們的目標就是求一個u1 使得映射後特徵點方差u1Su1 最大,還有一個約束條件:uT1u1=1
用拉格朗日乘數法求解,寫出拉格朗日函數:L=u1Su1+λ1(1uT1u1)
u1 求偏導並令偏導爲0,可得:Su1=λ1u1u1Su1=λ1.
可以看出,λ1 是S的一個特徵值,u1 是它對應的一個特徵向量,要使u1Su1 最大,則λ1 要取S的最大的特徵值。
所以PCA方法中用來做變換的矩陣M是這樣構成的:將原特徵點集的協方差矩陣的特徵值從大到小排列,取前D’個,把它們對應的特徵向量取出來組成M,M的第1行就是u1 ,第D’行是uD ,這個M是一個正交矩陣。
降維後原特徵點必然會損失一些信息,我們把降維後的x’再映射回去,得到xpxp=MTx=MTMx ,那麼xp=x+εp(x). ,其中εp(x) 是降維造成的信息損失(projection loss)。

2,Minimum-error formulation

PCA的另一種定義是最小誤差,也就是特徵點在映射過程中的損失最小,使映射後的樣本和映射前儘可能近似,反映在上文的圖中就是要使藍色的線段最短。

這樣我們就可以得到一個新的優化問題,這個優化問題的解與最大方差得到的解是一致的。詳細可見《Pattern Recognition and Machine Learning》。


論文中對傳統的PCA方法做了改進。
比如,全特徵點集的協方差矩陣的特徵值從大到小排列爲λ1,λ2...λD ,對應的特徵向量爲u1,u2...uD ,我們取特徵向量的前D’個構成矩陣M,用這個矩陣M=[uT1,uT2,...,uTD]T 來映射樣本集X=[x1,x2...xN] ,這裏的xn 都是特徵向量,我們得到映射後的樣本集

X=MX=u1x1...uDx1.........u1xN...uDxN.

可以看到,在X’的前幾行,是用較大的特徵值對應的特徵向量映射的,那麼這一部分數據方差較大,而到下面幾行,方差會越來越小,這樣會導致在建立ADC索引時,對於X’上面幾行的方差較大的子向量(subvector),索引編碼會更粗糙一些(因爲在ADC中對於每組subvector都是產生固定的k個聚類中心來作爲codebook),這樣就容易損失數據信息,影響搜索精度,所以需要balance方差。
於是論文中引入一個Q,得到如下優化問題:
Q=argminEx[||ϵq(QMX)||2].

那麼由PCA降維後的特徵點集就是X=QX=QMX.
而這個優化問題難以直接求解,文中提到兩種方法:
1,令矩陣Q爲Householder矩陣,則Q可以分解:Q=I2vvT. 其中I是單位矩陣,v未知,這樣把Q代入上述優化問題,可求得v,進而求得Q,具體求解過程論文沒有提供。
2,爲矩陣Q隨機賦值,論文中提到,這樣的Q在實驗中的結果還可以。

3,PCA代碼

function [Y, E, mu] = pca_(X) 
%[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

%去除直流成分
mu = mean(X, 2);
X  = X-repmat(mean(X, 2), 1, size(X, 2));

% Calculate the eigenvalues and eigenvectors of the new covariance matrix.
covarianceMatrix = X*X'/(size(X,2)-1); %求出其協方差矩陣
%E是特徵向量構成,它的每一列是特徵向量,D是特徵值構成的對角矩陣
%這些特徵值和特徵向量都沒有經過排序
[E, D] = eig(covarianceMatrix); 

% Sort the eigenvalues  and recompute matrices
% 因爲sort函數是升序排列,而需要的是降序排列,所以先取負號,diag(a)是取出a的對角元素構成
% 一個列向量,這裏的dummy是降序排列後的向量,order是其排列順序
[~,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 = d(order);%D是一個對角矩陣,其對角元素由特徵值從大到小構成
V = Dsqrtinv*E';%特徵值矩陣乘以特徵向量矩陣

E = E'; % 每一行爲一個特徵向量,降序排列

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章