PCA是Principal Component Analysis(主成分分析)的缩写,此方法的目标是找到数据中最主要的元素和结构,去除噪音和冗余,将原有的复杂数据降维,揭露出隐藏在复杂数据背后的简单结构。从线性代数角度来看,PCA目标是找到一组正交基去重新描述得到的数据空间,这个维度就是主元,将原数据投影到该数据空间上,就可以达到降维的目的。
PCA算法的理论依据是K-L变换,通过寻找线性变换W,实现对高维数据的降维。
混乱的数据中通常包含三种成分:噪音、旋转和冗余。在区分噪音的时候,可以使用信噪比或者方差来衡量,方差大的是主要信号或者主要分量;方差较小的则认为是噪音或者次要分量;对于旋转,则对基向量进行旋转,使得信噪比或者方差较大的基向量就是主元方向;在判断各个观测变量之间是否冗余时,可以借助协方差矩阵来进行衡量和判断。
1.最小化冗余量,对应于协方差矩阵的非对角线元素要尽量小; 2.最大化信号,对应于要使协方差矩阵的对角线上的元素尽可能的大。对角线上的元素值越大,也就是对应于越重要的主元。该思想实现方法就是对协方差矩阵进行对角化。
1.PCA的内部模型是线性的,kernel-PCA就是使用非线性的权值对PCA扩展; 2.针对的样本的概率分布模型只限于指数概率分布模型。从而扩展出ICP(独立主元分析)。 3.数据本身具有较高的信躁比。 4.假设主元向量之间是正交的。
MySample=fix(rand(10,3)*50)
协方差是计算不同维度间的协方差,样本矩阵的每行是一个样本,每列为一个维度,所以我们要按列计算均值。
dim1=MySample(:,1);
dim2=MySample(:,2);
dim3=MySample(:,3);
计算dim1与dim2,dim1与dim3,dim2与dim3的协方差:
sum((dim1-mean(dim1)).*(dim2-mean(dim2)))/(size(MySample,1)-1);
sum((dim1-mean(dim1)).*(dim3-mean(dim3)))/(size(MySample,1)-1);
sum((dim2-mean(dim2)).*(dim3-mean(dim3)))/(size(MySample,1)-1);
协方差矩阵的对角线上就是各个维度上的方差
std(dim1)^2;
std(dim2)^2;
std(dim3)^2;
协方差矩阵也可以这样计算,先让样本矩阵中心化,即每一维度减去该维度的均值,使每一维度上的均值为0,然后直接用新得到的样本矩阵乘上它的转置,然后除以(N-1)。该方法可以由前面的公式推导出来。 matlab代码实现如下:
X=MySample=repmat(mean(MySample),10,1); % 中心化样本矩阵,使各维度均值为0
C=X'*X/(size(X,1)-1);
为什么在PCA中,协方差矩阵的特征向量就是主元,等价于原矩阵的奇异值分解,主元并非降维后的样本矩阵,而是投影矩阵,原矩阵可通过投影矩阵投影达到降维的目的。
观察PCA后的样本协方差矩阵和原始矩阵的协方差矩阵可以发现各个维度上的方差有所变化,但对角线之和没有变,能量重新得到了分配,这就是降噪的功劳。 将原矩阵与投影矩阵相称可得到降维后的矩阵。
PCA与LDA是特征抽取的两种主要经典方法 LDA(线性评判分析) 信号表示:特征抽取后的特征要能够精确地表示样本信息,使得信息丢失很小,对应的方法是PCA 信号分类:特征抽取后的特征,要使得分类后的准确率很高,不能比原来特征进行分类的准确率低。对于线性来说,对应的方法是LDA PCA不具有鉴别特性 LDA与PCA的目标不一样,导致他们的方法也不一样。PCA得到的投影空间是协方差矩阵的特征向量,而LDA则是通过求得一个变换W,使得变换之后的新均值之差最大,方差最大,变换W就是特征的投影方向。 PCA做分类时一般使用主向量作为特征进行分类,而不是降维后的矩阵来做分类。