美文网首页
sklearn里的特征工程

sklearn里的特征工程

作者: 小幸运Q | 来源:发表于2019-12-31 18:19 被阅读0次

    https://www.jianshu.com/p/b3056d10a20f
    http://www.sohu.com/a/340983395_654419


    用sklearn中的feature_selection库来进行特征选择


    Filter:

    <1> 过滤法:

    按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的 个数,选择特征。

    方差选择法(VarianceThreshold)

    去掉那些方差没有达到阈值的特征。默认情况下,删除零方差的特征,例如那些只有一个值的样本。

    from sklearn import datasets
    iris = datasets.load_iris()
    
    print(iris.data)
    # array([[5.1, 3.5, 1.4, 0.2], ...])
    
    from sklearn.feature_selection import VarianceThreshold
    
    #方差选择法,返回值为特征选择后的数据
    
    #参数threshold为方差的阈值
    
    vardata = VarianceThreshold(threshold= 3).fit_transform(iris.data)
    
    print(vardata)
    # array([[1.4],...])
    # 筛选后删除了第一二四的特征,输出了第三个特征 petal length
    
    相关系数法(SelectKBest)

    使用相关系数法,先要计算各个特征对目标值的相关系数。用feature_selection库的SelectKBest类 结合相关系数来选择特征

    • SelectBest 只保留 k 个最高分的特征;
    • SelectPercentile 只保留用户指定百分比的最高得分的特征;
    • 使用常见的单变量统计检验:假正率SelectFpr,错误发现率selectFdr,或者总体错误率SelectFwe;
    • GenericUnivariateSelect 通过结构化策略进行特征选择,通过超参数搜索估计器进行特征选择。

    举个例子,使用卡方检验选择两个最优特征:

    from sklearn.datasets import load_iris
    from sklearn.feature_selection import SelectKBest
    from sklearn.feature_selection import chi2
    iris = load_iris()
    X, y = iris.data, iris.target
    X.shape
    # (150, 4)
    
    X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
    # X_new = SelectKBest(f_classif, k=20).fit_transform(X, y) 
    
    X_new.shape
    # (150, 2)
    
    • 对于回归:
      f_regression 回归任务的标签/功能之间的F值
      mutual_info_regression 共同目标的共同信息

    • 对于分类:
      chi2 分类任务的非负特征的卡方统计
      f_classif 标签/功能之间的ANOVA F值用于分类任务
      mutual_info_classif 离散目标的相互信息

    • 其他方法:

    SelectPercentile 根据最高分数的百分位数选择功能。
    SelectFpr 根据误报率测试选择功能。
    SelectFdr 根据估计的错误发现率选择功能。
    SelectFwe 根据家庭错误率选择功能。
    GenericUnivariateSelect 具有可配置模式的单变量特征选择器。

    ?什么是卡方检测 ? -- 特征与类之间的相关性


    Wrapper:

    包装法:根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。

    • 递归消除特征法:使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。
    from sklearn.feature_selection import RFE
    from sklearn.linear_model import LogisticRegression
    
    #递归特征消除法,返回特征选择后的数据
    #参数estimator为基模型
    #参数n_features_ to_select为选择的特征个数
    RFE(estimator=LogisticRegression(), n_features_to_select= 2).fit_transform(iris.data, iris.target)[:10]
    

    Embedded嵌入法:

    嵌入法:先使用某些机器学习的算法和模型进行训练,得到各个特征的权值 系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。

    • 基于惩罚项的特征选择法

    使用带惩罚项的基模型,除了筛选出特征外,同时也进行了降维。使用L1范数的线性模型有一个稀疏解:许多估计系数都为0。当降维的目的是为了使用其他分类器,他们能和feature_selection.SelectFromModel一起使用选择非零系数。特别地,稀疏估计量对于回归中的 linear_model.Lasso、分类中的linear_model.LogisticRegression和svm.LinearSVC都很有用。

    from sklearn.svm import LinearSVC
    from sklearn.datasets import load_iris
    from sklearn.feature_selection import SelectFromModel
    iris = load_iris()
    X, y = iris.data, iris.target
    X.shape
    # (150,4)
    lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
    model = SelectFromModel(lsvc, prefit=True)
    X_new = model.transform(X)
    X_new.shape
    # (150,3)
    
    • 基于树模型的特征选择法:

    树模型中GBDT也可用来作为基模型进行特征选择,使用feature_selection库的SelectFromModel类 结合GBDT模型,来选择特征的代码如下:

    from sklearn.ensemble import ExtraTreesClassifier
    from sklearn.datasets import load_iris
    from sklearn.feature_selection import SelectFromModel
    iris = load_iris()
    X, y = iris.data, iris.target
    X.shape
    # (150,4)
    clf = ExtraTreesClassifier()
    clf = clf.fit(X, y)
    clf.feature_importances_ 
    # array([ 0.04...,  0.05...,  0.4...,  0.4...])
    model = SelectFromModel(clf, prefit=True)
    X_new = model.transform(X)
    X_new.shape
    # (150, 2)        
    

    相关文章

      网友评论

          本文标题:sklearn里的特征工程

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