一、简介

这篇文章简单介绍了PCA的原理、思想和一些定义,本文将介绍如何用python进行PCA。

二、实现

2.1 标准化数据

 在对数据进行PCA前,需要先将数据进行中心标准化,即使特征的平均值为 0 0 0,方差为 1 1 1

from sklearn.preprocessing import StandardScaler
StandardScaler(*, copy=True, with_mean=True, with_std=True)

使用说明

  • 实例化:scaler = StandardScaler()
  • 训练:scaler.fit(data),可接着使用scaler.mean_得到每列的均值,使用scaler.scale_得到每列的标准差
  • 转换:scaler.transform(data),此时会返回转换后的数据,但不改变原数据,因此要用data_new = scaler.transform(data)
  • 训练并转换:data_new = scaler.fit_transform(data)

2.2 进行中心化

from sklearn.decomposition import PCA

模型参数

PCA(

	# 希望PCA降维后的特征维度数目
	# 也可以指定主成分的方差和所占的最小比例阈值,让PCA类自己去根据样本特征方差来决定降维到的维度数,此时n_components是一个(0,1]之间的数,而且svd_solver == 'full'
	# 还可以将参数设置为"mle", 此时PCA类会用MLE算法根据特征的方差分布情况自己去选择一定数量的主成分特征来降维,而且svd_solver == 'full'
	# 不输入n_components,此时n_components=min(样本数,特征数)
    n_components=None,
    *,

	# 表示是否在运行算法时,将原始训练数据复制一份
	# 若为True,则运行PCA算法后,原始训练数据的值不会有任何改变,因为是在原始数据的副本上进行运算
	# 若为False,则运行PCA算法后,原始训练数据的值会改,因为是在原始数据上进行降维计算
    copy=True,

	# 判断是否进行白化,所谓白化,就是对降维后的数据的每个特征进行归一化,让方差都为1.
	# 对于PCA降维本身来说,一般不需要白化
	# 如果PCA降维后有后续的数据处理动作,可以考虑白化。
	# 默认值是False,即不进行白化
    whiten=False,

	# 指定奇异值分解SVD的方法
	# 可选{‘auto’, ‘full’, ‘arpack’, ‘randomized’}
	# randomized一般适用于数据量大,数据维度多同时主成分数目比例又较低的PCA降维,它使用了一些加快SVD的随机算法
	# full则是传统意义上的SVD,使用了scipy库对应的实现
	# arpack和randomized的适用场景类似,区别是randomized使用的是scikit-learn自己的SVD实现,而arpack直接使用了scipy库的sparse SVD实现
	# 默认是auto,即PCA类会自己去在前面讲到的三种算法里面去权衡,选择一个合适的SVD算法来降维。一般来说,使用默认值就够了
    svd_solver='auto',
    tol=0.0,
    iterated_power='auto',
    random_state=None,
)

模型常用方法

  • fit(X)——用数据集X拟合模型
  • transform(X)——对数据集X应用降维
  • fit_transform(X)——使用数据集X拟合模型,并在数据集X上应用降维
  • inverse_transform(X)——将数据转换回其原始空间
  • score(X)——返回所有样本的平均对数似然率
  • score_samples(X)——返回每个样本的对数似然

模型常用属性

  • components_——特征空间中的主轴,表示数据中最大方差的方向。按explained_variance_排序。它的shape为(n_components_, n_features_),排在第一个的是第一主成分,排在第二个的是第二主成分,依次类推。
  • explained_variance_——代表降维后的各主成分的方差值。方差值越大,则说明越是重要的主成分
  • explained_variance_ratio_——代表降维后的各主成分的方差值占总方差值的比例,这个比例越大,则越是重要的主成分
  • singular_values_——每个特征的奇异值,奇异值等于n_components 低维空间中变量的2范数
  • mean_——每个特征的均值
  • n_components_——有多少个主成分
  • n_features_——训练数据中的特征数量
  • n_samples_——训练数据中的样本数
  • noise_variance_——等于X协方差矩阵的 ( m i n ( n _ f e a t u r e s , n _ s a m p l e s ) − n _ c o m p o n e n t s ) (min(n\_features,n\_samples)-n\_components) (min(n_featuresn_samples)n_components)个最小特征值的平均值
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐