全文共5462字,预计学习时长11分钟
图片来源:https://unsplash.com/@seefromthesky
数据科学是研究算法的学问。本文将会介绍一些处理数据时最常用的特征选择技术。
我们经常遇到这样的情况:在创建了大量特征后,又需要减少数量,最后再使用相关性或者基于树的方法来找出其中的重要特征。那么,如何让这些方法变得更有结构呢?
为何要进行特征选择?
在文章开始之前,先来回答这个问题:为什么不将所有的特征都交给机器学习算法,让它来决定哪些特征比较重要呢?
以下便是不能的三个原因:
1. 维数的诅咒——过拟合
维数的诅咒:随着特征空间维数的增加,配置数量将会以指数级增长,因此观测量会下降
如果数据中的列数多于行数,就能完美匹配训练数据,但这却并不适用于新样本。因此这样什么也没学到。
2. 奥卡姆剃刀原理
模型应当简单易懂。如果特征太多,就失去了可解释性。
3. 无用输入和输出
很多时候会出现像名称或ID变量等非信息特征。劣质输入也会产生劣质输出。
此外,大量特征会使模型量大、耗时,更难落实生产。
那应该怎么做?
答案是:只选择有用特征。
幸运的是,Scikit-learn能便捷简单地选择特征。特性选择有很多种方法,但是大多可以分为三类:
• 过滤:列入一些筛选特征的标准,如相关性/卡方分布。
• 包装:包装法将特征选择看作是搜索问题。如回归特征消除。
• 嵌入:嵌入法使用内置了特征选择方法的算法。比如,Lasso和RF都有各自的特征选择方法。
理论已经讲够了,接下来开始说五个特征选择的方法。
本文将使用数据集来方便理解——用一个足球运动员的数据集来找到成为优秀足球运动员的秘诀。
如果不理解足球术语也没关系,术语并不多。
Kaggle Kernel代码:https://www.kaggle.com/mlwhiz/feature-selection-using-footba