sklearn中的特征选择方法

2020-05-13  本文已影响0人  有机会一起种地OT

sklearn.feature_selection中提供了丰富的特征选择方法,包括单变量选择和递归的特征消除方法。

最简单的特征选择方法应该算是VarianceThreshold。该方法用来对特征值非常集中的特征进行筛除。只对方差达到给定大小的特征予以保留。但其实这种特征一般在EDA过程中就可以人工地发现,并手动删除。
其默认筛除方差为0,也就是值全部相等的特征。

单变量选择

单变量选择方法通过对各特征变量进行统计检验,衡量特征与目标变量之间的关系,根据得分选择相对好的特征。
sklearn.feature_selection.中提供的评分的标准包括

具体的选择方法包括

递归特征消除

通过一个模型拟合数据,来分配各个特征的权重。根据参数,把一部分权重低的特征剔除。如此迭代,直到最终剩下的特征数目达到要求。

scklearn中提供了两个方法实现递归的特征消除,RFE和RFECV。
都是用step参数来指定每次迭代剔除的特征数,如果step为大于1的整数,则每次去掉step个特征;如果为0到1之间的小数,表示剔除特征的比例。

两者的不同在于,RFE通过n_features_select指定最终要得到的特征数目。
而RFECV采用交叉验证方式,来寻找最优特征数目,只用参数min_features_to_select限制了最小特征数。此外多了cv参数来制定交叉验证方式,默认为5层叠交叉验证。

SelectFromModel

SelectFromModel可以直接与带有 coef_ 或 feature_importances_特征重要性属性的模型一起使用。训练模型后,可将特征重要性小于 threshold 参数给定阈值的特征剔除。
threshold 参数可以数值地指定阈值,也可以通过字符串,如“mean”, “median” 或 “0.1*mean”来确定阈值。默认threshold使用“mean”。而如果使用的模型具有 l1 范数正则项,则默认使用 1e-5为阈值。

from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression
>>> X = [[ 0.87, -1.34,  0.31 ],
...      [-2.79, -0.02, -0.85 ],
...      [-1.34, -0.48, -2.55 ],
...      [ 1.92,  1.48,  0.65 ]]
>>> y = [0, 1, 0, 1]
>>> selector = SelectFromModel(estimator=LogisticRegression()).fit(X, y)
>>> selector.estimator_.coef_
array([[-0.3252302 ,  0.83462377,  0.49750423]])
>>> selector.threshold_
0.55245...
>>> selector.get_support() #只选择第二列特征
array([False,  True, False])
>>> selector.transform(X) #将特征选择器 用于输入数据,获得特征数据集
array([[-1.34],
       [-0.02],
       [-0.48],
       [ 1.48]])
上一篇 下一篇

猜你喜欢

热点阅读