在机器学习中,如何找到最有用的那个特征?——自动化特征选择
作者头像
  • 杨昌坤
  • 2020-05-10 15:24:09 1

机器学习快速入门指南

第十二篇:特征选择技巧

欢迎订阅!

您的支持是我持续创作的动力!

在上一篇文章中,我们探讨了如何通过增加特征来提升模型的拟合效果。然而,过多的特征也可能导致过拟合问题。因此,本篇文章将重点介绍如何减少特征数量,避免过拟合现象。我们将详细介绍三种自动化特征选择的方法。

单变量统计方法

第一种方法是利用单变量统计分析来选择特征。这种方法的核心思想是单独评估每个特征与目标变量之间的相关性,从而筛选出最有价值的特征。在scikit-learn库中,我们常用SelectKBest和SelectPercentile两个工具来进行特征选择。

实战案例

我们继续使用乳腺癌数据集作为示例。

首先,加载数据集: python from sklearn.datasets import load_breast_cancer cancer = load_breast_cancer()

接下来,将数据集划分为训练集和测试集: python from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target)

然后,选择特征选择工具SelectPercentile,并设置百分比为60%: python from sklearn.feature_selection import SelectPercentile tool = SelectPercentile(percentile=60)

应用工具到训练集,并进行特征变换: python tool.fit(X_train, y_train) X_new_train = tool.transform(X_train)

最后,检查特征数量的变化: python print(X_train.shape) # (426, 30) print(X_new_train.shape) # (426, 18)

通过上述操作,我们可以发现原本30个特征减少到了18个。我们还可以查看具体被选中的特征: python features = tool.get_support() import matplotlib.pyplot as plt plt.matshow(features.reshape(1, -1), cmap='Oranges_r')

基于模型的特征选择

第二种方法是基于模型的特征选择。这种方法通过构建一个监督学习模型来评估各个特征的重要性,然后只保留最重要的特征。需要注意的是,用于特征选择的模型不必与最终使用的模型一致。

在scikit-learn中,我们通常使用SelectFromModel类和随机森林模型来进行特征选择。因为随机森林提供了featureimportances属性,可以用来判断特征的重要性。

实战案例

首先,加载SelectFromModel和RandomForestClassifier工具: python from sklearn.feature_selection import SelectFromModel from sklearn.ensemble import RandomForestClassifier trans = SelectFromModel(RandomForestClassifier(), threshold='mean')

设定阈值为平均值,并应用到训练集: python trans.fit(X_train, y_train) X_trans_train = trans.transform(X_train)

检查特征数量的变化: python print(X_train.shape) # (426, 30) print(X_trans_train.shape) # (426, 7)

同样地,我们还可以查看具体被选中的特征: python feature = trans.get_support() plt.matshow(feature.reshape(1, -1), cmap='Oranges_r')

递归特征消除

第三种方法是递归特征消除(RFE)。该方法从所有特征开始,逐步剔除不重要的特征,直到达到所需的特征数量为止。为了实现这一点,我们需要选择一个能够提供特征重要性的模型,例如随机森林。

实战案例

首先,加载RFE工具和随机森林模型: python from sklearn.feature_selection import RFE rfe = RFE(RandomForestClassifier(), n_features_to_select=10)

指定需要保留的特征数量为10,并应用到训练集: python rfe.fit(X_train, y_train) X_rfe_train = rfe.transform(X_train)

检查特征数量的变化: python print(X_rfe_train.shape) # (426, 10)

通过上述步骤,我们可以发现特征数量减少到10个。同样地,我们可以通过可视化来查看具体被选中的特征: python fea = rfe.get_support() plt.matshow(fea.reshape(1, -1), cmap='Oranges_r')

至此,我们介绍了三种自动化特征选择的方法。如果您有任何疑问,欢迎随时联系我,希望您喜欢这篇文章,并给予支持!

    本文来源:图灵汇
责任编辑: : 杨昌坤
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
特征有用自动化机器那个找到选择如何学习
    下一篇