一、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. Docker 配置代理

    最近在k8s上部署helm 老提示无法下载镜像,因为伟大的祖国的长城Firewall....导致k8s根本玩不了..... 第一步:配置系统代理 # vim .bashrc export http_p ...

  2. ResourceBundle和properties 读取配置文件区别

    java.util.ResourceBundle 和java.util.properties 读取配置文件区别 这两个类都是读取properties格式的文件的,而Properties同时还能用来写文 ...

  3. SecureCRT按退格键出现^H问题

    1.  选择选项>>会话选项>>终端>>映射键

  4. Kafka+SparkStreaming+Zookeeper(ZK存储Offset,解决checkpoint问题)

    创建一个topic ./kafka-topics.sh --create --zookeeper 192.168.1.244:2181,192.168.1.245:2181,192.168.1.246 ...

  5. PowerDesigner生成数据库表和逆向生成表结构(MySQL数据库)

    一.Download Connector/ODBC下载ODBC驱动,地址:https://dev.mysql.com/downloads/connector/odbc/, 需要注意:PowerDesi ...

  6. Valid Parentheses有效括号匹配。利用栈。

    问题描述:给定一个字符串,其中只包含字符‘{’,    '}',    '[',    ']',   '(',    ')'确定如果输入字符串是有效的.括号必须以正确的顺序排列,“()”和“()[]{ ...

  7. uva11991(二分查找或map的应用)

    11991 - Easy Problem from Rujia Liu? Time limit: 1.000 seconds Easy Problem from Rujia Liu? Though R ...

  8. php操作EXCLE(通过phpExcle实现向excel写数据)

    php通过phpExcel进行写excel <?phprequire_once('/PHPExcel.php');require_once('/PHPExcel/Writer/Excel2007 ...

  9. wordpress 插件 汉化

    http://blog.wpjam.com/article/localizing-a-wordpress-plugin-using-poedit/ 翻译或者说本地化 WordPress 插件和主题可以 ...

  10. UVA - 242 Stamps and Envelope Size (完全背包+bitset)

    题意:给你一些邮票面值的集合,让你选择其中一个集合,使得“能用不超过n枚集合中的邮票凑成的面值集合S中从1开始的最大连续面值”(即mex(S)-1)最大.如果有多解,输出集合大小最小的一个:如果仍有多 ...