一,特征工程
有这么一句话在业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。根据特征使用方案,有计划地获取、处理和监控数据和特征的工作称之为特征工程,目的是最大限度地从原始数据中提取特征以供算法和模型使用。
特征工程包括特征的提取,特征的预处理,特征的选择和特征的监控等内容。
本文我们聚焦如何使用sklearn中的feature_selection库来进行特征选择。即如何从多个特征中选择出若干有效的特征。
二,特征选择概述
当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练。通常来说,从两个方面考虑来选择特征:
常见的特征选择方法有以下两种:
三,Filter过滤法
1,方差选择法
使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。
2,相关系数法
使用相关系数法,先要计算各个特征对目标值的相关系数。
用feature_selection库的SelectKBest类结合相关系数来选择特征的代码如下:
3,卡方检验
经典的卡方检验是检验定性自变量对定性因变量的相关性。假设自变量有N种取值,因变量有M种取值,考虑自变量等于i且因变量等于j的样本频数的观察值与期望的差距,构建统计量:
这个统计量的含义简而言之就是自变量对因变量的相关性。用feature_selection库的SelectKBest类结合卡方检验来选择特征的代码如下:
经典的互信息也是评价定性自变量对定性因变量的相关性的。相关系数,卡方检验,互信息法选择特征的结果常常是类似的。
四,Embedded嵌入法
使用带惩罚项的基模型,除了筛选出特征外,同时也进行了降维。使用feature_selection库的SelectFromModel类结合带L1惩罚项的逻辑回归模型,来选择特征的代码如下:
树模型中GBDT也可用来作为基模型进行特征选择,使用feature_selection库的SelectFromModel类结合GBDT模型,来选择特征的代码如下: