使用 PCA 进行降维处理——基于 sklearn 库

在最初阅读《数据挖掘:概念与技术》的时候,第一次注意到了这个词汇:PCA(Principal component analysis),主成分分析。最初对这部分内容并没有深入的了解,直到最近项目拿到数据开始分析了,才开始认真学习这部分内容。具体的原理,可以继续阅读参考链接中的内容,总结来说,PCA 就是通过寻找高维空间中,数据变化最快(方差最大)的方向,对空间的基进行变换,然后选取重要的空间基来对数据降维,以尽可能的保持数据特征的情况下对数据进行降维。

今天的重点不是理论,而是对 sklearn 这个机器学习库中 PCA 方法的实战,其实就是翻译文档啦。想在想到查找一个Python 库怎么用,第一反应就是打开文档对应的页面,然后结合 Google 搜出来的其他分享,学习使用。查 sklearn 的文档时,发现还是很完善的,在对个机器学习有基本了解的情况下,可以快速上手,并且有相关案例结合进行分析。PCA 的文档页其实就是 sklearn.decomposition.PCA中的 docstring,不知道其他的函数方法是不是也是这样的,如果不方便上网的话,直接查询 docstring 也许就能对这个方法 or 类的用法了解了。废话太多了,该开始正文了。

PCA 这个类是在 sklearn.decomposition中的,因此要使用如下的命令导入这个类

线性降维(Linear dimensionality reduction)使用 SVD(奇异值分解)对数据进行处理,保留最重要的前 n 个奇异值向量(singular vectors,似乎和特征向量不一样)在较低的纬度对原数据集进行映射。PCA 类的实现使用可 scipy.linalg 来实现 SVD ,它只作用于密集矩阵(非稀疏的),并且不能扩展到高维(large dimensional)数据下。时间复杂度是 O(n^3),对于 n 维 的 n 个数据。

PCA 类的原型为:

其中的参数含义如下:

n_components:int 或者 string,缺省时默认为None,所有成分被保留。PCA算法中所要保留的主成分个数n,也即保留下来的特征个数n;赋值为string,比如n_components=’mle’,将自动选取特征个数n,使得满足所要求的方差百分比。

copy:True或者False,缺省时默认为True。表示是否在运行算法时,将原始训练数据复制一份。True 将保持原始数据不变,False 则直接在原始数据上进行计算

whiten:缺省时默认为False。白化,是否使得每个特征具有相同的方差。

PCA 类包含如下的属性:

components_ :array, [n_components, n_features]返回具有最大方差的成分。
explained_variance_ratio_:array, [n_components]返回 所保留的n个成分各自的方差百分比,当 n 没有设定时,各项的和应为1.0
n_components_:int 返回所保留的成分个数n。当它被设为’mle’或者0-1的数字时,表示选中方差百分比和的比重。
noise_variance_: float 没看懂。。。似乎和一本书(或者一篇论文?)的上的内容有关。

PCA类的方法列表:

fit(X[, y]) —— Fit the model with X.
fit_transform(X[, y])—— Fit the model with X and apply the dimensionality reduction on X.
get_covariance() —— Compute data covariance with the generative model.
get_params([deep]) —— Get parameters for this estimator.
get_precision() —— Compute data precision matrix with the generative model.
inverse_transform(X) —— Transform data back to its original space, i.e.,
score(X[, y]) —— Return the average log-likelihood of all samples
score_samples(X) —— Return the log-likelihood of each sample
set_params(**params) —— Set the parameters of this estimator.
transform(X) —— Apply the dimensionality reduction on X.

总结:简单来说,使用 PCA 的方法流程:

  1. 通过参数实例化 PCA 类,通常要定义要保留的维数;
  2. 使用实例的 fit()函数对数据进行训练(fit 函数几乎在 sklearn 所有的机器学习算法中都有实现,通常都要对数据集进行 fit 操作);
  3. 然后通过 transform()方法返回降维后的数据(进行空间基变化后)。

TODO:给出一个例子

然后可以通过其他的属性和方法对数据进行分析,比如explained_variance_ratio_来获得降维后数据变化的方差百分比情况。

参考链接:

  • 机器学习中的数学 算法讲解,包括随后一篇对协方差矩阵和 SVD 在 PCA 中的对比,也值得一看
  •  UFLDL 教程 斯坦福无监督学习和深度学习教程,有对 PCA 的讲解。

发表评论

电子邮件地址不会被公开。 必填项已用*标注