PCA介绍
用途
主要用法就是数据降维,对于一组不同维度之间可能存在线性相关关系的数据,PCA能够把这组数据通过正交(即内积为0,或者说相互垂直)变换变成各个维度之间线性无关的数据,经过PCA处理的数据中的各个样本之间的关系往往更直观,所以它是一种非常常用的数据分析和预处理工具。
PCA处理之后的数据各个维度之间是线性无关的,通过剔除方差较小的那些维度上的数据,我们可以达到数据降维的目的。但数据降维就意味着会有数据损耗,所以要尽可能选择方差大的。方差大代表数据分散且丰富。
主成分分析(PCA)是一种基于变量协方差矩阵对数据进行压缩降维,去噪的有效方法。
算法思想
将数据坐标系旋转使其达到降低维度的目的,例如三维要降到二维,三维坐标轴为(x,y,z),将x轴旋转到y轴,这样就变成一个二维数组,变成(x',y),如果想变回原来的表达方式,需要将这两个坐标之间的变换矩阵存下来。
主成分分析(PCA)是一种基于变量协方差矩阵对数据进行压缩降维,去噪的有效方法,PCA的思想是将n维特征映射到k维上(k<n),这k维特征称为主元(主成分),是旧特征的线性组合,这些线性组合最大化样本方差,尽量使用新的k个特征互不相关。这k维是全新的正交特征,是重新构造出来的k维特征,而不是简单地从n维特征中取出其余n-k维特征。
PCA数学原理
中心化:
例如有:
第一行平均值为2,第二行平均值为3,第一行的每一个数字减去平均值,第二行同理,得到
这样子中心化就做好了(也就是字段均值化为0)。
方差:
上面我们已经将每个字段的均值都化0 了,因此方差可以直接用每个元素的平方和除以元素个数表示:
协方差:
在字段均值为0的情况下,两个字段的协方差简洁的表示为其内积除以元素数m。
降维问题的优化目标:将一组N维向量降维k维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的k个方差)。
协方差矩阵对角化:
即除对角线外的其他元素化为0,并且在对角线上将元素按照大小从上到下排列
协方差矩阵又称为对称矩阵,在线性代数上,对称矩阵有一系列非常好的性质:
1.对称矩阵不同特征值对应的特征向量必然正交。
2.设特征向量 λ 重数为r,则必然存在r个线性无关的特征向量对应于 λ,因此可以将这r个特征向量单位正交化。
算法步骤
PCA从原始变量出发,通过坐标旋转变化(即原始变量的线性组合)构建出一组新的,互不相关的新变量,这些变量尽可能多的解释原始数据之间的差异性(即数据内在的结构),他们就成为原始数据的主成分。由于这些变量不相关,因此他们无重叠的各自解释一部分差异性。依照每个变量解释时差异性大小排序,他们成为第一主成分,第二主成分,以此类推。
1.将原始数据按列组成n行m列矩阵X
2.将X的每一行(代表一个属性字段)进行零均值化(去平均值),即减去这一行的平均值。
3.求出协方差矩阵C=1/m*X*XT
4.求出协方差矩阵的特征值和对应的特征向量
5.将特征向量按照对应特征值大小从上到下按行排列成矩阵,取k行组成矩阵P
6.Y=PX为降维到k维后的数据。
核主成分分析KPCA介绍
上面介绍的都是假设存在一个线性的超平面,可以让我们对数据进行投影。但是有些时候,数据不是线性的,不能直接进行PCA降维。这里就需要用到和支持向量机一样的核函数的思想,先把数据集从n维映射到线性可分的高维N>n,然后再从N维降维到一个低维度n', 这里的维度之间满足n'<n<N。
使用了核函数的主成分分析一般称之为核主成分分析(Kernelized PCA, 以下简称KPCA。假设高维空间的数据是由n维空间的数据通过映射ϕ产生。
则对于 n 维空间的特征分解:
映射为:
通过在高维空间进行协方差矩阵的特征值分解,然后用和PCA一样的方法进行降维。一般来说,映射 Φ 不用显式的计算,而是在需要计算的时候通过核函数完成。由于KPCA需要核函数的运算,因此它的计算量要比PCA大很多。
常用PCA类介绍
IncrementalPCA类:它主要是为了解决单机内存限制的,IncrementalPCA先将数据分成多个batch,然后对每个batch依次递增调用partial_fit函数,这样一步步的得到最终的样本最优降维。
KernelPCA类:主要用于非线性数据的降维,需要用到核技巧。
参考文章: