zoukankan      html  css  js  c++  java
  • BaggingClassifier

     

     

    写在前面

    Ensemble methods 组合模型的方式大致为四个:/bagging / boosting / voting / stacking ,此文主要简单叙述 bagging算法。


    算法主要特点

    Bagging:

    • 平行合奏:每个模型独立构建
    • 旨在减少方差,而不是偏差
    • 适用于高方差低偏差模型(复杂模型)
    • 基于树的方法的示例是随机森林,其开发完全生长的树(注意,RF修改生长的过程以减少树之间的相关性)

    接下来进入主题

    Bagging 算法:

    WIKI百科: 
    Bagging算法 (英语:Bootstrap aggregating,引导聚集算法),又称装袋算法,是机器学习领域的一种团体学习算法。最初由Leo Breiman于1994年提出。Bagging算法可与其他分类、回归算法结合,提高其准确率、稳定性的同时,通过降低结果的方差,避免过拟合的发生。


    实现原理:

    1. 数学基础 
      这里写图片描述

    2. 图例描述 
      这里写图片描述

    3. 实现描述

      在scikit-learn中, 
      参数 max_samples 和 max_features 控制子集的大小(在样本和特征方面) 
      参数 bootstrap 和 bootstrap_features 控制是否在有或没有替换的情况下绘制样本和特征。

      • Bagging又叫自助聚集,是一种根据均匀概率分布从数据中重复抽样(有放回)的技术。
      • 每个抽样生成的自助样本集上,训练一个基分类器;对训练过的分类器进行投票,将测试样本指派到得票最高的类中。
      • 每个自助样本集都和原数据一样大
      • 有放回抽样,一些样本可能在同一训练集中出现多次,一些可能被忽略。

    实例分析:

    1. 实例环境

      sklearn + anconda + jupyter

    2. 实例步骤

      • 数据:可以采用 datasets 的数据,在此作者使用的是自己整理的股票行情
      • 训练、测试数据归一化
      • 参数寻优可以使用GridSearch,在此不作赘述

      参数描述: 
      这里写图片描述

    3. 代码实现
    import time
    import pandas as pd
    from pandas import Series,DataFrame
    from sklearn.ensemble import BaggingClassifier
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.ensemble import AdaBoostClassifier
    from sklearn.model_selection import cross_val_score
    from sklearn import preprocessing
    from sklearn import datasets
    iris = datasets.load_iris()
    X,y = iris.data[:,1:3],iris.target
    start = time.clock()  # 计时
    min_max_scaler = preprocessing.MinMaxScaler()
    
    # 读取训练数据 并数据规整化
    raw_data  = pd.read_csv('train_data.csv') 
    raw_datax = raw_data[:20000]
    X1_scaled = min_max_scaler.fit_transform(raw_datax.ix[:,3:7])
    y1 = raw_datax['Y1']
    y1 = list(y1)
    
    # 读取测试数据 并数据规整化
    raw_datat  = pd.read_csv('test_data.csv')
    raw_datatx = raw_datat[:10000]
    X1t_scaled = min_max_scaler.fit_transform(raw_datatx.ix[:,3:7])
    y1t = raw_datatx['Y1']
    y1t = list(y1t)
    
    print len(X1_scaled)
    print len(X1t_scaled)
    end = time.clock()
    print '运行时间:',end - start
    clf = DecisionTreeClassifier().fit(X1_scaled,y1)
    clfb = BaggingClassifier(base_estimator= DecisionTreeClassifier()
                             ,max_samples=0.5,max_features=0.5).fit(X1_scaled,y1)
    
    predict = clf.predict(X1t_scaled)
    predictb = clfb.predict(X1t_scaled)
    
    print clf.score(X1t_scaled,y1t)
    print clfb.score(X1t_scaled,y1t)
    
    # print Series(predict).value_counts()
    # print Series(predictb).value_counts()
    

    这里写图片描述

    方法总结

    • Bagging通过降低基分类器的方差,改善了泛化误差
    • 其性能依赖于基分类器的稳定性;如果基分类器不稳定,bagging有助于降低训练数据的随机波动导致的误差;如果稳定,则集成分类器的误差主要由基分类器的偏倚引起
    • 由于每个样本被选中的概率相同,因此bagging并不侧重于训练数据集中的任何特定实例

    1.运用注意点 
    2.优化方向点

  • 相关阅读:
    Java5 多线程实践
    ExtJS2.0实用简明教程 Border区域布局
    MySQL安装图解
    ExtJS2.0实用简明教程 组件的使用
    ExtJS2.0实用简明教程 ExtJS版的Hello
    Linux操作系统中如何安装Tomcat
    线程池的介绍及简单实现
    ExtJS2.0实用简明教程 获得ExtJS
    汽车常识全面介绍 动力系统
    MySQL 图形化管理工具介绍
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/11362723.html
Copyright © 2011-2022 走看看