一、oob(Out - of - Bag)

  • 定义:放回取样导致一部分样本很有可能没有取到,这部分样本平均大约有 37% ,把这部分没有取到的样本称为 oob 数据集
  • 根据这种情况,不对数据集进行 train_test_split,也就是不适用 测试数据集,而使用这部分没有取到的样本做测试 / 验证;

 2)oob_score 参数

  • Bagging 取样方式的集成学习算法,可以不对数据集进行 train_test_split ,而是使用 oob 数据集作为验证数据集;
  • oob_score 是 Bagging 取样方式的集成学习算法  BaggingClassifier() 的一个参数:
  1. oob_score = True:表示使用 oob 数据集作为验证数据集;
  2. oob_score 默认为 False,不使用 oob 数据集作为验证数据集;
  3. 可以直接使用 oob_score_ 变量,查看模型在 oob 数据集上的准确率;

 3)并行化处理

  • Bagging 取样方式,使得计算机极易进行并行化处理;

  • 原因:对于每一个子模型都是独立的随机抽取训练数据集,而且每个子模型的训练也都是独立的,所有系统可以对所有的子模型并行处理;
  • 在机器学习中,对于所有可以并行处理的算法,都需要对参数 n_jobs 进行确认:
  1. n_jobs = n:程序就会使用服务器的 n 个核,同时进行处理;
  2. n_jobs = -1:使用电脑所有的核;

二、子模型产生差异化的方式

 1)对样本进行随机取样

 2)对特征进行随机取样(Random Subspaces)

  • 也就是 n 维的数据集,每次只取 k 维作为样本的特征,形成一个新的数据集;新的数据集的特征空间是原始数据集的特征空间的子空间;(k < n)

 3)即针对样本数量,又针对特征进行随机取样(Random Patches)

  • 相当于即随机抽取矩阵每行的数据,又随机抽取矩阵每列的数据,如下图:
  • 一般在图像识别领域,采用特征取样的方式;

三、scikit-learn 中使用特征取样方式

  • 在 scikit-learn 的集成学习算法 BaggingClassifier 中封装了变量,来使用不同的取样方式:
  • 模拟数据集

    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn import datasets X, y = datasets.make_moons(n_samples=500, noise=0.3, random_state=42)
  • 使用 oob

  • bootstrap = True:使用 Bagging 取样方式按样本取样
  • from sklearn.tree import DecisionTreeClassifier
    from sklearn.ensemble import BaggingClassifier bagging_clf = BaggingClassifier(DecisionTreeClassifier(),
    n_estimators=500, max_samples=100,
    bootstrap=True, oob_score=True)
    bagging_clf.fit(X, y)
    bagging_clf.oob_score_
    # 准确率:0.916
  • 设置并行处理:n_jobs

    %%time
    bagging_clf2 = BaggingClassifier(DecisionTreeClassifier(),
    n_estimators=500, max_samples=100,
    bootstrap=True, oob_score=True,
    n_jobs=-1)
    bagging_clf2.fit(X, y)
    # Wall time:2.26 s
  • Random Patches 方式:即针对样本数量,又针对特征进行取样;

  • BaggingClassifier() 的参数:

  1. bootstrap = True:表示采用放回的方式对样本进行取样;
  2. max_samples=100表示每次取 100 个样本;
  3. bootstrap_features=True:表示采用放回取样的方式对特征进行取样;
  4. max_features=1:每次给样本取 1 个特征;
    random_subspaces_clf = BaggingClassifier(DecisionTreeClassifier(),
    n_estimators=500, max_samples=100,
    bootstrap=True, oob_score=True,
    n_jobs=-1, max_features=1, bootstrap_features=True)
    random_subspaces_clf.fit(X, y)
    random_subspaces_clf.oob_score_
    # 准确率:0.862
  • 这种使用 决策树算法集成学习得到的子模型,称为随机森林;

机器学习:集成学习(OOB 和 关于 Bagging 的更多讨论)的更多相关文章

  1. [机器学习]集成学习--bagging、boosting、stacking

    集成学习简介 集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务. 如何产生"好而不同"的个体学习器,是集成学习研究的核心. 集成学习的思路是通过 ...

  2. 机器学习——集成学习(Bagging、Boosting、Stacking)

    1 前言 集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器.弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测的分类器(errorrate < ...

  3. 机器学习--集成学习(Ensemble Learning)

    一.集成学习法 在机器学习的有监督学习算法中,我们的目标是学习出一个稳定的且在各个方面表现都较好的模型,但实际情况往往不这么理想,有时我们只能得到多个有偏好的模型(弱监督模型,在某些方面表现的比较好) ...

  4. 机器学习:集成学习:随机森林.GBDT

    集成学习(Ensemble Learning) 集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器.弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测 ...

  5. python大战机器学习——集成学习

    集成学习是通过构建并结合多个学习器来完成学习任务.其工作流程为: 1)先产生一组“个体学习器”.在分类问题中,个体学习器也称为基类分类器 2)再使用某种策略将它们结合起来. 通常使用一种或者多种已有的 ...

  6. 吴裕雄 python 机器学习——集成学习随机森林RandomForestRegressor回归模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

  7. 吴裕雄 python 机器学习——集成学习随机森林RandomForestClassifier分类模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

  8. 吴裕雄 python 机器学习——集成学习梯度提升决策树GradientBoostingRegressor回归模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

  9. 吴裕雄 python 机器学习——集成学习AdaBoost算法回归模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

随机推荐

  1. Pandas基础用法-数据处理【全】-转

    完整资料:[数据挖掘入门介绍] (https://github.com/YouChouNoBB/data-mining-introduction) # coding=utf-8 # @author: ...

  2. 单文件夹下的C程序如何编写Makefile文件

    通过学习已经学会了GCC的一些基础的命令,以及如何将C语言源代码编译成可执行文件. 我们已经知道在linux环境下编译源码时,常会有以下三个步骤: ./configure make make clea ...

  3. UVA 796 连通图求桥

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=86270#problem/C#include<iostream> #inclu ...

  4. python模块cgihttpserver启动

    cgi是web服务器运行web应用的一种机制,web服务器通过执行cgi脚本,然后将该程序的标准输出作为http响应的一部分 CGIHTTPServer是python标准模块的web服务器,它可以运行 ...

  5. C#中利用WebBrowser控件,获得HTML源码

    最近获得网页的几个老程序都不能用了. 我原来用 如下代码获得网页html 源码: <pre name="code" class="csharp"> ...

  6. MVC 控件系列

    下拉框:@Html.DropDownList("GroupId"); 文本框:@Html.TextBox("RoleCode", "", n ...

  7. c++ STL库deque和vector的例子

    头文件wuyong.h: #pragma once #include<iostream> #include<vector> #include<deque> #inc ...

  8. 20个PHP面试题及答案

    php学了那么久了,先来小试牛刀,看下这些PHP程序员面试题都会不会?初级题目1.问题:请用最简单的语言描述PHP是什么?答:PHP全称:Hypertext Preprocessor,是一种用来开发动 ...

  9. Nodejs + TypeScript

    Node.js https://nodejs.org https://nodejs.org/en/download/ win: msi mac: pkg linux: tar.xz source co ...

  10. java多线程学习二

    声明:本篇博客是本人为了自己学习保存的心得,其内容主要是从大神——五月的仓颉的博客中学习而来,在此多谢大神五月的仓颉的分享,敬礼!如有疑问请联系博主,谢谢! 本章主要记录并讲述线程在项目中常用的方法: ...