翻译内容主要来自https://machinelearningmastery.com/an-introduction-to-feature-selection/
在构建预测模型时应该选择哪些特征??这或许是一个需要对相关领域知识有深入了解才能够解决的问题。
不过,也有一些自动化的方法能够选择出与问题最为相关的特征,这就是特征选择。
在阅读了本文之后,你将了解到不同特征选择方法,我们也为你提供了一个清单,记录了如何运用这些特征选择方法。
特征选择也被称为变量选择和属性选择,它能够自动地选择数据中目标问题最为相关的属性。
特征选择…是在模型构建时中选择相关特征子集的过程。
— 特征选择, 维基百科.
特征选择与降维不同。虽说这两种方法都是要减少数据集中的特征数量,但降维相当于对所有特征进行了重新组合,而特征选择仅仅是保留或丢弃某些特征,而不改变特征本身。
降维常见的方法有PCA,SVD,萨蒙映射等。
特征选择是一种很有用的方法,它就像一个过滤器,丢弃一些用处小的特征。
— Robert Neuhaus
特征选择方法能够帮助你构建更加准确的预测模型。运用特征选择方法,模型仅需少量的样本就可以得到较高的预测准确率,特征选择可以移除那些无关特征,构建复杂度更低、解释性更强的模型。
特征选择的目标有三个:1、提高模型的预测能力 2、构建效率更高,成本效益更高的模型。3、更好地理解数据生成的过程。
— Guyon and Elisseeff
三种常见的特征选择算法包括:filter方法, wrapper方法和embedded方法.
Filter方法
Filter特征选择方法利用统计学手段为每个特征赋予一个权重,根据权重对特征进行排序,以此选择保留或移除某些特征,这类方法有的会独立地对每个特征进行考量,有的也会考虑特征之间的相关性。主要的Filter方法有:
- 卡方检验 Chi squared test
- 信息增益 information gain
- 相关系数 correlation coefficient scores
Wrapper方法
Wrapper方法将特征子集的选择视为一个搜索问题,首先生成不同的子集,然后进行评估,并将评估结果与其他子集进行比较。一般我们会在不同的子集上构建模型,再利用模型的预测准确率来对不同的特征子集打分。搜索方法可以是随机式的,例如随机爬山法,也可以是启发式的,例如前向迭代和反向迭代。
主要的一个Wrapper方法:递归特征消除算法(recursive feature elimination algorithm)
Embedded方法
Embedded方法是在模型构建的同时选择最好的特征。最为常用的一个Embedded方法就是:正则化。
正则化方法也被称为惩罚方法,主要思想是在模型的目标函数优化的过程中,对参数引入额外的限制,使得参数不至于过大,降低模型的复杂度。
带正则化的算法包括:LASSO回归,Elastic Net回归,Ridge回归。
Weka: For a tutorial showing how to perform feature selection using Weka see “Feature Selection to Improve Accuracy and Decrease Training Time“.
Scikit-Learn: For a recipe of Recursive Feature Elimination in Python using scikit-learn, see “Feature Selection in Python with Scikit-Learn“.
R: For a recipe of Recursive Feature Elimination using the Caret R package, see “Feature Selection with the Caret R Package“
特征选择应当被视为模型选择的一部分。例如,采用交叉验证作为模型的评估方法时,模型的构建将会是一个迭代的过程,而特征选择也同样包含在这个迭代的过程中,也就是说,应当在数据划分训练集之后,再对训练集进行特征选择,然后再进行训练。在划分数据之前就进行特征选择是一种错误的做法,。
其原因是,做出特征选择的决定是基于整个训练集的,这反过来传递到模型了.这可能会导致一个模型和其他模型相比,被所选择的特征而增强影响,看起来获得更好的结果,而事实上是有偏见的结果.
Esabelle Guyon 和 Andre Elisseeff (“An Introduction to Variable and Feature Selection” 的作者)提供了一个清单, 在你下次要进行特征选择时,可以参考。
你是否有领域知识? Yes, 那就构建一个更好的特定特征
你的特征在同一量纲下? No, 那就归一化这些特征.
你是否怀疑特征独立性? Yes, 那就构建联合特征或者特征的乘积.
你需要修剪输入变量吗(考虑到成本、速度以及数据解释性)? No, 构建析取特征或者加权特征.
你需要单独评估特征吗(需要评估特征的重要性或者)? Yes, 使用一个能够对特征排序的方法;
你需要一个预测器吗? No, 停止.
你怀疑你的数据”脏”吗? Yes, 利用第5步选择得到的几个高排名的特征,检测异常值,;检查并丢弃他们.
你知道应该尝试哪种方法? No, 使用一个线性预测器. 使用前向选择方法,用probe作为停止标准; 或者在第5步之后, 使用0范数的embedded方法作为比较, 用一个不断增加的特征子集建立一系列的模型. 看看能不能用一个更小的特征子集提高性能? 如果能的话, 用那个子集尝试一个线性预测器.
你有新的想法,时间,时间资源和足够的样例吗?Yes, 比较不同的特征选择方法,可以加入新的点子,相关参数,后向选择和embedded算法. 使用线性和非线性预测器. 用模型选择评估最好的方法.
你需要一个稳定的解吗? Yes, 二次采样你的数据,并为一些”bootstrap”重做你的分析.