主成分分析(Principal Component Analysis)
主成分分析(PCA)是一个被广泛用于降维、有损数据压缩、特征提取和数据可视化的技术。PCA有两种常用的定义,分别是从最大化投影后数据的方差和最小化投影后数据与原始数据之间的误差两个角度考虑的。两个定义最终的结果是一致的,我们从方差最大化的角度具体讨论一下PCA。
方差最大化PCA的代码实现
方差最大化
考虑一个观察的数据集{xn},n=1,...,N,并且xn是一个D维的变量。当我们从方差最大化的角度去考虑PCA的时候,我们的目标其实是要将原始数据投影到一个低维(维数
首先我们考虑
我们现在只需要通过改变u1来最大化uT1Su1就解决问题了,这里很容易看出来,如果u1的模没有约束的话,这个最大化问题是没有解的。由此也可以说明前面假设u1为单位向量是有利于问题的讨论且不失一般性的。为了求解这个带约束的优化问题,我们引入拉格朗日乘子λ1,问题可以转化为最大化uT1Su1+λ1(1−uT1u1)。我们可以利用求导数并令导数为0得到问题的可行解是Su1=λ1u1,这说明u1应当是S的特征向量。我们通过简单变换可以得到
对于M>1的情况,我们可以考虑是在M=1的情况下每次给低维空间添加一个与之前已有的方向向量正交的新的方向向量并且它可以最大化低维数据的方差。
所以对于一般的M,这个问题的结果应当是根据原始数据的协方差矩阵
pca的代码实现
matlab已经实现了pca,有以下两个函数可以调用:
[coeff,score,latent,tsquared,explained]= pca(X) (1)[COEFF,SCORE,latent,tsquare] = princomp(X) (2)