zoukankan      html  css  js  c++  java
  • 3(2).特征选择---包装法

    1. 前向搜索

      每次增量地从剩余未选中的特征选出一个加入特征集中,待达到阈值或者 n时,从所有的 F 中选出错误率最小的。过程如下:

    • 初始化特征集 F 为空。
    • 扫描 i 从 1 到 n
    • 如果第 i 个特征不在 F 中,那么特征 i 和F 放在一起作为 F_i (即 F_i=Fcup{i} )。
    • 在只使用 F_i 中特征的情况下,利用交叉验证来得到 F_i 的错误率。
    • 从上步中得到的 n 个 F_i 中选出错误率最小的 F_i ,更新 F 为 F_i 。
    • 如果 F 中的特征数达到了 n 或者预定的阈值(如果有的话),
    • 那么输出整个搜索过程中最好的 ;若没达到,则转到 2,继续扫描。

    2. 后向搜索

      既然有增量加,那么也会有增量减,后者称为后向搜索。先将 F 设置为 {1,2,...,n} ,然后每次删除一个特征,并评价,直到达到阈值或者为空,然后选择最佳的 F 。

      这两种算法都可以工作,但是计算复杂度比较大。时间复杂度为

    3. 递归特征消除法

       递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。使用feature_selection库的RFE类来选择特征的代码如下:

    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)
    

    举例:使用一个基模型来进行多轮训练,经过多轮训练后,保留指定的特征数。

    #首先导入数据到data变量中
    import pandas
    data=pandas.read_csv('路径.csv')
    
    #接着,我们使用RFE类,在estimator中,
    #把我们的基模型设置为线性回归模型LinearRegression,
    #然后在把我们要选择的特征数设置为2,
    #接着就可以使用这个rfe对象,把自变量和因变量传入fit_transform方法,
    #即可得到我们需要的特征值
    from sklearn.feature_selection import RFE
    from sklearn.linear_model import LinearRegression
    
    feature =data[['月份','季度','广告推广费','注册并投资人数']]
    
    rfe =RFE(
        estimator=LinearRegression(),
        n_features_to_select=2
    )
    sFeature = rfe.fit_transform(
        feature,
        data['销售金额']
    )
    
    #同理,我们要想知道这两个自变量的名字,
    #使用get_support方法,即可得到对应的列名
    rfe.get_support()
    

      

  • 相关阅读:
    控件与布局
    高性能mysql笔记 第一章 mysql架构
    简单排序——冒泡,选择,插入
    spring boot的默认配置
    nginx配置 负载均衡
    nginx+tomcat反向代理
    fiddler(4)安装--L
    fiddler(3)http协议-响应报文--L
    fiddler(2)http协议-请求报文--L
    Fiddler(1)简介--L
  • 原文地址:https://www.cnblogs.com/nxf-rabbit75/p/11159320.html
Copyright © 2011-2022 走看看