zoukankan      html  css  js  c++  java
  • 特征选择

    在sklearn.feature_selection模块中,可以对样本集进行特征选择(feature selection)和降维(dimensionality reduction),这样会提高估计器的准确度或者增强在高维数据集上的性能。

    1. 移除低方差特征

    VarianceThreshold是特征选择的一个基本方法,移除所有方差不满足阈值的特征。默认移除所有零方差特征,即在所有样本上取值不变的特征。

    例如:假设有一个特征是布尔值的数据集,我们要移除那些在整个数据集中特征为0或者为1的比例超过80%的特征。布尔特征是伯努利随机变量,变量方差为 Var[X] = p(1-p),因此,我们用阈值“0.8*(1-0.8)”进行选择:

    from sklearn.feature_selection import VarianceThreshold
    
    X = [[0,0,1], [0,1,0], [1,0,0], [0,1,1], [0,1,0], [0,1,1]]
    sel = VarianceThreshold(threshold=(.8*(1-.8)))
    
    print(sel.fit_transform(X))
    [[0 1]
     [1 0]
     [0 0]
     [1 1]
     [1 0]
     [1 1]]

    VarianceThreshold移除了第一列,它的值为0的概率为 p=5/6>0.8

    2. 单变量特征选择

    单变量的特征选择是通过基于单变量的统计测试来选择最好的特征。它可以当做评估期的预处理步骤。

    Scikit-learn将特征选择的内容作为实现transform方法的对象:

    • SelectKBest:移除评分最高的K个特征之外的所有特征
    • SelectPercentile:移除指定的最高得分百分比之外的所有特征
    • 对每个特征应用常见的单变量统计测试:假阳性率(false positive rate)SelectFpr,伪发现率(false discovery rate)SelectFdr,或族系误差(family wise error)SelectFwe
    • GenericUnivariateSelect:允许使用可配置方法来进行单变量特征选择。它允许超参数搜索评估器来选择最好的单变量特征。

    例如下面的实例,我们可以使用 chi^2 检验样本集来选择最好的两个特征:

    >>> 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.shape
    (150, 2)

    这些对象将得分函数作为输入,返回单变量的得分和 p 值 (或者仅仅是 SelectKBest 和 SelectPercentile 的分数):

    对于回归:f_regressionmutual_info_regression

    对于分类:chi2f_classifmutual_info_classif

    这些基于 F-test 的方法计算两个随机变量之间的线性相关程度。另一方面,mutual information methods(互信息)能够计算任何种类的统计相关性,但是作为非参数的方法,互信息需要更多的样本来进行准确的估计。

    3. 特征选择作为pipeline(管道)的一部分

    特征选择通常在机器学习之前来做预处理。具体表现如scikit-learn中的sklearn.pipeline.Pipeline

    clf = Pipeline([
      ('feature_selection', SelectFromModel(LinearSVC(penalty="l1"))),
      ('classification', RandomForestClassifier())
    ])
    clf.fit(X, y)

    在上述代码中, 首先利用sklearn.svm.LinearSVC和sklearn.feature_selection.SelectFromModel来评估特征的重要性并选择出相关的特征然后,在转换后的输出中使用sklearn.ensemble.RandomForestClassifier分类器。

     

    来自:sklearn官方文档

  • 相关阅读:
    录毛线脚本,直接手写接口最简洁的LoadRunner性能测试脚本(含jmeter脚本)
    LoadRunner回放乱码
    结构体练习(C)
    MongoDB在windows及linux环境下安装
    pycharm 快捷键
    倒置输入的整数(C、Python)
    mysql常用操作(测试必备)
    wireshark配合jmeter测试webservice接口
    子网掩码的作用
    java 获取对象的数据类型、数据类型转换
  • 原文地址:https://www.cnblogs.com/keye/p/13361633.html
Copyright © 2011-2022 走看看