随机森林算法总结

article/2025/8/21 20:05:15

随机森林算法

个体学习器

个体学习器又称为基学习器(base learner),由单个的学习算法训练数据得到,比如“决策树算法”,“神经网络算法”等等。在不正式的说法下,基学习器,弱学习器,弱分类器,个体学习器说的都是一个东西。

集成学习

常言道:“一个篱笆三个桩,一个好汉三个帮”。集成学习模型便是综合考量多个学习器的预测结果,从而做出决策。

集成学习的核心

如何产生“好而不同”的个体学习器,并准确性和多样性上做出最好的选择,正是集成学习的核心

假设现在用5个个体学习器做集成,最终结果用投票法产生,即少数服从多数。当个体学习器差异性不足的话,考虑一个极端例子,5个个体学习器都是由同一个学习器,复制而来,那么,5个学习器的预测结果和一个学习器预测结果完全相同,就达不到集成学习的目的了。因此,个体学习器应该“好而不同”,既要保证个体学习器的“准确性”,还要保证不同学习器之间的“多样性”。然而,准确性和多样性是冲突,在准确性和多样性上如何选择,才是集成学习需要解决的问题。

集成学习分类

集成学习分两种:

(1)模型之间彼此存在依赖关系,按一定的次序搭建多个分类模型,一般后一个模型的加入都需要对现有的集成模型有一定贡献,进而不断提高更新过后的集成模型性能,并借助多个弱分类器搭建出强分类器。代表有Boosting(AdaBoost)算法。该算法与第一种的随机森林主要区别在于每一颗决策树在生成的过程中都会尽可能降低模型在训练集上的拟合或训练误差

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

Boosting

Boosting是一族可将弱学习器升为强学习器算法。这类算法的工作机制类似:

(1)先从初始训练集训练出一个基学习器

(2)在根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续得到最大的关注。

(3)然后基于调整后的样本分布来训练下一个基学习器;

(3)如此重复进行,直至基学习器数目达到实现指定的值T为止。

(4 )再将这T个基学习器进行加权结合得到集成学习器。

Boosting算法的著名代表就是Adaboost算法。

因此,对于Boosting算法,存在两个问题:

  1. 在每一轮中如何调整训练集,使训练的弱分类器得以进行;(调整样本权值)
  2. 如何将各个弱分类器联合起来形成强分类器。(调整模型权值)

Bagging

Bagging基本流程:通过自助采样,采出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,在将这些基学习器进行组合。

在对预测输出进行结合的时候,Bagging通常对分类任务使用简单投票法,对回归任务进行简单的平均法。但是如果投票个数一致,则最简单的做法是随机选择一个类别,当然也可以进一步考察学习器投票的置信度来确定最终的分类。流程如下:
在这里插入图片描述

Bootstrap sampling自助采样

模型的评估方法中有留一法(将数据集划分为两个互不相交的集合,一个做测试集,一个做训练集)和交叉验证方法(将数据分成k个大小相似互不相交的子集,每次使用k-1个子集做训练集,剩下的一个子集做测试集,以此循环进行k次的训练和测试,最后返回k次测试结果的均值。)

但是上述两种方法中都保留了一部分样本用于测试,所以实际模型所使用的训练集比源数据都要小,因此就会引入一些因训练样本规模不同而导致的估计偏差。另外一方面留一法受训练样本影响较小,但是计算复杂度又太高。因此为了解决减少训练样本规模不同造成的影响,同时还能比较高效地进行测试集的评估。

自助法就是很好的解决方案。

boostrap抽样
在这里插入图片描述

随机森林

随机森林就是建立很多决策树,组成一个决策树的“森林”,通过多棵树投票来进行决策。这种方法能够有效地提高对新样本的分类准确度。

随机森林在以决策树为基学习器构建Bagging集成(样本的随机选取)的基础上,进一步在决策树的训练过程中引入随机属性选择。具体来说,传统决策树在选择划分属性时是在当前节点的属性集合(假设有d个属性)中选择一个最优属性;而在RF随机森林中,对基决策树的每个节点,先从该节点的属性集合中随机选择一个包含K个属性的子集,然后在从这个子集中选择一个最优属性用于划分。K=d就是传统决策树,K=1则是随机选取一个属性用于划分,一般情况

随机森林的步骤

首先,对样本数据进行有放回的抽样,得到多个样本集。具体来讲就是每次从原来的N个训练样本中有放回地随机抽取N个样本(包括可能重复样本)。

然后,从候选的特征中随机抽取m个特征,作为当前节点下决策的备选特征,从这些特征中选择最好地划分训练样本的特征。用每个样本集作为训练样本构造决策树。单个决策树在产生样本集和确定特征后,使用CART算法计算,不剪枝。

最后,得到所需数目的决策树后,随机森林方法对这些树的输出进行投票,以得票最多的类作为随机森林的决策。

说明:

(1)随机森林的方法即对训练样本进行了采样,又对特征进行了采样,充分保证了所构建的每个树之间的独立性,使得投票结果更准确。
在这里插入图片描述

(2)随机森林的随机性体现在每棵树的训练样本是随机的,树中每个节点的分裂属性也是随机选择的。有了这2个随机因素,即使每棵决策树没有进行剪枝,随机森林也不会产生过拟合的现象。

随机森林中有两个可控制参数:

(1)森林中树的数量(一般选取值较大)

(2)抽取的属性值m的大小。

随机森林的优点

随机森林简单、容易实现、计算开销小,被誉为“代表集成学习计数水平的方法”。可以看出随机森林只是对Bagging做了很小的改动。Bagging的多样性只是体现在样本的随机性,随机森林的基学习器的多样性不仅来自于样本的随机性,还来自于属性的随机性。随机森林随着学习器数目的增加,随机森林通常会收敛到更低的泛化误差。

(1)分类结果更加准确

(2)可以处理高维度的属性,并且不用做特征选择

(3)即使有很大部分数据遗失,仍可以维持高准确度

(4)训练效率优于Bagging

(5)随机性只需要考虑一个属性子集,Bagging需要考察所有属性。

(6)容易实现并行化计算

(7)在训练过程中,能够检测到属性之间的相互影响

随机森林缺点

  1. 随机森林在解决回归问题时,并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续的输出。当进行回归时,随机森林不能够做出超越训练集数据范围的预测,这可能导致在某些特定噪声的数据进行建模时出现过度拟合。(PS:随机森林已经被证明在某些噪音较大的分类或者回归问题上回过拟合)。
  2. 对于小数据或者低维数据(特征较少的数据),可能不能产生很好的分类。(处理高维数据,处理特征遗失数据,处理不平衡数据是随机森林的长处)。

结合策略

平均法与加权平均法

  • 简单平均法是加权平均法分特例
  • 加权平均法的权重一般是从训练数据中学习而来
  • 个体学习器性能相差较大时使用加权平均法,相近的话常使用简单平均法

投票法

  • 绝对多数投票法:学习器的分类票数超过半数,则预测为该标记,否则拒绝预测。
  • 相对多数投票法:预测为得票最多的标记,如同时有多个得票最高,择随机抽取一个。
  • 加权投票法:与加权平均法类似

学习法(Stacking)

首先从初始数据集中训练出初级学习器,然后生成一个新数据集用于训练次级学习器
在这里插入图片描述

这个模型的特点就是通过使用第一阶段(level 0)的预测作为下一层预测的特征,比起相互独立的预测模型能够有更强的非线性表述能力,降低泛化误差。它的目标是同时降低机器学习模型的Bias-Variance。

sklearn参数

这部分参照:https://www.cnblogs.com/pinard/p/6160412.html

  1. n_estimators: 也就是弱学习器的最大迭代次数,或者说最大的弱学习器的个数。一般来说n_estimators太小,容易欠拟合,n_estimators太大,计算量会太大,并且n_estimators到一定的数量后,再增大n_estimators获得的模型提升会很小,所以一般选择一个适中的数值。默认是100。

  2. oob_score :即是否采用袋外样本来评估模型的好坏。默认识False。个人推荐设置为True,因为袋外分数反应了一个模型拟合后的泛化能力。

  3. criterion: 即CART树做划分时对特征的评价标准。分类模型和回归模型的损失函数是不一样的。分类RF对应的CART分类树默认是基尼系数gini,另一个可选择的标准是信息增益。回归RF对应的CART回归树默认是均方差mse,另一个可以选择的标准是绝对值差mae。一般来说选择默认的标准就已经很好的。

-----------------------------------------------------------------------------------------------------------------------------------

  1. RF划分时考虑的最大特征数max_features: 可以使用很多种类型的值,默认是"auto",意味着划分时最多考虑N‾‾√N个特征;如果是"log2"意味着划分时最多考虑log2Nlog2N个特征;如果是"sqrt"或者"auto"意味着划分时最多考虑N‾‾√N个特征。如果是整数,代表考虑的特征绝对数。如果是浮点数,代表考虑特征百分比,即考虑(百分比xN)取整后的特征数。其中N为样本总特征数。一般我们用默认的"auto"就可以了,如果特征数非常多,我们可以灵活使用刚才描述的其他取值来控制划分时考虑的最大特征数,以控制决策树的生成时间。

  2. 决策树最大深度max_depth: 默认可以不输入,如果不输入的话,决策树在建立子树的时候不会限制子树的深度。一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。

  3. 内部节点再划分所需最小样本数min_samples_split: 这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。 默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。

  4. 叶子节点最少样本数min_samples_leaf: 这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。 默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。

  5. 叶子节点最小的样本权重和min_weight_fraction_leaf:这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。 默认是0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。

  6. 最大叶子节点数max_leaf_nodes: 通过限制最大叶子节点数,可以防止过拟合,默认是"None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制,具体的值可以通过交叉验证得到。

上面决策树参数中最重要的包括最大特征数max_features, 最大深度max_depth, 内部节点再划分所需最小样本数min_samples_split和叶子节点最少样本数min_samples_leaf。

应用场景

随机森林既可以用于分类,也可以用于回归。一般适用于数据维度较低,同时对准确性要求较高的场景中。


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

相关文章

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

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

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

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

Android动画分类与总结

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

Android动画分析(ValueAnimator)

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

好看的android动画效果

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

Android 动画系列二之补间动画

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

Android动画大合集

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

Android中动画详细讲解

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

android 动画中插值器Interpolator详解

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

Android中的属性动画

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

android 动画库

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

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

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

Android 动画分类

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

Android动画

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

Android动画之帧动画

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

【Android】动画

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

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协议 同时,以windows 2008 R2为例,搭建NTP/SNTP服务器 NTP可参考文献RFC1305,SNTP可参考文献RFC1796 1. 应用场景 一般应用,连上公网即可通过NTP/SNTP协议进行校时,例如…

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

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

学习日记——ESP8266SNTP

SNTP基本知识 1、定义 SNTP是简单网络时间协议,而NTP网络时间协议就是网络计算机上同步计算时间的协议,具有高度的精确性,实际上也用不到这么高精度的算法。所以就在NTP上简化了以下变成SNTP,SNTP协议主要被用来同步因特网上计算…