目录
1、PCA原理
-
资料来源:《随机过程》by 清华张颢
1.1 从去相关的角度看待PCA
假设,存在一个函数(变换),使得,即互不相关,其中。
-
存在一个变换使得变换后的Y的各个成分是不相关的。
-
我们将有色噪声转化为独立分布的白噪声的过程,称为白化(Whiten),就是去相关。
-
由于,是一个实对称阵,一定可以相似对角化,且,且P是由的特征向量组成,
1.2 从主成分的角度看待PCA
基于最大投影的分析
1.3 从Kahunan-Loeve基的角度看待PCA
为PCA变换,逆变换为。由于变换U是正交的,而变换后的系数也是不相关的,因此是双正交的K-L展开。
1.4 从SVD的角度看待PCA
https://zhuanlan.zhihu.com/p/58064462 深入理解PCA和SVD的关系
PCA是的特征值分解,SVD是的特征值分解,且SVD有对行压缩,有对列压缩,也有对行压缩。
2、Matlab代码示例
利用20帧来做主成分提取,P=[列1,列2,列3],每一列是一个图像向量。
%P的数据格式:要把这个矩阵的两行数据降到一行。C=X.*X'
% [-1,-1,0,2,0; //特征1
% -2,0,0,1,1] //特征2
% X={x1,x2,x3,...,xn}每一个xn为一个样本,样本为列。每一行为特征,此处共两个特征
%将pathch矩阵化为|(w1*w1,n*n)|的矩阵,这样|P(:,i)|每一列是一个patch.就是把图像变成每一个列为一个样本
resh = @(P)reshape(P, [n*n w1*w1])';%注意有一个转置操作才是|(w1*w1,n*n)|的矩阵,49*16348
remove_mean = @(Q)Q - repmat(mean(Q), [w1*w1 1]);
P1 = remove_mean(resh(P));
C = P1*P1';%49*16348 乘以 16348*49,结果是一个49*49的协方差矩阵,共有49个特征值
[V,D] = eig(C); D = diag(D);
[D,I] = sort(D, 'descend'); V = V(:,I);
plot(D); axis('tight');
for i=1:16
imageplot( reshape(V(:,i),[w1 w1]), '', 4,4,i );
end
d = 25;%用5*5的patch去表示7*7的patch
iresh = @(Q)reshape(Q', [n n d]);
descriptor = @(f)iresh( V(:,1:d)' * remove_mean(resh(P)) );
H = descriptor(f);%重建算子
同时参考前面EigenFace的代码