【机器学习】集成学习(Bagging)——随机森林(RandomForest)(理论+图解+公式推导)

简介: 【机器学习】集成学习(Bagging)——随机森林(RandomForest)(理论+图解+公式推导)

2021人工智能领域新星创作者,带你从入门到精通,该博客每天更新,逐渐完善机器学习各个知识体系的文章,帮助大家更高效学习。


一、引言

集成学习方式大致分为两种,一种是Boosting架构,采用模型之间串行的方式,典型算法代表为AdaBoost、GBDT等,第二种为Bagging,它是采用模型独立并行的架构,典型算法代表随机森林。

我们集成模型是为了提高模型的泛化能力,希望每个学习器能够有各自的特点,而且不同的学习器之间尽可能地独立,但是我们的数据只有一份,所以想要每个算法不想关是很难办到的,我们希望能够从原始数据集衍生n个数据集共给不同的基学习器进行学习,这样不但可以降低模型之间的独立性而且还能够使每个基学习器尽可能不同。

这里产生n个数据集的原因是我们要使每个基学习器尽量不同,所以需要喂不同的数据进行拟合,如果我们每个基学习器都是拟合原始数据,那么每个基学习器都是大体一样的,这样集成学习就没意义了。

二、随机森林

Bagging架构最著名的算法就属随机森林了,随机森林是Bagging+决策树构成的,也就是我们每个基学习器使用cart决策树,根据上面所述,为了提高模型的泛化能力,我们要根据原始数据构造n棵不同的决策树。

1.数据抽样

为了使每棵树不同,所以我们需要构造n个数据集来给基学习器训练,那么我们就可以使用抽样的方法构造新的数据集,但是抽样分为又放回和无放回抽样,如果采用无放回抽样的化,构造的数据集虽然是独立的,但是如果数据集不够的话,会导致每个学习器训练的数据非常少,导致模型欠拟合的风险,所以随机森林采用了有放回抽样。

每个数据都有可能被重复抽到,我们又放回采样n次,这样就构成了n个不同的数据集供给每个基学习器进行训练。

这里假设每个样本被抽到的概率为 1 m \frac{1}{m}m1 ,那么没有被抽打的概率就为 1 − 1 m 1-\frac{1}{m}1m1 ,我们需要抽取m次,所以针对一个样本m次都没有被抽到的概率为 ( 1 − 1 m ) m (1-\frac{1}{m})^m(1m1)m ,当m区域无穷大时,该概率值近似为 1 e = 0.368 \frac{1}{e}=0.368e1=0.368 ,那么也就是说我们数据集中经过m次抽样大概会有 36.8 36.836.8%的数据不会被抽到,这些数据一般被称作袋外数据,针对于这个特性有时候可以使用它们作为验证集使用。

2.集成模型结果

Bagging架构是多个模型独立的,所以每个模型的输出结果无关,最终我们需要参考每棵树的结果生成最终结果。

一般针对于分类问题,每个树输出的为目标类别,此时我们可以使用投票的方式,少数服从多数的方式,类似于专家评选一样,如果出现票数相同那么就随机挑选一个。

如果是回归问题,每棵树输出的为连续值,所以此时可以使用加权平均的方式作为最终预测结果。

3.生成单棵树

针对于每棵树的训练其实是和单棵决策树差不多的,都是按照特征计算信息增益,然后选取最优特征进行区分样本,但是随机森林还改进了一个地方就是选取最优特征时,对于普通的决策树是计算所有特征的信息增益选取最大的,但是随机森林采用的是不适用所有的特征,而是从所有特征中随机选取n个特征作为特征子集,然后基于这个特征子集计算信息增益。

举个例子,一个样本集有100个特征,如果针对于普通的决策树,它会分别计算这100个特征的信息增益,然后选取最优特征,而随机森林在初期我们可以设定一个值作为特征子集的数量,比如我们设定该数值为50,那么我们建树之前,会从100个特征中随机选取50个特征作为特征子集,之后这颗树的生成都时基于这个特征子集,只需要计算这50个特征的信息增益。

随机森林增加特征随机选取是为了提高模型泛化能力,不仅从样本抽样上而且还从特征选取上,这样就会使每个学习器之间的差异度进一步提升,模型的泛化能力进一步提高。

这样也会有一定后果,每个基学习器的精度会有所下降,因为加入了属性扰动,没有考虑所有的特征,但是随着基学习器个数的增大,模型的总体误差会更低,单个学习器的降低不会大幅度降低模型的能力。

三、学习器多样性增强

针对于集成学习,我们需要每个基学习器好而不同,对于集成更关注的是不同,也就是每个基学习器都会有自己的一些特性,这样模型的泛化能力才会高,对于未知的数据集拟合的才会更好,下面给出几种方式增加学习器的多样性。

1.数据样本扰动

所谓的数据样本扰动就是我们要给每个基学习器训练不同的数据集,对于随机森林来说,采用的是通过采样的方式来构造不同的样本子集,像AdaBoost采用的就是通过改变样本权重的方式生成不同的样本集。

但是有些模型使用数据扰动不太管用,你比如说SVM、线性模型等,这些模型一般是不会随着数据的变动发生较大的变化的,这些一般称为稳定学习器,像决策树这种模型,如果样本稍加变化就会导致模型大幅度变化,这种称为不稳定学习器,对于不稳定学习器使用数据样本扰动很管用,如果是稳定学习器,那么就需要使用特征扰动。

2.特征属性扰动

特征扰动就是我们在构造模型时只是使用一部分特征,这样每个基学习器就会学习到不同的特征集,那么生成的模型自然不同,这种方法对于哪些稳定学习器较为管用。

比如本篇文章讲的随机森林,在构建每棵树时,采用随机采集特征子集的方式进行建模,一方面这样不但可以使获得不同的学习器,而且还因为特征数的减少,模型的训练效率大大提高,尽管这样可能造成一定精度损失。

3.模型参数扰动

一般的模型中都会有参数的设置,将不同的学习器初始参数设置的不一样,一般情况下也会获得不同的模型,你比如说,随机森林中每个树我设定每棵树的最大深度不同,或者分割最小样本数,修改每个基学习器模型的参数也会导致获得不同的基学习器。


目录
相关文章
|
1月前
|
测试技术
软件质量保护与测试(第2版)学习总结第十三章 集成测试
本文是《软件质量保护与测试》(第2版)第十三章的学习总结,介绍了集成测试的概念、主要任务、测试层次与原则,以及集成测试的不同策略,包括非渐增式集成和渐增式集成(自顶向下和自底向上),并通过图示详细解释了集成测试的过程。
61 1
软件质量保护与测试(第2版)学习总结第十三章 集成测试
|
1月前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
108 1
|
1月前
|
Java Spring
springboot 学习十一:Spring Boot 优雅的集成 Lombok
这篇文章是关于如何在Spring Boot项目中集成Lombok,以简化JavaBean的编写,避免冗余代码,并提供了相关的配置步骤和常用注解的介绍。
103 0
|
1月前
|
机器学习/深度学习 算法 前端开发
集成学习任务七和八、投票法与bagging学习
集成学习任务七和八、投票法与bagging学习
18 0
|
1月前
|
机器学习/深度学习 算法
【机器学习】迅速了解什么是集成学习
【机器学习】迅速了解什么是集成学习
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
【机器学习】机器学习、深度学习、强化学习和迁移学习简介、相互对比、区别与联系。
机器学习、深度学习、强化学习和迁移学习都是人工智能领域的子领域,它们之间有一定的联系和区别。下面分别对这四个概念进行解析,并给出相互对比、区别与联系以及应用场景案例分析。
92 1
|
3月前
|
机器学习/深度学习 开发者 Python
Python 与 R 在机器学习入门中的学习曲线差异
【8月更文第6天】在机器学习领域,Python 和 R 是两种非常流行的编程语言。Python 以其简洁的语法和广泛的社区支持著称,而 R 则以其强大的统计功能和数据分析能力受到青睐。本文将探讨这两种语言在机器学习入门阶段的学习曲线差异,并通过构建一个简单的线性回归模型来比较它们的体验。
67 7
|
3月前
|
机器学习/深度学习
【机器学习】准确率、精确率、召回率、误报率、漏报率概念及公式
机器学习评估指标中的准确率、精确率、召回率、误报率和漏报率等概念,并给出了这些指标的计算公式。
654 0
|
3月前
|
机器学习/深度学习 算法
【机器学习】简单解释贝叶斯公式和朴素贝叶斯分类?(面试回答)
简要解释了贝叶斯公式及其在朴素贝叶斯分类算法中的应用,包括算法的基本原理和步骤。
78 1
|
3月前
|
机器学习/深度学习 算法 数据挖掘
【机器学习】聚类算法中的距离度量有哪些及公式表示?
聚类算法中常用的距离度量方法及其数学表达式,包括欧式距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、余弦相似度等多种距离和相似度计算方式。
304 1

热门文章

最新文章

下一篇
无影云桌面