一、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. Threalocal的使用及其原理

    虽然现在可以说很多程序员会用ThreadLocal,但是我相信大多数程序员还不知道ThreadLocal,而使用ThreadLocal的程序员大多只是知道其然而不知其所以然,因此,使用ThreadLo ...

  2. Linux下检测IP访问特定网站的ruby脚本

    root@ubuntu:~# vi check_ip.rbrequire 'rubygems' index = 1 max = 20 while (max-index) >= 0 puts in ...

  3. LCN协调者服务集群

    官方文档: https://github.com/codingapi/tx-lcn/wiki/TxManager%E9%9B%86%E7%BE%A4%E8%AF%B4%E6%98%8E 核心原理 通过 ...

  4. 基于主主复制的mysql双机热备+keepalived实现高可用性

  5. iOS APP AppIcon& LaunchImage

    AppIcon size for iPhone: 29 - Settings @1x 29*29,  58 - Settings @2x 58*58, 87 - Settings @3x 87*87 ...

  6. DH02-策略模式

    模式简介 面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类. 策略模式(Strategy)定义了算法家族,分别封装起来,让他们相互间可 ...

  7. android根据原图片的路径得到该图片的缩略图

    /** * 根据图片的路径得到该图片在表中的ID * @param cr * @param fileName * @return */ public static String getImageIdF ...

  8. LeetCode OJ:Same Tree(相同的树)

    Given two binary trees, write a function to check if they are equal or not. Two binary trees are con ...

  9. Mac 下 Mosquitto 安装和配置 (Mosquitto为开源的mqtt服务器)

    官网:http://mosquitto.org/download/ 官网的介绍简单明了 Mac 下一个命令“brew install mosquitto” 安装成功了,还学会了brew 安装目录:/u ...

  10. uva11134 - Fabled Rooks(问题分解,贪心法)

    这道题非常好,不仅用到了把复杂问题分解为若干个熟悉的简单问题的方法,更是考察了对贪心法的理解和运用是否到位. 首先,如果直接在二维的棋盘上考虑怎么放不好弄,那么注意到x和y无关(因为两个车完全可以在同 ...