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


    一、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
    • 这种使用 决策树算法集成学习得到的子模型,称为随机森林;
  • 相关阅读:
    Struts2的配置中:Could not find action or result 问题的解决方法
    Oracle 数据库 Record is locked by another user 问题解决办法
    设计模式六大原则(2):里氏替换原则
    在PL/SQL中 自动复制转换StringBuffer的SQL
    反射setAccessible()方法
    对允许任意图片上传的发布内容模式的啊哈的想法
    如果你真的想做一件事,你一定会找到一个方法;如果你不想做一件事,你一定会找到一个借口.
    xaml 的 intellisense失效的解决办法
    Blog技术词汇之Rss篇 什么是Rss以及其定义[翻译]
    多个存储过程之间相互调用的原子性问题
  • 原文地址:https://www.cnblogs.com/volcao/p/9488113.html
Copyright © 2020-2023  润新知