写在前面

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.优化方向点

BaggingClassifier的更多相关文章

  1. sklearn 组合分类器

    组合分类器: 组合分类器有4种方法: (1)通过处理训练数据集.如baging  boosting (2)通过处理输入特征.如 Random forest (3)通过处理类标号.error_corre ...

  2. python中的几种集成分类器

    from sklearn import ensemble 集成分类器(ensemble): 1.bagging(ensemble.bagging.BaggingClassifier) 对随机选取的子样 ...

  3. 【机器学习笔记之六】Bagging 简述

    本文结构: 基本流程 有放回抽样的好处 Bagging 特点 sklearn 中 Bagging 使用 Bagging 和 Boosting 的区别 bagging:bootstrap aggrega ...

  4. XGBoost、LightGBM的详细对比介绍

    sklearn集成方法 集成方法的目的是结合一些基于某些算法训练得到的基学习器来改进其泛化能力和鲁棒性(相对单个的基学习器而言)主流的两种做法分别是: bagging 基本思想 独立的训练一些基学习器 ...

  5. kaggle入门项目:Titanic存亡预测(四)模型拟合

    原kaggle比赛地址:https://www.kaggle.com/c/titanic 原kernel地址:A Data Science Framework: To Achieve 99% Accu ...

  6. 第七章——集成学习和随机森林(Ensemble Learning and Random Forests)

    俗话说,三个臭皮匠顶个诸葛亮.类似的,如果集成一系列分类器的预测结果,也将会得到由于单个预测期的预测结果.一组预测期称为一个集合(ensemble),因此这一技术被称为集成学习(Ensemble Le ...

  7. 壁虎书7 Ensemble Learning and Random Forests

    if you aggregate the predictions of a group of predictors,you will often get better predictions than ...

  8. Notes : <Hands-on ML with Sklearn & TF> Chapter 7

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  9. Scikit-learn使用总结

    在机器学习和数据挖掘的应用中,scikit-learn是一个功能强大的python包.在数据量不是过大的情况下,可以解决大部分问题.学习使用scikit-learn的过程中,我自己也在补充着机器学习和 ...

随机推荐

  1. stm32 触摸屏 XPT2046

    引脚功能描述 控制字的控制位命令 控制字节各位描述 单端模式输入配置 差分模式输入配置 时序 前8个时钟用来通过DIN引脚输入控制字节,接着的12个时钟周期将完成真正的模数转换,剩下的3个多时钟周期将 ...

  2. 极度舒适的 Python 入门教程,小猪佩奇也能学会~

    编程几乎已经成为现代人的一门必修课,特别是 Python ,不仅长期霸占编程趋势榜.薪资榜第一,还屡屡进入小学教材,甚至成为浙江省信息技术高考项目-- 今天,小编带来了一门极度舒适的 Python 入 ...

  3. TLS1.3 握手过程特性的整理

    1.密码协商 TLS协议中,密码协商的过程中Client在ClientHello中提供四种option 第一:client 支持的加密套件列表,密码套件里面中能出现Client支持的AEAD算法或者H ...

  4. Windows Server 2008更改SID

    参考:Windows Server 2012 克隆修改SID 前言 克隆(软克隆,硬克隆)虚拟机后,虚拟机不光名称一样,IP一样(设置静态IP情况下),连SID也一样 什么是SID SID 安全标识符 ...

  5. 商汤开源的mmdetection技术报告

    目录 1. 简介 2. 支持的算法 3. 框架与架构 6. 相关链接 前言:让我惊艳的几个库: ultralytics的yolov3,在一众yolov3的pytorch版本实现算法中脱颖而出,收到开发 ...

  6. 【搜索/tarjan找环】zznu-简单环路

    简单环路 题目描述 有一个N x M 大小的地图,地图中的每个单元包含一个大写字母. 若两个相邻的(这里的相邻指“上下左右”相邻)点上的字母相同,我们可以用线段连接这两个点. 若存在一个包含同一字母的 ...

  7. puppeteer报错 UnhandledPromiseRejectionWarning: Error: Protocol error (Page.getLayoutMetrics): Target closed.

    puppeteer运行时报错: UnhandledPromiseRejectionWarning: Error: Protocol error (Page.getLayoutMetrics): Tar ...

  8. Git报错:Permission denied (publickey)

    Git在克隆的时候报错.Permission denied (publickey). 报错 Permission denied (publickey) 具体如下: 原因:没有将自己的电脑的SSH ke ...

  9. 遇见zTree和chrome的俩坑

    今天后台系统发现一bug,就是前几天用zTree做的树形结构,今下午突然不好使了,然后就查问题.我自己电脑装的是chrome浏览器,后台debug一看传的json数据,没毛病,想当然的断定不是数据的问 ...

  10. 多任务5-协程(IO密集型适用)--gevent完成多任务及monkey补丁

    代码: import gevent def f1(n): for i in range(n): print(gevent.getcurrent(),i) gevent.sleep(1) def f2( ...