机器学习:集成学习(OOB 和 关于 Bagging 的更多讨论)
一、oob(Out - of - Bag)
- 定义:放回取样导致一部分样本很有可能没有取到,这部分样本平均大约有 37% ,把这部分没有取到的样本称为 oob 数据集;
- 根据这种情况,不对数据集进行 train_test_split,也就是不适用 测试数据集,而使用这部分没有取到的样本做测试 / 验证;
2)oob_score 参数
- Bagging 取样方式的集成学习算法,可以不对数据集进行 train_test_split ,而是使用 oob 数据集作为验证数据集;
- oob_score 是 Bagging 取样方式的集成学习算法 BaggingClassifier() 的一个参数:
- oob_score = True:表示使用 oob 数据集作为验证数据集;
- oob_score 默认为 False,不使用 oob 数据集作为验证数据集;
- 可以直接使用 oob_score_ 变量,查看模型在 oob 数据集上的准确率;
3)并行化处理
Bagging 取样方式,使得计算机极易进行并行化处理;
- 原因:对于每一个子模型都是独立的随机抽取训练数据集,而且每个子模型的训练也都是独立的,所有系统可以对所有的子模型并行处理;
- 在机器学习中,对于所有可以并行处理的算法,都需要对参数 n_jobs 进行确认:
- n_jobs = n:程序就会使用服务器的 n 个核,同时进行处理;
- 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() 的参数:
- bootstrap = True:表示采用放回的方式对样本进行取样;
- max_samples=100:表示每次取 100 个样本;
- bootstrap_features=True:表示采用放回取样的方式对特征进行取样;
- 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 的更多讨论)的更多相关文章
- [机器学习]集成学习--bagging、boosting、stacking
集成学习简介 集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务. 如何产生"好而不同"的个体学习器,是集成学习研究的核心. 集成学习的思路是通过 ...
- 机器学习——集成学习(Bagging、Boosting、Stacking)
1 前言 集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器.弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测的分类器(errorrate < ...
- 机器学习--集成学习(Ensemble Learning)
一.集成学习法 在机器学习的有监督学习算法中,我们的目标是学习出一个稳定的且在各个方面表现都较好的模型,但实际情况往往不这么理想,有时我们只能得到多个有偏好的模型(弱监督模型,在某些方面表现的比较好) ...
- 机器学习:集成学习:随机森林.GBDT
集成学习(Ensemble Learning) 集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器.弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测 ...
- python大战机器学习——集成学习
集成学习是通过构建并结合多个学习器来完成学习任务.其工作流程为: 1)先产生一组“个体学习器”.在分类问题中,个体学习器也称为基类分类器 2)再使用某种策略将它们结合起来. 通常使用一种或者多种已有的 ...
- 吴裕雄 python 机器学习——集成学习随机森林RandomForestRegressor回归模型
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...
- 吴裕雄 python 机器学习——集成学习随机森林RandomForestClassifier分类模型
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...
- 吴裕雄 python 机器学习——集成学习梯度提升决策树GradientBoostingRegressor回归模型
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...
- 吴裕雄 python 机器学习——集成学习AdaBoost算法回归模型
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...
随机推荐
- iOS_多线程(一)
在学习多线程之前首先搞清楚以下几个问题. 并发:在同一时刻,只有一条指令被执行,多条指令进行快速切换执行. 并行:在同一时刻,多个处理器可以处理多条指令 1.什么是进程? 一个运行的程序就是 ...
- FTH: (7156): *** Fault tolerant heap shim applied to current process. This is usually due to previous crashes. ***
这两天在Qtcreator上编译程序的时候莫名其妙的出现了FTH: (7156): *** Fault tolerant heap shim applied to current process. T ...
- qq在线客服代码
http://wpa.qq.com/msgrd?v=3&uin=1456262869&site=www.cactussoft.cn&menu=yes
- 多校hdu5754(博弈)
©此题中在N×M的棋盘中从(1,1)走到(N,M)B先走G后走,谁先到(N,M)谁赢,走法分为4中分别是国际象棋中的国王,车,马,王后的发,在四种走法下谁能赢: 我们依次分析每一种棋子. ①王. 首先 ...
- 剑指Offer——链表中倒数第k个节点
Question 输入一个链表,输出该链表中倒数第k个结点. Solution 一种想法就是扫描两边,第一遍求出总的节点个数,第二遍从头开始走n-k个 第二种思想类似于fast-slow指针的方法,f ...
- linux基础(6)-shell编程
shell脚本 shell脚本程序:以文件形式存放批量的linux命令集合,该文件能够被shell释放执行.通常由一段linux命令.shell命令.控制语句以及注释语句构成. shell脚本特点: ...
- BZOJ2877 [Noi2012]魔幻棋盘
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- OpenStack日志搜集分析之ELK
ELK 安装配置简单,用于管理 OpenStack 日志时需注意两点: Logstash 配置文件的编写 Elasticsearch 日志存储空间的容量规划 另外推荐 ELKstack 中文指南. E ...
- WPF各种控件详解——(WPF从我炫系列)
http://blog.csdn.net/zx13525079024/article/details/5694638
- hdu2243 ac自动机+矩阵快速幂
和上一题有点相似,但是这题是求包含的,并且还要求和 可以求所有情况-不包含的情况,所有情况可用矩阵快速幂求得 还有一点就是如果题目说答案余2^64,直接开unsigned long long就行了,会 ...