特征选择是从原始特征中选择出一些最有效特征以降低数据集维度、提高法性能的方法。

我们知道模型的性能会随着使用特征数量的增加而增加。但是,当超过峰值时,模型性能将会下降。这就是为什么我们只需要选择能够有效预测的特征的原因。

特征选择类似于降维技术,其目的是减少特征的数量,但是从根本上说,它们是不同的。区别在于要素选择会选择要保留或从数据集中删除的要素,而降维会创建数据的投影,从而产生全新的输入要素。

特征选择有很多方法,在本文中我将介绍 Scikit-Learn 中 5 个方法,因为它们是最简单但却非常有用的,让我们开始吧。

1、方差阈值特征选择

具有较高方差的特征表示该特征内的值变化大,较低的方差意味着要素内的值相似,而零方差意味着您具有相同值的要素。

方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征,使用方法我们举例说明:

import pandas as pd
import seaborn as sns
mpg = sns.load_dataset('mpg').select_dtypes('number')
mpg.head()

对于此示例,我仅出于简化目的使用数字特征。在使用方差阈值特征选择之前,我们需要对所有这些数字特征进行转换,因为方差受数字刻度的影响。

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
mpg = pd.DataFrame(scaler.fit_transform(mpg), columns = mpg.columns)
mpg.head()

所有特征都在同一比例上,让我们尝试仅使用方差阈值方法选择我们想要的特征。假设我的方差限制为一个方差。

from sklearn.feature_selection import VarianceThreshold
selector = VarianceThreshold(1)
selector.fit(mpg)
mpg.columns[selector.get_support()]

方差阈值是一种无监督学习的特征选择方法。如果我们希望出于监督学习的目的而选择功能怎么办?那就是我们接下来要讨论的。

2、SelectKBest特征特征

单变量特征选择是一种基于单变量统计检验的方法,例如:chi2,Pearson等等。

SelectKBest 的前提是将未经验证的统计测试与基于 X 和 y 之间的统计结果选择 K 数的特征相结合。

mpg = sns.load_dataset('mpg')
mpg = mpg.select_dtypes('number').dropna()
#Divide the features into Independent and Dependent Variable
X = mpg.drop('mpg' , axis =1)
y = mpg['mpg']

由于单变量特征选择方法旨在进行监督学习,因此我们将特征分为独立变量和因变量。接下来,我们将使用SelectKBest,假设我只想要最重要的两个特征。

from sklearn.feature_selection import SelectKBest, mutual_info_regression
#Select top 2 features based on mutual info regression
selector = SelectKBest(mutual_info_regression, k =2)
selector.fit(X, y)
X.columns[selector.get_support()]

3、递归特征消除(RFE)

递归特征消除或RFE是一种特征选择方法,利用机器学习模型通过在递归训练后消除最不重要的特征来选择特征。

根据Scikit-Learn,RFE是一种通过递归考虑越来越少的特征集来选择特征的方法。

  • 首先对估计器进行初始特征集训练,然后通过coef_attribute或feature_importances_attribute获得每个特征的重要性。

  • 然后从当前特征中删除最不重要的特征。在修剪后的数据集上递归地重复该过程,直到最终达到所需的要选择的特征数量。

在此示例中,我想使用泰坦尼克号数据集进行分类问题,在那里我想预测谁将生存下来。

#Load the dataset and only selecting the numerical features for example purposes
titanic = sns.load_dataset('titanic')[['survived', 'pclass', 'age', 'parch', 'sibsp', 'fare']].dropna()
X = titanic.drop('survived', axis = 1)
y = titanic['survived']

我想看看哪些特征最能帮助我预测谁可以幸免于泰坦尼克号事件。让我们使用LogisticRegression模型获得最佳特征。

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
# #Selecting the Best important features according to Logistic Regression
rfe_selector = RFE(estimator=LogisticRegression(),n_features_to_select = 2, step = 1)
rfe_selector.fit(X, y)
X.columns[rfe_selector.get_support()]

默认情况下,为RFE选择的特征数是全部特征的中位数,步长是1.当然,你可以根据自己的经验进行更改。

4、SelectFromModel 特征选择

Scikit-Learn 的 SelectFromModel 用于选择特征的机器学习模型估计,它基于重要性属性阈值。默认情况下,阈值是平均值。

让我们使用一个数据集示例来更好地理解这一概念。我将使用之前的数据。

from sklearn.feature_selection import SelectFromModel
sfm_selector = SelectFromModel(estimator=LogisticRegression())
sfm_selector.fit(X, y)
X.columns[sfm_selector.get_support()]

与RFE一样,你可以使用任何机器学习模型来选择功能,只要可以调用它来估计特征重要性即可。你可以使用随机森林模或XGBoost进行尝试。

5、顺序特征选择(SFS)

顺序特征选择是一种贪婪算法,用于根据交叉验证得分和估计量来向前或向后查找最佳特征,它是 Scikit-Learn 版本0.24中的新增功能。方法如下:

  • SFS-Forward 通过从零个特征开始进行功能选择,并找到了一个针对单个特征训练机器学习模型时可以最大化交叉验证得分的特征。

  • 一旦选择了第一个功能,便会通过向所选功能添加新功能来重复该过程。当我们发现达到所需数量的功能时,该过程将停止。

让我们举一个例子说明。

from sklearn.feature_selection import SequentialFeatureSelectorsfs_selector = SequentialFeatureSelector(estimator=LogisticRegression(), n_features_to_select = 3, cv =10, direction ='backward')
sfs_selector.fit(X, y)
X.columns[sfs_selector.get_support()]

结论

特征选择是机器学习模型中的一个重要方面,对于模型无用的特征,不仅影响模型的训练速度,同时也会影响模型的效果。


往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑温州大学《机器学习课程》视频
本站qq群851320808,加入微信群请扫码:

【特征工程】不容错过的 5 种特征选择的方法!相关推荐

  1. 机器学习5种特征选择的方法!

    我们知道模型的性能会随着使用特征数量的增加而增加.但是,当超过峰值时,模型性能将会下降.这就是为什么我们只需要选择能够有效预测的特征的原因. 特征选择类似于降维技术,其目的是减少特征的数量,但是从根本 ...

  2. ML之FE:特征工程中数据缺失值填充的简介、方法、全部代码实现之详细攻略

    ML之FE:特征工程中数据缺失值填充的简介.方法.全部代码实现之详细攻略 目录 特征工程中数据缺失值填充的简介.方法.经典案例

  3. 背景图层和普通图层的区别_新手如何在PS中创建图层?不容错过的7种方法,你值得学习...

    昨天跟小波一起认识了PS图层的童鞋应该已经对它不陌生了,那么在了解之后就要来实践操作,毕竟实践出真知嘛.那这一章就一起来学习在PS中创建图层吧. 在PS中,图层的创建方法有很多种,包括在"图 ...

  4. soapui工具_Java 开发者不容错过的 12 种高效工具

    摘要:Java 程序员常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松.目前,市面上涌现出越来越多的高效编程工具.所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用.正在 ...

  5. ML - 贷款用户逾期情况分析5 - 特征工程2(特征选择)

    文章目录 特征选择 (判定贷款用户是否逾期) 1. IV值进行特征选择 1.1 基本介绍 1.2 计算公式 2. 随机森林进行特征选择 2.1 平均不纯度减少 mean decrease impuri ...

  6. 机器学习特征工程之特征选择

                                                                 前言 本文总结了特征选择的常用方法,并附上Python实现代码,其中输入数据集 ...

  7. 竞赛专题(四)特征工程-竞赛中的必杀技

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 为了帮助更多竞赛选手入门进阶比赛,通过数据竞赛提升理论实践能力和团队协作能力.Data ...

  8. 特征工程系列:特征筛选的原理与实现(下)

    0x00 前言 我们在<特征工程系列:特征筛选的原理与实现(上)>中介绍了特征选择的分类,并详细介绍了过滤式特征筛选的原理与实现.本篇继续介绍封装式和嵌入式特征筛选的原理与实现. 0x01 ...

  9. 特征工程完全手册 - 从预处理、构造、选择、降维、不平衡处理

    "数据科学竞赛到底比的是什么?"这个问题,问10个大神,大概会有9个人告诉你"特征工程+模型融合".但是翻遍整个知乎,讲模型的挺多,讲特征工程的就屈指可数了.于 ...

最新文章

  1. zabbix企业应用之监控oracle
  2. 三角数字(某年南理工研究生入学上机试题)
  3. 【蓝桥杯Java_C组·从零开始卷】第四节、一维数组与二维数组
  4. 函数的返回值-接收返回元组函数的方式
  5. 03-JavaScript
  6. 天池-新闻推荐-多路召回
  7. 7-104 6翻了 (15 分)
  8. 内蒙古全国计算机考试注意事项,2018年3月内蒙古自治区呼和浩特计算机等级考试注意事项...
  9. Python学习-第三天-面向对象编程基础
  10. imei模拟修改_教你如何修改任意安卓模拟器的机型IMEI手机号等信息 海马玩 Windroye等适用...
  11. 【参赛日记】参加天池大数据竞赛
  12. 网页表格线框html,网页设计表格单元格线条及边框设置
  13. Web前端鼠标变小手CSS和JS(Vue)两种实现
  14. HTML5 video autoplay=autoplay 无法自动播放的问题
  15. 卡位亚洲新门户,华为云泰国开服
  16. 还是畅通工程 C语言
  17. 小米关于区块链的发展历程
  18. 数字电子技术实验作业(9)
  19. python 自动登录百度账号 by Dopamine
  20. 【GoCN酷Go推荐】快且灵活的JSON解析器-Jsoniter

热门文章

  1. 【JUnit 报错】 method initializationerror not found:JUnit4单元测试报错问题
  2. 数据分页 THINKPHP3.2 分页 三种分页方法
  3. [转]linux(centos)搭建SVN服务器
  4. Linux 学习笔记之超详细基础linux命令 Part 3
  5. Python的map、filter、reduce函数
  6. XP下如何恢复Administrator
  7. 使用System.Transactions
  8. ASP.NET中实现页面间的参数传递 QueryString\Application\Session\Cookie
  9. 第一次投稿怎么选杂志?
  10. HTML+CSS+JavaScript复习笔记持更(六)——CSS3常用属性之文本