《从机器学习到深度学习》笔记(5)集成学习之随机森林

简介: 集成学习模型与其他有监督模型的出发点大相径庭,之前的模型都是在给定的训练集上通过构建越来越强大的算法进行数据拟合。而集成学习着重于在训练集上做文章:将训练集划分为各种子集或权重变换后用较弱的基模型拟合,然后综合若干个基模型的预测作为最终整体结果。

集成学习模型与其他有监督模型的出发点大相径庭,之前的模型都是在给定的训练集上通过构建越来越强大的算法进行数据拟合。而集成学习着重于在训练集上做文章:将训练集划分为各种子集或权重变换后用较弱的基模型拟合,然后综合若干个基模型的预测作为最终整体结果。在Scikit-Learn中实现了两种类型的集成学习算法,一种是Bagging methods,另一种是Boosting methods。

随机森林(Random Forrest)是Bagging方法的一个典型代表,由它的名称就可以联想到它是一种使用决策树作为基模型的集成学习方法。

1. 集成框架

随机森林在训练过程中对训练集进行随机抽样,分别进行训练后形成若干个小的决策树。分类问题的预测通过这些基决策树的投票完成,回归问题的预测通过对基决策树结果求平均完成,整个流程如图3-17所示。
3_17

图3-17 随机森林算法原理

随机森林基模型中的决策树一般采用有较大偏差和较小方差的“弱模型”,和普通的决策树相比具体体现在:

样本裁剪:通过随机采样每个弱模型只训练部分样本数据;
特征裁剪:每个基模型的决策树只选用数据特征中的一部分进行训练和预测;随机抽样保证了所有特征都能被部分弱模型学习到;
小树:由于特征和样本数量有限每个弱模型决策树都长不高,所以不需要像普通决策树那样在训练结束后为避免过度拟合而执行剪枝。
**2. 有放回采样(bootstrap)
**
在从整体训练集中进行随机采样划分子训练集时,随机森林通常采用所谓的有放回采样(bootstrap)手段。有放回采样是指每次抽取一个样本放入子集后将改样本仍保留在被采样空间中,使得它仍有可能被再次采样到。比如有盘水果:1个橘子,2个苹果,3个香蕉,对该盘水果进行2次有放回采样完全可能采样到2个橘子(虽然概率比较小);如果使用无放回采样则最多采样到1个橘子。

在整体样本数量足够多的情况下,通过bootstrap采样到的子集只有期望约为63.2%的无重复样本。使用这种采样有什么好处呢?

因为bootstrap能够生成出与训练样本整体不同的数据分布,这样等于扩充了训练样本空间,所以通过bootstrap采样能够训练出适应性更强的模型。

**3. Out-of-bag Estimation
**
在本书第1章中有介绍过,一般机器学习模型的评估需要通过与训练集相互独立的另一个测试集完成。而Bagging类模型在训练过程中划分不同独立数据子集的行为在侧面引入了另一个好处,就是可以使用训练数据本身进行模型准确率的评估。

这就是所谓的Out-of-bag Estimation(简称OOB),是指基模型的评估预测只采用未参与到其本身训练的数据集上。因此虽然整体上没有给出独立的测试集,但每个基模型自己使用的训练数据和预测数据是完全隔离的,如图3-18所示。
3_18

图3-18 Out-of-bag示意图

图中的实线标示基模型训练时使用的数据,虚线标示进行评估预测时基模型使用的数据。只要保证每条训练数据没有重复的被应用在单个基模型上,就可以保证评估结果的公允性。

4. RandomForestClassifier和RandomForestRegressor

在sklearn.ensemble包中提供了完整封装的随机森林模型RandomForestClassifier和RandomForestRegressor,它们的使用方式与其他模型无异。在模型参数方面,由于随机森林使用决策树作为基模型,所以在模型初始化过程中保留了所有DecitionTreeXXX模型中的决策树相关参数,此外还提供了关于抽样方式和OOB评估的配置属性,比如:

>>>from sklearn.datasets import load_iris

>>>from sklearn.ensemble import RandomForestClassifier

>>>iris = load_iris()                                                                             # 导入iris数据库

>>>clf = RandomForestClassifier(n_estimators = 20, bootstrap=True, oob_score=True)

>>>clf.fit(iris.data, iris.target)                                                             # 训练               

>>>clf.oob_score_                                                                              # 查看OOB评估结果

0.946666666667

上述代码使用了Scikit-learn的测试数据库iris作为训练数据来源,在初始化随机森林回归模型的时候配置n_estimators定义基模型的数量、配置了参数bootstrap=True使用有放回采、配置oob_score=True指定在训练后进行OOB测试,在训练后马上通过oob_score_属性获得了准确性评估。

注意:如果未在模型初始化时指定oob_score=True则不能在训练后访问oob_score_属性。

从机器学习,到深度学习

从深度学习,到强化学习

从强化学习,到深度强化学习

从优化模型,到模型的迁移学习

一本书搞定!
d01b2e3c1893d577

相关文章
|
1月前
|
机器学习/深度学习 人工智能 安全
探索AI的未来:从机器学习到深度学习
【10月更文挑战第28天】本文将带你走进AI的世界,从机器学习的基本概念到深度学习的复杂应用,我们将一起探索AI的未来。你将了解到AI如何改变我们的生活,以及它在未来可能带来的影响。无论你是AI专家还是初学者,这篇文章都将为你提供新的视角和思考。让我们一起探索AI的奥秘,看看它将如何塑造我们的未来。
77 3
|
1月前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
50 3
|
20天前
|
机器学习/深度学习 人工智能 算法
探索机器学习:从线性回归到深度学习
本文将带领读者从基础的线性回归模型开始,逐步深入到复杂的深度学习网络。我们将通过代码示例,展示如何实现这些算法,并解释其背后的数学原理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和知识。让我们一起踏上这段激动人心的旅程吧!
|
9天前
|
机器学习/深度学习 人工智能 算法
机器学习与深度学习:差异解析
机器学习与深度学习作为两大核心技术,各自拥有独特的魅力和应用价值。尽管它们紧密相连,但两者之间存在着显著的区别。本文将从定义、技术、数据需求、应用领域、模型复杂度以及计算资源等多个维度,对机器学习与深度学习进行深入对比,帮助您更好地理解它们之间的差异。
|
1月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
93 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 自然语言处理 语音技术
探索机器学习中的深度学习模型:原理与应用
探索机器学习中的深度学习模型:原理与应用
43 0
|
2月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
105 2
|
2月前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
237 1
|
2月前
|
机器学习/深度学习 自然语言处理 算法
机器学习和深度学习之间的区别
机器学习和深度学习在实际应用中各有优势和局限性。机器学习适用于一些数据量较小、问题相对简单、对模型解释性要求较高的场景;而深度学习则在处理大规模、复杂的数据和任务时表现出色,但需要更多的计算资源和数据,并且模型的解释性较差。在实际应用中,需要根据具体的问题和需求,结合两者的优势,选择合适的方法来解决问题。
94 0
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
浅谈机器学习与深度学习的区别
浅谈机器学习与深度学习的区别
74 0

热门文章

最新文章