PCA 主成分分析

来源:互联网 发布:网络连接错误711 编辑:程序博客网 时间:2024/05/03 14:08

PCA主元分析,即找出数据中最主要的信息,去除次要的,以降低数据量。
具体步骤是:
1.对每个样本提取出有用的信息组成一个向量;
2.求取出所有样本向量的平均值;
3.用每个样本向量减去向量的平均值后组成一个矩阵;
4.该矩阵乘以该矩阵的逆为协方差矩阵,这个协方差矩阵是可对角化的,对角化后剩下的元素为特征值,每个特征值对应一个特征向量(特征向量要标准化);
5.选取最大的N个特征值(其中N即为PCA的主元(PC)数,我感觉这个主元数是PCA的核心之处,可自己选取数的多少,数越少,越降低数据量,但识别效果也越差),将这N个特征值对应的特征向量组成新的矩阵;
6.将新的矩阵转置后乘以样本向量即可得到降维后的数据(这些数据是原数据中相对较为主要的,而数据量一般也远远小于原数据量,当然这要取决于你选取的主元数)。


PCA在OpenCV中有现成的cvCalcPCA函数可以调用,以下从OpenCV中文网站上复制来的函数用法:
void cvCalcPCA( const CvArr* data, CvArr* avg,
CvArr* eigenvalues, CvArr* eigenvectors, int flags );

参数说明:
data 
输入数据,每个向量是单行向量(CV_PCA_DATA_AS_ROW)或者单列向量(CV_PCA_DATA_AS_COL). 
avg 
平均向量,在函数内部计算或者由调用者提供 
eigenvalues 
输出的协方差矩阵的特征值 (已按照数值从大到小的顺序排好,我没有看过源码,写了个程序测试下发现的)
eigenvectors 
输出的协方差矩阵的特征向量(也就是主分量),每个向量一行 
flags 
操作标志,可以是以下几种方式的组合: 
CV_PCA_DATA_AS_ROW - 向量以行的方式存放(也就是说任何一个向量都是连续存放的) 
CV_PCA_DATA_AS_COL - 向量以列的方式存放(也就是说某一个向量成分的数值是连续存放的) 
(上面两种标志是互相排斥的) 
CV_PCA_USE_AVG - 使用预先计算好的平均值 

该函数对某个向量集做PCA变换.它首先利用cvCalcCovarMatrix计算协方差矩阵然后计算协方差矩阵的特征值与特征向量.输出的特征值/特征向量的个数小于或者等于MIN(rows(data),cols(data)).

0 0