图像特征提取系列之PCA

1:为什么图像处理需要PC A?

1- 如果【特征向量】维度过高,不仅会增加计算复杂度,还会给分类问题带来负面影响,造成识别,或者分类精度降低。
2- 可能,直观上,感觉特征越多,就越多的描述【样本的属性】,可提高识别率。
3- 其实,并不是???!!


假设,要区分西瓜,冬瓜。我们可以直接通过表皮就纹理,就可以做出正确的判断。那么,我多加几个特征:(重量)(形状)(体积)(是否有籽),可能还会对分类造成干扰。

:实际上,对于【特定样本数目】的情况下,特征维度与识别率关系 大概如下曲线:


图像特征提取系列之PCA_第1张图片

注意:x轴—特征向量数目, y轴—分类性能。
这就需要对【特征降维】,其中一个重要手段:PCA.

2: PCA 干什么?

【实质】:尽可能好的保留原始数据信息的条件下,通过【线性变换】将高维空间中样本数据投影到低维空间。

3: PCA怎么干?数学解释

1- 提取 样本协方差矩阵S 的 前K个特征值【求矩阵特征值,然后排序,然后取前K个】对应的特征向量【这些特征向量保证相互正交】。
2- 实际上,就是找到一组基,将原来的矩阵投影到新的 空间上。
3- 几何解释


图像特征提取系列之PCA_第2张图片

1- 在二维平面,求出来的两个本征向量就是,E1,E2. PCA实际上做:投影变换【从原来的X,Y轴,转换到了一组新的E1,E2 坐标系】
2- 这实际上也是去除数据的线性相关的过程。
【直观解释】:如果直接用眼看,让你先给一个向量,使得样本数据在此方向上的差异【方差】表现最大。那肯定E1,找到第二个,必须跟第一个垂直,也就是E2.

4:计算实例

已知样本   X={(1,2), (3,3), (3,5), (5,4), (5,6), (6,5), (8,7), (9,8)}
问题: 利用1个,2个主成分 实现X的重构(表达X)。

1- 计算样本均值 m=(5,5);
2- 计算协方差矩阵:


这里写图片描述

3- 求S特征值 lamda1 = 9.34, lamda2 = 0.41
求特征向量 e1 = (0.81,0.59)T ,e2 = (-0.59 0.81) T;
e1 与e2 彼此单位正交。
4 -降至一维:


这里写图片描述

结果: a1 = -5.01, a2 = -2.8 , a3 = -1.62, a4 = -0.59 ,a5 = 0.59, a6= 0.81 ,a7 = 3.61, a8=5.01
5 -二维:
【a1 = -5.01, a2 = -2.8 , a3 = -1.62, a4 = -0.59 ,a5 = 0.59, a6= 0.81 ,a7 = 3.61, a8=5.01】
第二维度【-0.07, 0.44, 1.18, -0.81, 0.81, 0.59, -0.15, 0.07】

5:matlab 计算上题

x=[1,2;
   3,3;
   3,5;
   5,4;
   5,6;
   6,5;
   8,7;
   9,8]
   [COFFE,Score, latent] = princomp(X);  %主成分分析 注意matlab版本应低于2014b

— — — — — — - - - - - - 
X =

     1     2
     3     3
     3     5
     5     4
     5     6
     6     5
     8     7
     9     8


COFFE =               %变幻基矩阵,每一个列向量构成变换空间中的一组基

    0.8086   -0.5883
    0.5883    0.8086


Score =               % 主成分,Score(:,1) 就是第一个最重要的分量,Score(:,2) 次之

   -4.9995   -0.0728
   -2.7939   -0.4407
   -1.6173    1.1766
   -0.5883   -0.8086
    0.5883    0.8086
    0.8086   -0.5883
    3.6025   -0.1476
    4.9995    0.0728


latent =             %协方差矩阵的特征值

   10.6764
    0.4664

实际上,我们做过CenterLoss实验的都知道,我们可以对LFW图像提取特征之后,再应用PCA。然后就上上面那样,找一个最好的维度,去将原来的特征空间,转换到新的特征空间,那么原来的特征在新的空间上有新的表示。
那如果想把未来的一张图片,投影的原来已经设定好的特征空间,应该如何做呢?

%*************************************************************************
%    ┊File Name: pca_fea.m
%    ┊Author: bin.wang
%    ┊Mail:   [email protected]
%    ┊Created Time: Fri 16 Jun 2017 09:03:37 PM CST
%************************************************************************/
% this file for find top-K principle component 

% feature.mat include 2 variables :fea & fea_p ,size(fea)==size(fea_p)=[6000,512]
load feature.mat         
% pca for fea then result store in Score ,size(Score)=[6000,512]
[COFFE,Score, latent] = princomp(fea); 

% compute transform matrix for pca 
fea_p_mean=mean(fea_p);
for i=1:6000
    %each col = col - mean(col)
    fea_p_sub_mean(i,:)=fea_p(i,:)-fea_p_mean(:,:);
end

%project fea_p to a new subspace ;
proj_fea_p=fea_p_sub_mean * COFFE;

你可能感兴趣的:(Algorithm)