特征属性过多,容易造成维度灾难。选取对学习有用的特征会给模型效果带来提升。
特征选择需要考虑确保重要特征不丢失。去除无关特征和冗余特征(即特征之间存在强相关)。
- 过滤式选择(Filter)
1. 方差选择法
计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。
2. 单变量特征选择法 (Univariate feature selection)
对于分类问题(y离散),可采用:
卡方检验
经典的卡方检验是检验定性自变量对定性因变量的相关性。假设自变量有N种取值,因变量有M种取值,考虑自变量等于i且因变量等于j的样本频数的观察值与期望的差距,构建统计量:
互信息
经典的互信息也是评价定性自变量对定性因变量的相关性的,互信息计算公式如下:
对于回归问题(y连续),可采用:
皮尔森相关系数
from scipy.stats import pearsonr
最大信息系数(MIC)
互信息直接用于特征选择其实不是太方便:它不属于度量方式,也没有办法归一化,在不同数据及上的结果无法做比较;对于连续变量的计算不是很方便(X和Y都是集合,x,y都是离散的取值),通常变量需要先离散化,而互信息的结果对离散化的方式很敏感。最大信息系数克服了这两个问题。它首先寻找一种最优的离散化方式,然后把互信息取值转换成一种度量方式,取值区间在[0,1]
- 包裹式选择(Wrapper)
包裹式特征选择直接把最终将要使用的学习器性能作为特征子集的评价指标,它是为学习器选择更优性能量身定制的,其性能比过滤式好。但是时间复杂度更高。
递归特征消除法
递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。
from sklearn.feature_selection import RFE
- 嵌入式选择( Embedded)
1. 基于惩罚项的特征选择法
带L1正则的回归模型,起到特征选择的作用。因为参数曲线为方形,和Loss等高线相交更容易在坐标轴上发生。
2. 基于树的特征选择 (Tree-based feature selection)
树模型中GBDT也可用来作为基模型进行特征选择,使用feature_selection库的SelectFromModel类结合GBDT模型,来选择特征
SelectFromModel(GradientBoostingClassifier()).fit_transform(iris.data, iris.target)