文章目录
前言
前面的(1)、(2)、(3)篇文章,我们讲了过滤法的使用。过滤法是依据我们的阈值过滤数据,再将数据导入模型。这里我们将一个新的方法----嵌入法
嵌入法概述
嵌入法是一种让算法自己决定使用哪些特征的方法,即特征选择和模型训练同时进行。
在使用嵌入法时,我们先使用某些机器学习的算法或模型进行训练,得到各个特征的权值系数(0-1之间)。
这些权值系数往往代表了特征对模型的贡献或者说重要性。
比如决策树的feature_importance_属性。可以列出每个特征对决策树建立的贡献,我们可以基于这种贡献的评估,找出对模型建立更加有用的特征
因此相比于过滤法,嵌入法的结果会更加精确到模型的效用本身,对提高模型效果有更好的作用
由于嵌入法考虑特征对模型的重要性,一些无关的特征(需要相关性过滤的特征)和一些区分度不大的特征(需要方差过滤的特征),都会因为缺乏对模型的贡献而被删除掉
可以说嵌入法是过滤法的进阶版
嵌入法的缺点
过滤法中使用的统计量可以使用统计知识和常识来查找范围(如p值应当低于显著性水平0.05),而嵌入法中使用的权值系数却没有这样的范围可找
我们可以说,权值系数为0的特征对模型丝毫没有作用,但当大量特征都对模型有贡献且贡献不一时,我们就很难去界定一个有效的临界值。这种情况下,模型权值系数就是我们的超参数,我们或许需要学习曲线,或者根据模型本身的某些性质去判断这个超参数的最佳值究竟应该是多少。
另外,嵌入法引入了算法来挑选特征,并且每次挑选都会使用全部特征,
因此其计算速度也会和应用的算法有很大的关系。如果采用计算量很大,计算缓慢的算法,比如KNN,嵌入法本身也会非常耗时耗力。并且,在选择完毕之后,我们还是需要自己来评估模型。
SelectFromModel简述
sklearn中的嵌入法模块位于feature_selection下
from sklearn.feature_selection import SelectFromModel
SelectFromModel是一个元变换器,可以与任何再拟合后具有coef_,feature_importances_属性
或参数中可选惩罚项的评估器一起使用
比如随机森林和树模型具有feature_importances_属性。逻辑回归带有l1和l2惩罚项,线性支持向量机也有l2惩罚项
对于有feature_importances_的模型来说,如果重要性低于提供的阈值,则认为这些特征不重要,并且被移除。feature_importances_的取值再0-1之间,如果设置的阈值很小,比如0.0001就可以删除那些对模型基本没有贡献的特征。如果设置的阈值比较大,就会删除掉很多有用的特征
SelectFromModel重要参数
- estimator:使用的模型评估器,只要是有coef_,feature_importances_属性和l1, l2惩罚项的模型都可以,一定是实例化后的模型对象
- threshold:特征重要性的阈值,低于这个值都会被删除
- max_features:再阈值设定下,要选择的最大特征数,要禁用阈值,并且仅根据max_features来选择,则需要设置threshold=-np.inf
示例
这里使用的还是kaggle的digit-recognizer数据集,原数据下载地址,