【机器学习】集成学习(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.模型参数扰动

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


目录
打赏
0
0
0
0
20
分享
相关文章
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
185 3
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
524 1
|
5月前
|
springboot 学习十一:Spring Boot 优雅的集成 Lombok
这篇文章是关于如何在Spring Boot项目中集成Lombok,以简化JavaBean的编写,避免冗余代码,并提供了相关的配置步骤和常用注解的介绍。
211 0
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
您是否已集成 Spring Boot 与 ActiveMQ?
您是否已集成 Spring Boot 与 ActiveMQ?
81 0
|
8月前
|
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
357 6
如何实现Springboot+camunda+mysql的集成
【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
529 4
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
481 1

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等