介绍

数据工程项目往往严格遵循着riro (rubbish in, rubbish out) 的原则,所以我们经常说数据预处理是数据工程师或者数据科学家80%的工作,它保证了数据原材料的质量。而特征工程又至少占据了数据预处理的半壁江山,在实际的数据工程工作中,无论是出于解释数据或是防止过拟合的目的,特征选择都是很常见的工作。如何从成百上千个特征中发现其中哪些对结果最具影响,进而利用它们构建可靠的机器学习算法是特征选择工作的中心内容。在多次反复的工作后,结合书本,kaggle等线上资源以及与其他数据工程师的讨论,我决定写一篇简明的总结梳理特征选择工作的常见方法以及python实现。

总的来说,特征选择可以走两条路:特征过滤(Filter methods): 不需要结合特定的算法,简单快速,常用于预处理

包装筛选(Wrapper methods): 将特征选择包装在某个算法内,常用于学习阶段

在scikit-learn环境中,特征选择拥有独立的包sklearn.feature_selection, 包含了在预处理和学习阶段不同层级的特征选择算法。

A. 特征过滤(Filter methods)

(1) 方差阈(Variance Treshhold)

最为简单的特征选择方式之一,去除掉所有方差小于设定值的特征。

在sklearn中实现:

from sklearn.feature_selection import VarianceThresholdVarianceThreshold is a simple baseline approach to feature selection. It removes all features whose variance doesn’t meet some threshold. By default, it removes all zero-variance features, i.e. features that have the same value in all samples.

(2) 单变量特征选择 (Univariate feature selection)

基于单变量假设检验的特征选择,比如卡方检验(这里有一篇很好的博文用于回顾)是检测两变量是否相关的常用手段,那么就可以很自然的利用chi-square值来做降维,保留相关程度大的变量。Univariate feature selection works by selecting the best features based on univariate statistical tests. It can be seen as a preprocessing step to an estimator.

X_new = SelectKBest(chi2, k=2).fit_transform(X, y)

B. 包装筛选(Wrapper methods)

包装筛选往往利用一些在训练过程中可以计算各个特征对应权重的算法来达到选择特征的目的。在sklearn中有一个专门的模块 SelectFromModel 来帮助我们实现这个过程。SelectFromModel is a meta-transformer that can be used along with any estimator that has a coef_ or feature_importances_ attribute after fitting. The features are considered unimportant and removed, if the corresponding coef_ or feature_importances_ values are below the provided threshold parameter. Apart from specifying the threshold numerically, there are build-in heuristics for finding a threshold using a string argument. Available heuristics are “mean”, “median” and float multiples of these like “0.1*mean”.

(1)利用Lasso进行特征选择

在介绍利用Lasso进行特征选择之前,简要介绍一下什么是Lasso:

对于一个线性回归问题

基本的任务是估计参数,使得

最小,这就是经典的 Ordinary Linear Square (OLS) 问题。

但在实际的工作中,仅仅使用OLS进行回归计算很容易造成过拟合,噪声得到了过分的关注,训练数据的微小差异可能带来巨大的模型差异(主要是样本的共线性容易使矩阵成为对扰动敏感的病态阵,从而造成回归系数解析解的不稳定,要更详细的探究可以参考这里)。

为了矫正过拟合,我们常使用带有正则项的cost function,其中使用L1正则的表达式则为Lasso方法:

Lasso方法下解出的参数常常具有稀疏的特征,即很多特征对应的参数会为零,这就使得特征选择成为可能:我们可以训练一个Lasso模型,然后将系数为零的特征去除。

在实际的工作中,Lasso的参数lambda越大,参数的解越稀疏,选出的特征越少。那么如何确定使用多大的lambda?一个比较稳妥地方案是对于一系列lambda,用交叉验证计算模型的rmse,然后选择rmse的极小值点 (Kaggle上有一个很好的例子)。Linear models penalized with the L1 norm have sparse solutions: many of their estimated coefficients are zero. When the goal is to reduce the dimensionality of the data to use with another classifier, they can be used along with feature_selection.SelectFromModel to select the non-zero coefficients. With Lasso, the higher the alpha parameter, the fewer features selected.

在sk-learn中的实现参看这里。

(2)基于决策树的特征选择

利用决策树中深度较浅的节点对应的特征提供信息较多(可以直观的理解为这个特征将更多的样本区分开)这一特性,许多基于决策树的算法,如随机森林也可以在结果中直接给出feature_importances属性。其主要思想是训练一系列不同的决策树模型,在每一棵树中使用特征集的某一个随机的子集(使用bootstrap等方法抽样),最后统计每个特征出现的次数,深度,分离的样本量以及模型的准确率等给出特征的权重值。设定一个阈值,我们便可以使用这类基于决策树的算法进行特征选择。Tree-based estimators (see the sklearn.tree module and forest of trees in the sklearn.ensemble module) can be used to compute feature importances, which in turn can be used to discard irrelevant features (when coupled with the sklearn.feature_selection.SelectFromModel meta-transformer).

在sk-learn中的实现参看这里。

小结

这篇短文简明的介绍了部分常用的特征处理方法,应该提出的是,除了feature selection,feature transformation,包括PCA等降维方法也可以达到减少特征数量,抑制过拟合的目的。

其他参考资料:

lasso特征选择python_[机器学习] 特征选择简明指南相关推荐

  1. 关于机器学习特征选择的方法总结

    机器学习特征选择的方法总结 1.特征选择的重要性 随着深度学习的发展, 大大缩减了特征提取和设计的任务. 不过, 特征工程依然是各种机器学习应用领域的重要组成部分.其中对于特征选择(排序)的研究对于数 ...

  2. python分类预测降低准确率_十分钟掌握python机器学习特征选择

    十分钟掌握python机器学习特征选择-1.jpg (33.2 KB, 下载次数: 0) 2018-6-26 23:01 上传 在机器学习中,特征选择是实践中的一步, 帮你在所有特征中选择对结果贡献最 ...

  3. 机器学习 特征选择篇——python实现MIC(最大信息系数)计算

    机器学习 特征选择篇--python实现MIC(最大信息系数)计算 摘要 python实现代码 计算实例 摘要 MIC(最大信息系数) 可以检测变量之间的非线性相关性,常用于特征工程中的特征选择,即通 ...

  4. 特征选择对于机器学习重要性

    1.7特征选择 特征选择对机器学习至关重要,个人认为在大部分机器学习任务中特征就决定了效果的上限,模型的选择与组合只是无限逼近于这个上限. 特征选择的主要作用包括:减少特征数量会防止维度灾难,减少训练 ...

  5. 互信息特征选择python_基于互信息的特征选择方法杂谈

    我们现在处于一个数据驱动的时代,但并不是所有的数据都是有意义的.只有有效的数据才能 带给我们"信息",无效的数据并不能带给我们"信息". 如果我们在做一件事情之 ...

  6. 实现机器学习的循序渐进指南IX ——树回归

    目录 介绍 回归模型 特征选择 回归树的生成 回归 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 在现实世界中,一些关系不是线性的.因此,应用线性回归分析这些 ...

  7. 实现机器学习的循序渐进指南II——决策树

    目录 介绍 决策树模型 特征选择 决策树的生成 分类 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 决策原则并不复杂.从根节点开始,将节点中存储的特征值与测试 ...

  8. Python_机器学习_算法_第4章_4.决策树算法

    Python_机器学习_算法_第4章_4.决策树算法 文章目录 Python_机器学习_算法_第4章_4.决策树算法 决策树算法 学习目标 4.1 决策树算法简介 学习目标 小结 4.2 决策树分类原 ...

  9. Python_机器学习_算法_第1章_K-近邻算法

    Python_机器学习_算法_第1章_K-近邻算法 文章目录 Python_机器学习_算法_第1章_K-近邻算法 K-近邻算法 学习目标 1.1 K-近邻算法简介 学习目标 1 什么是K-近邻算法 1 ...

最新文章

  1. 图片垂直居中的使用技巧
  2. Linux修改主机名的两种方法
  3. 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第6章-基于间歇控制的非线性多智能体系统的多一致
  4. 1 操作系统第一章 操作系统概念、功能、四大特征、操作系统发展与分类
  5. 偶然发现的Unity3d,两点之间的距离计算。
  6. Java中split方法对结尾空字符串不正确处理的解决方案
  7. Atitit.软件开发概念(11)--网络子系统--url编码 空格问题URLEncoder java js php
  8. gimp中文版教程_GIMP中文教程.pdf
  9. jpg/png格式的图片转换成eps格式
  10. 计算机查重公式编辑器,知网查重文字公式编辑器吗
  11. 第四方支付崛起,聚合支付为什么这么火?
  12. 面试之NGFW 性能测试
  13. 检查xml写的格式是否正确的方法
  14. Android/Java中okhttp用法介绍
  15. php在线加密源代码,2019最新PHP在线云加密平台源码
  16. 代码随想录Day01:数组理论基础、二分查找、移除元素
  17. CTFSHOW 套娃shell
  18. 低学历转行3D建模有前途吗,游戏3D建模怎么样?
  19. 重庆公需科目快速看视频方法自动学习 python
  20. 基于javaweb+jsp的工作日志管理系统(JavaWeb MySQL JSP Bootstrap Servlet SSM SpringBoot)

热门文章

  1. 学了又忘?通俗易懂 Android视图系统的设计与实现!
  2. 面对金九银十你真的准备好了吗?
  3. 见事-----人生三境界,您到了哪一个?
  4. linux curl命令读取页面信息,使用Curl命令获取网站Web服务器类
  5. dtoj#4360. 魔法卡片(magic)
  6. 联想服务器万全T260G3系统,联想 万全T260 G3服务器 新品发布
  7. 中国电子信息产业发展研究院院长张立:打造我国主导的开源价值链
  8. Windows命令提示符大全
  9. 【云原生之Docker实战】使用Docker部署Fiora在线聊天室平台
  10. 主机租用商详解服务器集群技术特点