主成分分析PCA
PCA(Principal Components Analysis)即主成分分析,是图像处理中经常用到的降维方法,大家知道,我们在处理有关数字图像处理方面的问题时,比如经常用的图像的查询问题,在一个几万或者几百万甚至更大的数据库中查询一幅相近的图像。这时,我们通常的方法是对图像库中的图片提取响应的特征,如颜色,纹理,sift,surf,vlad等等特征,然后将其保存,建立响应的数据索引,然后对要查询的图像提取相应的特征,与数据库中的图像特征对比,找出与之最近的图片。这里,如果我们为了提高查询的准确率,通常会提取一些较为复杂的特征,如sift,surf等,一幅图像有很多个这种特征点,每个特征点又有一个相应的描述该特征点的128维的向量,设想如果一幅图像有300个这种特征点,那么该幅图像就有300*vector(128维)个,如果我们数据库中有一百万张图片,这个存储量是相当大的,建立索引也很耗时,如果我们对每个向量进行PCA处理,将其降维为64维,是不是很节约存储空间啊?
主成分分析一般过程
特征抽取的目标是根据原始的d个特征的组合形成k个新的特征,即将数据从d维空间映射到k维空间。在文本分析领域常用的降维方法是主成分分析(Principal Component Analysis, PCA)和奇异值分解(Singular Value Decomposition, SVD)。 在下文的叙述中,将沿袭机器学习的常用符号,使用x表示一个列向量,它是样本x在d维空间中的点。而由n个样本构成的数据集可以表示为一个d×n的矩阵XPCA PCA背后的数学基础是特征值分析,即Σv=λv,v是特征向量,λ是特征值。PCA的目标是最大化数据间累积方差。PCA的一般过程是:
- 去除平均值:means;
- 计算X的协方差矩阵Σ;
- 计算Σ的特征向量和特征值(特征向量用列向量v_d×1表示);
- 将特征值从大到小排序;
- 保留最上面的k个特征向量(这k个特征向量保证了数据映射到特征值最大的特征向量的方向时,数据间的累积方差最大,数据映射到第二大的特征向量时,数据间的累积方差次之,且特征向量之间保持正交)构成的特征向量矩阵V_d×k;
- 将数据转换到上述k个特征向量构建的新空间中(V^TX=A*_k×n + means,A是一个k×n的矩阵)。
我想用一个简单的例子来说明主成分分析的能力:
主成分分析简单实例(从博客上扣的图)
关于SVD和PCA这里我只是通过做一个简单的介绍,如果大家感兴趣可以参考以下更多的博文和资料:
- http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html 【强大的矩阵奇异值分解(SVD)及其应用】
- http://www.tuicool.com/articles/BnUVraB 【SVD的计算步骤】
- http://blog.csdn.net/zhongkejingwang/article/details/43053513 【奇异值分解(SVD)原理详解及推导 】
- http://blog.sina.com.cn/s/blog_50363a7901011ax8.html 【奇异值分解[Singular Value Decomposition]】
- http://www.ams.org/samplings/feature-column/fcarc-svd
- http://blog.csdn.net/misscoder/article/details/51094330 【 PCA (主成分分析)详解 (写给初学者) 结合matlab 】