一、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. Spring-data-jpa常用方法

  2. Linux 多线程编程实例

    一.多线程 VS 多进程 和进程相比,线程有很多优势.在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护代码段和数据.而运行于一个进程中的多个线程,他们之间使用相同 ...

  3. Service Meth and SideCar

    本文转自:http://philcalcado.com/2017/08/03/pattern_service_mesh.html SideCar: SideCar就是与Application一起运行的 ...

  4. iptables基础知识详解

    iptables防火墙可以用于创建过滤(filter)与NAT规则.所有Linux发行版都能使用iptables,因此理解如何配置 iptables将会帮助你更有效地管理Linux防火墙.如果你是第一 ...

  5. adb 解说

    ADB是一个 客户端-服务器端 程序, 其中客户端是你用来操作的电脑, 服务器端是android设备. 先说安装方法, 电脑上需要安装客户端. 客户端包含在sdk里. 设备上不需要安装, 只需要在手机 ...

  6. 使用 docker 拉取镜像和创建容器-nginx

    本文主要分享通过从docker  hub上获取nginx镜像 1.首先查找nginx镜像 [root@node1 ~]# docker search nginx NAME DESCRIPTION ST ...

  7. 如何在阿里云上部署war包到tomcat服务器

    一. 准备工作:xshell和xftp 首先我们得确保,xshell能够远程连接阿里云ECS,xftp能够保证windows和linux之间的文件传输(当然也可以选择FileZilla,但xftp感觉 ...

  8. axios 拦截 , 页面跳转, token 验证(自己摸索了一天搞出来的)

    最近做项目,需要登录拦截,验证.于是使用了axios的拦截器(也是第一次使用,摸索了1天,终于搞出来了,真是太高兴啦!!!),废话不多说,直接上代码, 项目结构:vue-cli + webpack + ...

  9. ES6环境配置

    1.电脑有node环境,运行npm init 2.cnpm i -D babel-core babel-preset-es2015 babel-preset-latest 3.创建.babelrc文件 ...

  10. Django pymysql学员管理系统

    学员管理系统 项目规划阶段 项目背景 近年来老男孩教育的入学学员数量稳步快速增长,传统的excel统计管理学员信息的方式已经无法满足日渐增长的业务需求.因此公司急需一套方便易用的“学员管理系统”,来提 ...