美文网首页
sklearn中的特征选择方法

sklearn中的特征选择方法

作者: 有机会一起种地OT | 来源:发表于2020-05-13 10:41 被阅读0次

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

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

    单变量选择

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

    • chi2——卡方
    • f_classif——方差分析,返回F值和P值
    • f_regression——特征与目标特征的相关系数,返回F值和P值
    • mutual_info_classif——用于分类问题(目标特征是离散的)的互信息
    • mutual_info_regression——用于回归问题(目标特征是连续的)的互信息

    具体的选择方法包括

    • SelectKBest——保留k个最高分的特征
    • SelectPercentile——保留得分在前指定百分位的特征
    • SelectFdr——基于假正率FPR选择p值小于给定的值的特征
    • SelectFpr——基于错误发现率选择p值小于给定的值的特征
    • SelectFwe——基于总体错误率选择p值小于给定的值的特征
    • GenericUnivariateSelect——能采用超参数搜索的方式选择最好的单变量选择策略。其mode参数可指定特征选择模式‘percentile’, ‘k_best’, ‘fpr’, ‘fdr’, ‘fwe’。
    递归特征消除

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

    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]])
    

    相关文章

      网友评论

          本文标题:sklearn中的特征选择方法

          本文链接:https://www.haomeiwen.com/subject/hzjgnhtx.html