zoukankan      html  css  js  c++  java
  • sklearn-特征工程之特征选择


    title: sklearn-特征工程之特征选择
    date: 2016-11-25 22:49:24
    categories: skearn
    tags: sklearn

    抄袭/参考资料


    当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练。通常来说,从两个方面考虑来选择特征:

    • 特征是否发散:如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用。
    • 特征与目标的相关性:这点比较显见,与目标相关性高的特征,应当优选选择。除方差法外,本文介绍的其他方法均从相关性考虑。

    根据特征选择的形式又可以将特征选择方法分为3种:

    • Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
    • Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。
    • Embedded:嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。

    我们使用sklearn中的feature_selection库来进行特征选择。

    Filter:过滤法

    方差选择法

    VarianceThreshold 是特征选择中的一项基本方法。它会移除所有方差不满足阈值的特征。默认设置下,它将移除所有方差为0的特征,即那些在所有样本中数值完全相同的特征。

    from sklearn.feature_selection import VarianceThreshold
    # 设置方差阈值为100
    sel = VarianceThreshold(threshold=100)
    sel.fit_transform(X)
    

    单变量特征选择

    单变量特征选择基于单变量的统计测试来选择最佳特征。它可以看作预测模型的一项预处理。Scikit-learn将特征选择程序用包含transform 函数的对象来展现:

    • SelectKBest 移除得分前 (k) 名以外的所有特征
    • SelectPercentile 移除得分在用户指定百分比以后的特征
    • 对每个特征使用通用的单变量统计测试: 假正率(false positive rate) SelectFpr, 伪发现率(false discovery rate) SelectFdr, 或族系误差率 SelectFwe.
    • GenericUnivariateSelect 可以设置不同的策略来进行单变量特征选择。同时不同的选择策略也能够使用超参数寻优,从而让我们找到最佳的单变量特征选择策略。

    这些作为打分函数输入的对象(同样位于feature_selection模块中),返回单变量的概率值:

    相关系数法

    卡方检验

    互信息法


    Wrapper:包装法

    递归特征消除法

    递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。


    Embedded:嵌入法 / 基于模型进行特征选择

    基于惩罚项的特征选择法

    class sklearn.feature_selection.SelectFromModel(estimator, 
                                                    threshold=None, 
                                                    prefit=False)
    

    使用L1范数作为惩罚项的:ref:Linear models会得到稀疏解:大部分特征对应的系数为0。当你希望减少特征的维度以用于其它分类器时,可以通过 feature_selection.SelectFromModel 来选择不为0的系数。特别指出,常用于此目的的稀疏预测模型有:

    from sklearn.feature_selection import SelectFromModel
    from sklearn.linear_model import Lasso
    
    lr = Lasso(alpha=10)
    lr.fit(X,y)
    
    #带L1惩罚项的逻辑回归作为基模型的特征选择
    model = SelectFromModel(lr, prefit=True)
    model.transform(X)
    

    基于树模型的特征选择法

    基于树的预测模型(见 sklearn.tree 模块,森林见 sklearn.ensemble 模块)能够用来计算特征的重要程度,因此能用来去除不相关的特征(结合 sklearn.feature_selection.SelectFromModel )

    from sklearn.feature_selection import SelectFromModel
    from sklearn.ensemble import GradientBoostingRegressor
    
    gbdt = GradientBoostingRegressor()
    gbdt.fit(X,y)
    
    #GBDT作为基模型的特征选择
    model = SelectFromModel(gbdt, prefit=True)
    model.transform(X)
    
  • 相关阅读:
    [iOS基础控件
    [iOS基础控件
    [iOS基础控件
    [iOS基础控件
    [iOS基础控件
    [iOS基础控件
    [iOS基础控件
    白话之jsonp跨域原理分析
    crontab定时任务
    python模块之uuid
  • 原文地址:https://www.cnblogs.com/stream886/p/10050058.html
Copyright © 2011-2022 走看看