【随机森林】深入浅出讲解随机森林算法

article/2025/8/21 20:05:38
  • 本文收录于《深入浅出讲解自然语言处理》专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅!
  • ​个人主页:有梦想的程序星空
  • ​个人介绍:小编是人工智能领域硕士,全栈工程师,深耕Flask后端开发、数据挖掘、NLP、Android开发、自动化等领域,有较丰富的软件系统、人工智能算法服务的研究和开发经验。
  • ​如果文章对你有帮助,欢迎关注点赞收藏订阅。

1、集成学习介绍

        常言道:“一个篱笆三个桩,一个好汉三个帮”。集成学习模型便是综合考量多个学习器的预测结果,从而做出决策。集成学习通过训练学习出多个估计器,当需要预测时通过结合器将多个估计器的结果整合起来当作最后的结果输出。

        集成学习分两种:

        (1)模型之间彼此存在依赖关系,按一定的次序搭建多个分类模型,一般后一个模型的加入都需要对现有的集成模型有一定贡献,进而不断提高更新过后的集成模型性能,并借助多个弱分类器搭建出强分类器。代表有Boosting(AdaBoost)算法

        (2)模型之间彼此不存在依赖关系,彼此独立。利用相同的训练数据同时搭建多个独立的分类模型,然后通过投票的方式,以少数服从多数的原则做出最终的分类决策。例如:Bagging(随机森林)

        集成学习的优势是提升了单个估计器的通用性与鲁棒性,比单个估计器拥有更好的预测性能。集成学习的另一个特点是能方便的进行并行化操作。 

2、Bagging算法

        Bagging 算法是一种集成学习算法,其全称为自助聚集算法(Bootstrap aggregating),顾名思义算法由 Bootstrap 与 Aggregating 两部分组成。

        算法的具体步骤为:

        假设有一个大小为 N 的训练数据集,每次从该数据集中有放回的取选出大小为 M 的子数据集,一共选 K 次,根据这 K 个子数据集,训练学习出 K 个模型。

        当要预测的时候,使用这 K 个模型进行预测,再通过取平均值或者多数分类的方式,得到最后的预测结果。

3、决策树与随机森林

        决策树算法有这几种:ID3、C4.5、CART,基于决策树的算法有:随机森林、GBDT等。

        决策树是一种利用树形结构进行决策的算法,对于样本数据根据已知条件或叫特征进行分叉,最终建立一棵树,树的叶子结节标识最终决策。新来的数据便可以根据这棵树进行判断。

        随机森林是在决策树的基础上衍生出来的。随机森林是一种通过多棵决策树进行优化决策的算法。决策树和随机森林的关系就是树和森林的关系。通过对原始训练样本的抽样,以及对特征节点的选择,我们可以得到许多棵不同的树。

4、随机森林的原理

         随机森林由Leo Breiman(2001)提出的一种分类算法,它通过自助法(bootstrap)重采样技术,从原始训练样本集N中有放回地重复随机抽取n个样本生成新的训练样本集合训练决策树,然后按以上步骤生成m棵决策树组成随机森林,新数据的分类结果按分类树投票多少形成的分数而定。其实质是对决策树算法的一种改进,将多个决策树合并在一起,每棵树的建立依赖于独立抽取的样本。

        单棵树的分类能力可能很小,但在随机产生大量的决策树后,一个测试样本可以通过每一棵树的分类结果经统计后选择最可能的分类。

        假设训练集 T 的大小为 N ,特征数目为 M ,随机森林的树的数量为 K ,随机森林算法的具体步骤如下:

重复下面步骤 K 次,即生成K棵决策树,形成随机森林:第一步:从训练集 T 中有放回抽样的方式,取样N 次形成一个新子训练集 D;第二步:随机选择 m 个特征,其中 m < M;第三步:使用新的训练集 D 和 m 个特征,学习出一个完整的决策树(一般是CART);

        随机森林的随机性主要体现在两个方面:

数据集的随机选取。
每棵树所使用特征的随机选取。

        以上两个随机性使得随机森林中的决策树都能够彼此不同,提升系统的多样性,从而提升分类性能。

5、随机森林的优缺点

  •         优点

1)实现简单,泛化能力强,可以并行实现,因为训练时树与树之间是相互独立的;
2)相比单一决策树,能学习到特征之间的相互影响,且不容易过拟合;
3)能直接特征很多的高维数据,因为在训练过程中依旧会从这些特征中随机选取部分特征用来训练;
4)相比SVM,不是很怕特征缺失,因为待选特征也是随机选取;
5)训练完成后可以给出特征重要性。当然,这个优点主要来源于决策树。因为决策树在训练过程中会计算熵或者是基尼系数,越往树的根部,特征越重要。
  •         缺点

1)在噪声过大的分类和处理回归问题时还是容易过拟合;
2)相比于单一决策树,它的随机性让我们难以对模型进行解释。

6、Python代码实现

scikit-learn实现随机森林分类:

from sklearn.ensemble import RandomForestClassifier# 随机森林分类器
clf = RandomForestClassifier(n_estimators = 100, random_state = 0)
# 拟合数据集
clf = clf.fit(X, y)

 关注微信公众号【有梦想的程序星空】,了解软件系统和人工智能算法领域的前沿知识,让我们一起学习、一起进步吧!


http://chatgpt.dhexx.cn/article/UilyV7te.shtml

相关文章

随机森林算法总结

随机森林算法 个体学习器 个体学习器又称为基学习器&#xff08;base learner&#xff09;&#xff0c;由单个的学习算法训练数据得到&#xff0c;比如“决策树算法”&#xff0c;“神经网络算法”等等。在不正式的说法下&#xff0c;基学习器&#xff0c;弱学习器&#xff0…

Android动画(帧动画、补间动画、属性动画)讲解

Android动画&#xff08;帧动画、补间动画、属性动画&#xff09;讲解 首先我们来看看啥是帧动画、补间动画、属性动画。 介绍&#xff1a; 帧动画&#xff1a;是一种常见的动画形式&#xff08;Frame By Frame&#xff09;&#xff0c;其原理是在“连续的关键帧”中分解动画动…

Android动画学习记录一(Android动画种类、补间动画和帧动画)

Android动画学习记录一&#xff08;动画种类、补间动画和帧动画&#xff09; 动画种类、补间动画和帧动画 Android动画学习记录一&#xff08;动画种类、补间动画和帧动画&#xff09;一、动画种类二、View动画2.1 补间动画补间动画公有属性平移动画&#xff08;Translate&…

Android动画分类与总结

前言 动画的使用 是 Android 开发中常用的知识可是动画的种类繁多、使用复杂&#xff0c;每当需要 采用自定义动画 实现 复杂的动画效果时&#xff0c;很多开发者就显得束手无策本文将献上一份Android动画的全面介绍攻略&#xff0c;包括动画的种类、使用、原理等&#xff0c;…

Android动画分析(ValueAnimator)

动画创建 先看入口函数&#xff1a; 参数很熟悉了&#xff0c;具体看里面做了什么&#xff0c;其实也很简单&#xff0c;创建一个实例对象&#xff0c;并将参数设置到对象中。 第一个参数暂时先不看&#xff0c;看第二个参数&#xff0c;**anim.setObjectValues(values)**重…

好看的android动画效果

这段时间看到一些比较好看的android动画效果&#xff0c;下面我就给大家一些我比较喜欢的动画效果&#xff0c;并附上源码希望对你们有用处。 1.很简单却很酷的粒子破碎效果 介绍&#xff1a; 实现思路 1.新建一个 Bean Particle&#xff0c;表示一个粒子对象&#xff1b;新…

Android 动画系列二之补间动画

1. 前言 Android三种动画中的第二种——补间动画(Tween)&#xff0c;和帧动画不同&#xff0c;帧动画 是通过连续播放图片来模拟动画效果&#xff0c;而补间动画开发者只需指定动画开始&#xff0c;以及动画结束"关键帧"&#xff0c; 而动画变化的"中间帧"…

Android动画大合集

android中的动画实现方式繁多&#xff0c;在项目中也经常用到动画&#xff0c;网上有很多人也都进行了一些总结&#xff0c;但是感觉还是零零散散&#xff0c;自己总结一下才能加深印象&#xff0c;以后有时间了&#xff0c;也可以从各个分类里进一步去补充完善。 如果喜欢看G…

Android中动画详细讲解

一、前言 Android动画经常会在切换activity、数据加载时会用到动画效果&#xff0c;以前接触的比较少&#xff0c;用的都是封装好的动画效果&#xff0c;自己写的比较少&#xff0c;今天心血来潮想写一个自己设计的动画效果&#xff0c;发现学习动画代码比较简单&#xff0c;但…

android 动画中插值器Interpolator详解

1、插值器简介–Interpolator 通俗易懂的说&#xff0c;Interpolator负责控制动画变化的速率&#xff0c;即确定了 动画效果变化的模式&#xff0c;使得基本的动画效果能够以匀速、加速、减速、抛物线速率等各种速率变化 动画是开发者给定开始和结束的“关键帧”&#xff0c;…

Android中的属性动画

1.属性动画简介 接下来我们学习Android动画中的第三种动画——属性动画(Property Animation) Animation一般动画就是我们前面学的帧动画和补间动画&#xff01;Animator则是本节要讲的属性动画&#xff01; 1.1为什么要用属性动画 补间动画功能比较单调,只有四种动画(透明度…

android 动画库

1. Spruce(安卓动画库)&#xff08;是一个轻量级的动画库&#xff0c;可以帮助排版屏幕上的动画。使用有很多不同的动画库时&#xff0c;开发人员需要确保每个视图都能够在适当的时间活动。&#xff09; 2. Litho&#xff08;是一个非常强大的框架&#xff0c;以声明的方式构建…

android动画类型有哪几种,Android动画概念大揭秘

前言 说起Android里面的动画,我可能会立马想起平移、旋转、渐变、缩放等动画效果,但是对于他们的属性就记的不太清了,知道的都是皮毛而且很容易忘记,每次需要用到的时候总要去baidu或者google,完全无法做到灵活应用,信手拈来。所以抽时间重新温故了一下动画相关的知识,把…

Android 动画分类

前言 动画的使用 是 Android 开发中常用的知识可是动画的种类繁多、使用复杂&#xff0c;每当需要 采用自定义动画 实现 复杂的动画效果时&#xff0c;很多开发者就显得束手无策本文将献上一份Android动画的全面介绍攻略&#xff0c;包括动画的种类、使用、原理等&#xff0c;能…

Android动画

这篇博客主要总结一下自己在项目中对动画的一些使用。我写博客&#xff0c;其实更多的是总结自己在工作中用到的一些知识。比如某一段时间一个知识点相关的技术用的比较多&#xff0c;那我会总结一下。其实&#xff0c;对于Android动画的总结&#xff0c;这是几个月前就应该写完…

Android动画之帧动画

在Android开发时&#xff0c;为了实现一些动态的炫酷的效果&#xff0c;我们常用到帧动画&#xff0c;View动画&#xff08;补间动画&#xff09;和属性动画&#xff0c;今天就来总结下我在使用帧动画的实现方式。 1、什么是帧动画&#xff1f; 帧动画就是顺序播放一组预先定…

【Android】动画

概念 动画实际上就是在指定的时间段内持续的修改某个属性的值&#xff0c;使得该值在指定取值范围之内平滑的过渡 android中的动画分为&#xff1a;View动画、帧动画和属性动画 帧动画 Frame动画是一系列图片按照一定的顺序展示的过程&#xff0c;它的原理是在一定的时间段内切…

STM32 LWIP SNTP实现毫秒级的时间校准

1、首先配置LWIP支持SNTP 然后在opt.h中增加一个timeout->LWIP_SNTP 防止出现类似 Assertion "sys_timeout: timeout ! NULL, pool MEMP_SYS_TIMEOUT is empty" failed at line 190 in ../Middlewares/Third_Party/LwIP/src/core/timeouts.c 这样的错误。 /*…

NTP/SNTP协议介绍和校时服务器搭建

文|Seraph 本文主要简单介绍用于校时的NTP/SNTP协议 同时&#xff0c;以windows 2008 R2为例&#xff0c;搭建NTP/SNTP服务器 NTP可参考文献RFC1305&#xff0c;SNTP可参考文献RFC1796 1. 应用场景 一般应用&#xff0c;连上公网即可通过NTP/SNTP协议进行校时&#xff0c;例如…

linux sntp 代码,C语言window(linux)平台的SNTP实现

C语言实现window(linux)平台的SNTP&#xff0c;本程序功能主要是实现电脑(或者设备)时间同步。摘录部分代码&#xff1a; unsigned char liVnMode; /* LeapSecond(2bits:0), VersionNumber(3bits: 3), Mode(3bits: Client3, Server4) */ unsigned char stratum; /* 时间层级 (0…