递归特征消除 spss_一文带你入门特征工程

对于机器学习,更多的数据总是更好。数据的更多特征呢?不必要。本初学者指南提供了用于从数据中选择最有用的功能的代码示例,可帮助您开始开发最有效的学习模型。

您不会使用可以做的举报次数来确定公交车的到达时间吗?同样,在预测建模中,我们会修剪掉无用的功能,以减少最终模型的复杂性。简而言之,特征选择减少了开发预测模型时输入特征的数量。

在本文中,我将讨论功能选择的3个主要类别。过滤器方法,包装器方法和嵌入式方法。另外,我使用Python示例并利用诸如scikit-learn进行机器学习,Pandas进行数据操作以及Plotly进行交互式数据可视化等框架。

为什么选择特征?

第一段旨在传达的信息是,有时某些功能无法为预测最终结果提供足够的有用信息,因此通过将其包含在模型中,我们不必要地使模型变得更加复杂。丢弃无用的特征会导致一个简化的模型,从而减少了评分时间。此外,功能选择还使解释模型变得更加容易,这在大多数业务案例中极为重要。

“在大多数实际情况下,应用功能选择不太可能在性能上带来较大的提升。但是,它仍然是功能工程师工具箱中的宝贵工具。” —(Müller,(2016年),《 Python机器学习入门》,O'Reilley Media)

方法

可以使用多种方法来执行特征选择,它们属于3类之一。每种方法都有其自身的优点和缺点。Guyon&Elisseeff(2003)中对类别进行了如下描述:

  • 过滤方法 -选择变量子集作为预处理步骤,与所选预测变量无关。
  • 包装方法 -将感兴趣的学习机用作黑盒,根据变量的预测能力对变量子集进行评分。
  • 嵌入式方法 -在训练过程中执行变量选择,通常特定于给定的学习机。

过滤方式

过滤器方法使用单变量统计信息来评估从每个输入要素到目标要素(目标变量/因变量)是否存在统计上显着的关系-我们正在尝试预测的关系。提供最高可信度的功能是我们为最终模型保留的功能。因此,此方法独立于我们决定用于建模的选择模型。

“即使变量排名不是最佳的,由于其计算和统计可伸缩性,它可能也比其他变量子集选择方法更可取” -Guyon和Elisseeff(2003)

过滤方法的一个例子是Pearson的相关系数-您可能在高中统计课上就碰到过这一点。这是一个统计量,用于测量输入X要素与输出Y要素之间的线性相关量。取值范围是+1到-1,其中1表示总正相关,-1表示总负相关。因此,0表示没有线性相关。

要计算皮尔逊相关系数,请使用输入要素X和输出要素Y的协方差,然后将其除以两个要素的标准差的乘积-该公式如下图所示。

递归特征消除 spss_一文带你入门特征工程_第1张图片

Pearson相关系数的公式,其中Cov是协方差,σX是X的标准偏差,而σY是Y的标准偏差。

import pandas as pd
from sklearn.datasets import load_boston

# load data
boston_bunch = load_boston()
df = pd.DataFrame(data= boston_bunch.data,
                  columns= boston_bunch.feature_names)

# adding the target variable
df["target"] = boston_bunch.target
df.head() 

递归特征消除 spss_一文带你入门特征工程_第2张图片

以下代码是Python中实现的用于特征选择的Pearson相关系数的示例。

递归特征消除 spss_一文带你入门特征工程_第3张图片

然后,只需选择输入特征,如下所示…

7f6dc790a0817a625b2bdbdb6ccfb281.png

优点

  • 防止过度拟合(会产生偏差)
  • 比包装方法快得多

缺点

  • 不考虑其他功能之间的相互作用
  • 不考虑采用的模型

包装方法

维基百科将包装器方法描述为使用“预测模型对要素子集进行评分”。每个新的子集都用于训练模型,并在保留集上进行测试。计算该保持集上的错误数(模型的错误率)可得出该子集的分数。” — 包装方法Wikipedia。包装器方法使用的算法被称为贪婪,因为它试图找到导致最佳性能模型的特征的最佳组合。

“包装器特征选择方法会创建具有输入特征的各种不同子集的许多模型,并根据一些性能指标来选择那些导致最佳性能模型的特征。” —杰森·布朗利 Jason Brownlee)

一种包装方法是递归特征消除(RFE),顾名思义,该方法通过递归移除特征来工作,然后使用其余特征构建模型并计算模型的准确性。

scikit-learn中的RFE实施文档。

from sklearn.feature_selection import RFE
from sklearn.linear_model import LinearRegression

# input and output features
X = df.drop("target", axis= 1)
y = df["target"]

# defining model to build
lin_reg = LinearRegression()

# create the RFE model and select 6 attributes
rfe = RFE(lin_reg, 6)
rfe.fit(X, y)

# summarize the selection of the attributes
print(f"Number of selected features: {rfe.n_features_}n
Mask: {rfe.support_}n
Selected Features:", [feature for feature, rank in zip(X.columns.values, rfe.ranking_) if rank==1],"n
Estimator : {rfe.estimator_}")

下面的打印语句返回…

递归特征消除 spss_一文带你入门特征工程_第4张图片

优点

  • 能够检测特征之间发生的相互作用
  • 通常比过滤方法具有更好的预测准确性
  • 查找最佳特征子集

缺点

  • 计算上昂贵
  • 容易过拟合

嵌入式方法

嵌入式方法与Wrapper方法类似,因为该方法还优化了预测模型的目标函数,但是将两种方法分开的是,在嵌入式方法中,在学习过程中使用了固有度量来构建模型。因此,嵌入式方法需要一个监督学习模型,该模型将本质上确定每个特征对于预测目标特征的重要性。

注意:用于特征选择的模型不必是用作最终模型的模型。

LASSO(最小绝对收缩和选择算子)是嵌入式方法的一个很好的例子。Wikipedia将LASSO描述为“一种回归分析方法,既执行变量选择又进行正则化,以提高其产生的统计模型的预测准确性和可解释性。”

递归特征消除 spss_一文带你入门特征工程_第5张图片

这将返回Lasso回归模型认为相关的列...

[“ CRIM”,“ ZN”,“ RM”,“ AGE”,“ DIS”,“ RAD”,“ TAX”,“ PTRATIO”,“ B”,“ LSTAT”)

我们还可以使用瀑布图来可视化系数…

递归特征消除 spss_一文带你入门特征工程_第6张图片

递归特征消除 spss_一文带你入门特征工程_第7张图片

先前代码的输出;瀑布图显示要素之间的系数;请注意,已将3个特征设置为0,这意味着它们被模型忽略。

优点

  • 计算速度比包装方法快
  • 比过滤方法更准确
  • 一次考虑所有功能
  • 不容易过拟合

缺点

  • 选择特定于模型的特征
  • 不如包装方法强大

提示:没有最佳功能选择方法。对于一个业务用例而言,哪种方法可能行得通,而对另一种业务用例而言,效果却不佳,因此您需要进行实验并查看哪种方法最有效。

结论

在本文中,我介绍了执行特征选择的不同方法。当然,还有其他方法可以进行特征选择,例如方差分析,后向特征消除和使用决策树。

你可能感兴趣的:(递归特征消除,spss)