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=1N∑Nn=1xn,映射后均值:uT1x

映射后特征点方差(variance):1N∑Nn=1(uT1xn?uT1x)2=u1Su1

其中S是原特征点集的协方差矩阵:S=1N∑Nn=1(xn?x)(xn?x)T

我们的目标就是求一个u1使得映射后特征点方差u1Su1最大,还有一个约束条件:uT1u1=1

用拉格朗日乘数法求解,写出拉格朗日函数:L=u1Su1+λ1(1?uT1u1)

对u1求偏导并令偏导为0,可得:Su1=λ1u1,u1Su1=λ1.

可以看出,λ1是S的一个特征值,u1是它对应的一个特征向量,要使u1Su1最大,则λ1要取S的最大的特征值。

所以PCA方法中用来做变换的矩阵M是这样构成的:将原特征点集的协方差矩阵的特征值从大到小排列,取前D’个,把它们对应的特征向量取出来组成M,M的第1行就是u1,第D’行是uD′,这个M是一个正交矩阵。

降维后原特征点必然会损失一些信息,我们把降维后的x’再映射回去,得到xp,xp=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...uD′x1.........u1xN...uD′xN????.

可以看到,在X’的前几行,是用较大的特征值对应的特征向量映射的,那么这一部分数据方差较大,而到下面几行,方差会越来越小,这样会导致在建立ADC索引时,对于X’上面几行的方差较大的子向量(subvector),索引编码会更粗糙一些(因为在ADC中对于每组subvector都是产生固定的k个聚类中心来作为codebook),这样就容易损失数据信息,影响搜索精度,所以需要balance方差。

于是论文中引入一个Q,得到如下优化问题:

Q=argminEx[||?q(QMX)||2].

那么由PCA降维后的特征点集就是X″=QX′=QMX.

而这个优化问题难以直接求解,文中提到两种方法:

1,令矩阵Q为Householder矩阵,则Q可以分解:Q=I?2vvT.其中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‘; % 每一行为一个特征向量,降序排列

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-20 13:53:01

PCA(principal component analysis)主成分分析法的相关文章

PCA(Principal Components Analysis)主成分分析

全是图片..新手伤不起.word弄的,结果csdn传不了..以后改.. 版权声明:本文为博主原创文章,未经博主允许不得转载.

主成分分析(Principal Component Analysis,PCA

主成分分析(Principal Component Analysis,PCA)是将多个变量通过线性变换以选出较少几个重要变量的多元统计分析方法. 原理:在用统计分析方法研究多变量的课题时,变量个数太多就会增加课题的复杂性.人们自然希望变量个数较少而得到的信息较多.在很多情形,变量之间是有一定的相关关系的,当两个变量之间有一定相关关系时,可以解释为这两个变量反映此课题的信息有一定的重叠.主成分分析是对于原先提出的所有变量,将重复的变量(关系紧密的变量)删去多余,建立尽可能少的新变量,使得这些新变量

用PCA降维 (Principal Component Analysis,主成分分析)

参考资料:Mastering Machine Learning With scikit-learn 降维致力于解决三类问题.第一,降维可以缓解维度灾难问题.第二,降维可以在压缩数据的同时让信息损失最 小化.第三,理解几百个维度的数据结构很困难,两三个维度的数据通过可视化更容易理解 PCA简介 主成分分析也称为卡尔胡宁-勒夫变换(Karhunen-Loeve Transform),是一种用于探索高维数据结 构的技术.PCA通常用于高维数据集的探索与可视化.还可以用于数据压缩,数据预处理等.PCA可

A tutorial on Principal Components Analysis | 主成分分析(PCA)教程

A tutorial on Principal Components Analysis 原著:Lindsay I Smith, A tutorial on Principal Components Analysis, February 26, 2002. 翻译:houchaoqun.时间:2017/01/18.出处:http://blog.csdn.net/houchaoqun_xmu  |  http://blog.csdn.net/Houchaoqun_XMU/article/details

核主成分分析(Kernel Principal Component Analysis, KPCA)的公式推导过程

KPCA,中文名称"核主成分分析",是对PCA算法的非线性扩展,言外之意,PCA是线性的,其对于非线性数据往往显得无能为力,例如,不同人之间的人脸图像,肯定存在非线性关系,自己做的基于ORL数据集的实验,PCA能够达到的识别率只有88%,而同样是无监督学习的KPCA算法,能够轻松的达到93%左右的识别率(虽然这二者的主要目的是降维,而不是分类,但也可以用于分类),这其中很大一部分原因是,KPCA能够挖掘到数据集中蕴含的非线性信息. 1. 理论部分 KPCA的公式推导和PCA十分相似,只

解释一下核主成分分析(Kernel Principal Component Analysis, KPCA)的公式推导过程(转载)

KPCA,中文名称"核主成分分析",是对PCA算法的非线性扩展,言外之意,PCA是线性的,其对于非线性数据往往显得无能为力,例如,不同人之间的人脸图像,肯定存在非线性关系,自己做的基于ORL数据集的实验,PCA能够达到的识别率只有88%,而同样是无监督学习的KPCA算法,能够轻松的达到93%左右的识别率(虽然这二者的主要目的是降维,而不是分类,但也可以用于分类),这其中很大一部分原因是,KPCA能够挖掘到数据集中蕴含的非线性信息. 今天突然心血来潮,想重新推导一下KPCA的公式,期间遇

【统计学习】主成分分析PCA(Princple Component Analysis)从原理到实现

[引言]--PCA降维的作用 面对海量的.多维(可能有成百上千维)的数据,我们应该如何高效去除某些维度间相关的信息,保留对我们"有用"的信息,这是个问题. PCA给出了我们一种解决方案和思路. PCA给我的第一印象就是去相关,这和数据(图像.语音)压缩的想法是一致的.当然,PCA像是一种有损的压缩算法.但是不要紧,去除掉的信息也许是噪声呢,而且损失的信息不是"主要成分". PCA 降维的概念不是简单的去除原特征空间的某些维度,而是找出原特征空间的新的正交基,并且这个

【cs229-Lecture14】主成分分析法

本节课内容: 因子分析 ---因子分析中的EM步骤的推导过程 主成份分析:有效地降低维度的方法 因子分析 混合高斯模型的问题 接下来讨论因子分析模型,在介绍因子分析模型之前,先看高斯分布的另一种写法,该写法是推导因子分析模型的基础. 高斯分布的矩阵写法 因子分析模型 因子分析模型的推导 EM 求解参数 PCA(Principal  Components  Analysis,  主成分分析),也是一种降维方法 主要介绍 PCA(Principal  Components  Analysis,  主

[zz] Principal Components Analysis (PCA) 主成分分析

http://matlabdatamining.blogspot.com/2010/02/principal-components-analysis.html 英文Principal Components Analysis的博客,写的挺好,担心以后打不开,全文转载. Principal Components Analysis Introduction Real-world data sets usually exhibit relationships among their variables.