机器学习实战——主成分分析
1 主成分分析
主成分分析(Principal Component Analysis,PCA)是一种统计方法,通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。即通过正交变换之后,数据在变换后所构建的超平面上的投影尽可能分散,其分散程度可以通过方差来衡量,方差越大,投影之后的数据越分散。根据线性代数中的线性变换理论,方差的大小可以通过数据矩阵的特征值来衡量。
以下图中的二维数据为例,样本点在 B 上的投影较分散,可以把原来的二维降低为一维;对于高维数据,通过正交变换,第一个坐标轴选择原始数据中方差最大的方向,即最大特征值对应的特征向量,第二个坐标轴选择方差第二大的方向,即第二大的特征值对应的特征向量,其余轴的选择以此类推。
具体的原理解释可以参考这篇文章,其求解步骤如下:
对所有的样本求均值,并做去中心化处理;
计算协方差矩阵;
计算协方差矩阵的特征值和特征向量;
将特征值从大到小排序;
保留最前面的 N 个特征向量;
将数据转换到上述 N 个特征向量构建的新空间中。
其他常用的降维方法有因子分析与独立成分分析。因子分析(Factor Analysis),假设在观察数据的生成中有一些观察不到的隐变量,假设观察数据是这些隐变量和某些噪声的线型组合,就可以通过找到隐变量实现数据的降维;独立成分分析(Independent Component Analysis,ICA),ICA 假设是从 N 个数据源生成,数据为多个数据源的混合观察结果,这些数据源之间在统计上是相互独立的,如果数据源的数目少于观察数据的数目,就可以实现降维过程。
2 sklearn中的实现
在 sklearn 中常用的主成分分析的类有 KernelPCA、SparsePCA、IncrementalPCA、PCA 四种,KernelPCA 主要用于非线性数据的降维,需要用到核技巧,在使用的时需要选择合适的核函数,并对核函数的参数进行调参;IncrementalPCA 主要是为了解决单机内存限制的,有时样本量可能是上百万的、维度可能也是上千的,直接去拟合数据可能会让内存爆掉, 此时可以用 Incrementa