特征工程之特征选择----降维算法PCA重要参数

Posted iostreamzl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了特征工程之特征选择----降维算法PCA重要参数相关的知识,希望对你有一定的参考价值。

序言

前面一篇博文,我们已经了解了PCA的基本使用方法,但是对其中的参数,属性,我们还没有深入了解,这篇文章,我们将深入了解PCA的参数

关于参数n_components的简单概述

n_components参数决定了我们降维后需要保留的参数的个数。默认值为min(X.shape)
n_components有三种形式的值:

  • 整数类型:n_components的输入值范围为[0-min(X.shape)],这种方式是人为确定留下的特征个数,容易遇到的问题是:保留的特征信息量不够大,解决办法:可解释性方差曲线 选取超参数
  • mle :最大似然估计(maximum likelihood estimator), 可以让PCA自动选择最佳的参数,缺点耗时很大
  • 信息量占比 :取值在[0-1],最后保留下来的特征的信息量占总信息量的比例大于该值。需要注意的是使用这种方式时需要让参数svd_solver=‘full’, 表示希望降维后的总解释性方差大于指定的百分比。

准备工作

导入相关的模块

# 准备工作啊,导入相关的模块
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# %matplotlib inline

# 加载数据集,获取特征,标签
iris = load_iris()
X, y = iris.data, iris.target

n_components参数使用示例

整数型n_components

# 整数型n_components
pca_2 = PCA(n_components=2)
X_dim2 = pca_2.fit_transform(X)
X_dim2.shape
# (150, 2)

# 通过explained_variance_ratio_查看信息量的占比
pca_2.explained_variance_ratio_.sum()
# 0.9776852063187949

可解释性方差曲线

# 通过可解释性方差的曲线选取n_components的最佳取值
# 一般选择曲线上的转折点

# n_components为默认值,即最后留下的特征为min(X.shape)
# 通过这种方式可以获得每一个特征的信息量占比
pca = PCA()
X_default = pca.fit_transform(X)

# 查看新的特征矩阵的每一个特征的信息量比例
var = pca.explained_variance_ratio_
var
# array([0.92461872, 0.05306648, 0.01710261, 0.00521218])

# 通过np.cumsum()计算可解释性方差的累计加和
# 并画出可解释性方差的曲线
var_sum = np.cumsum(var)
var_sum

plt.plot(range(1, len(var_sum)+1), var_sum)
plt.xticks(range(1, len(var_sum) + 1))
plt.xlabel("降维后的特征保留数", fontsize=15)
plt.ylabel('可解释性方差总和', fontsize=15)
plt.show()

在这里插入图片描述
这里的转折点为2,3.可以预知n_components的取值为2或3都是ok的。
这里的数据只有4给特征,通过画曲线的方法还不是很明显的反映n_components的取值情况

n_components=mle

# n_components=mle
pca_mle = PCA(n_components='mle')
X_mle = pca_mle.fit_transform(X)
X_mle.shape
# (150, 3)

pca_mle.explained_variance_ratio_.sum()
# 0.9947878161267246

百分比型n_components

# 百分比型n_components
pca_percentage = PCA(n_components=0.99, svd_solver='full')
X_percentage = pca_percentage.fit_transform(X)
X_percentage.shape
# (150, 3)

pca_percentage.explained_variance_ratio_.sum()
# 0.9947878161267246

svd_solver参数简述

svd_solver是在降维过程中用来控制矩阵一些矩阵分解细节的参数
有四种模式可选:auto, full, arpck, randomized,

  • auto:默认值,会根据数据量选择使用full还是randomized
  • full适合数据量适中,计算时间充足的情况
  • arpack:可以加快运算速度,适合数据量大的情况,但是实际上这个用的不多
  • randomized适合特征矩阵庞大,计算量很大的情况

一般情况下使用auto,当auto无法计算时使用randomized。

random_state参数

仅当svd_solver值为arpack或randomized时才生效。一般情况下svd_solver为auto所以不用太过关注这个参数

总结

到这里关于PCA的重要参数已经讲完了,对于n_components具体应该用哪一种类型的参数,需要视具体情况而定。下面的一篇博文将讲PCA在特征较多的数据上的应用。

以上是关于特征工程之特征选择----降维算法PCA重要参数的主要内容,如果未能解决你的问题,请参考以下文章

机器学习实战之PCA

PCA降维算法

常用降维方法之PCA 和 LDA

机器学习之主成分分析(PCA&特征选择)

PCA算法

主成分分析