随机森林分类模型 0基础小白也能懂(附代码)

随机森林分类模型

原文链接

啥是随机森林

随机森林是一种由决策树构成的(并行)集成算法,属于Bagging类型,通过组合多个弱分类器,最终结果通过投票或取均值,使得整体模型的结果具有较高的精确度和泛化性能,同时也有很好的稳定性,广泛应用在各种业务场景中。随机森林有如此优良的表现,主要归功于「随机」和「森林」,一个使它具有抗过拟合能力,一个使它更加精准。

前面有些乱七八糟的名词,后面来一一解释

集成算法

1)集成学习

对于训练数据集,我们训练一系列「个体学习器」,再通过「结合策略」将它们集成起来,形成一个更强的学习器,这就是「集成学习」在做的事情,内核思想类似「三个臭皮匠,顶个诸葛亮」。

2)个体学习器

个体学习器是相对于集成学习来说的,其实我们在之前了解到的很多模型,比如 C4.5 决策树算法、逻辑回归算法、朴素贝叶斯算法等,都是个体学习器。

Bagging

我们在这里讲到的随机森林是并行集成模型,而Bagging是并行式集成学习方法最著名的代表。

1)Bootstrap Sampling

要理解bagging,首先要了解自助采样法(Bootstrap Sampling):

搞得玄乎其玄,其实原理挺简单,前面文章也讲到过。

给定包含\(m\)个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中。

上述过程重复\(m\)轮,我们得到\(m\)个样本的采样集,初始训练集中有的样本在采样集中多次出现,有的则从未出现,约\(63.2\)的样本出现在采样集中,而未出现的约\(36.8\)的样本可用作验证集来对后续的泛化性能进行「包外估计」。

2)Bagging

Bagging是Bootstrap aggregating的缩写,是在Boostrap Sampling基础上构建的,,上述的采样过程我们可以重复\(T\)次,采样出\(T\)个含\(m\)个训练样本的采样集,然后基于每个采样集训练出一个基学习器,然后将这些基学习器进行结合。

在对预测输出进行结合时(也就是图中对学习器的结合),Bagging 通常对分类任务使用简单投票法(即选取票数最多的类别作为最终预测结果),对回归任务使用简单平均法(计算所有基学习器的预测结果的算术平均值),这就是Bagging 的基本流程。

随机森林算法

Random Forest(随机森林,简称RF)是一种基于树模型的Bagging的优化版本。核心思想依旧是Bagging,但是做了一些独特的改进——RF使用了CART决策树(CART详见基尼指数那块)作为基学习器。具体过程如下:

  • 输入为样本集\(D=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\}\),其中\(x_i\)是第\(i\)个样本的特征向量,每个样本有\(d\)个特征,\(y_i\)是对应的标签(分类任务中为类别标签,回归任务中为连续值)。

  • 对于\(t=1,2,...,T\):对训练集进行\(t\)次随机采样,共采集m次,得到包含m个样本的采集机\(D_T\),用此采样集训练第\(T\)个决策树模型\(G_T(x)\),在标准的决策树训练过程中,我们会在所有特征中选择一个最优特征来进行划分。但在训练随机森林决策树模型的节点的时候,要在节点上所有的样本特征中选择一部分样本特征,在这些随机选择的部分样本特征中选择一个最优的特征来做决策树的左右子树划分。

下面是对于同一份数据集(iris数据集),我们使用决策树和不同树棵树的随机森林做分类的结果,我们对其决策边界做了可视化。

可以很明显地看到,随着随机森林中决策树数量的增多,模型的泛化能力逐渐增强,决策边界越来越趋于平滑(受到噪声点的影响越来越小)。

(1)随机森林优点
对于高维(特征很多)稠密型的数据适用,不用降维,无需做特征选择。
构建随机森林模型的过程,亦可帮助判断特征的重要程度。
可以借助模型构建组合特征。
并行集成,有效控制过拟合。
工程实现并行简单,训练速度快。
对于不平衡的数据集友好,可以平衡误差。
对于特征确实鲁棒性强,可以维持不错的准确度。

(2)随机森林缺点
在噪声过大的分类和回归数据集上还是可能会过拟合。
相比单一决策树,因其随机性,模型解释会更复杂一些。

影响随机森林的参数与调优

1)核心影响参数

(1)生成单颗决策树时的特征数 max_features
增加 max_features 一般能提高单个决策树模型的性能,但降低了树和树之间的差异性,且可能降低算法的速度。
太小的 max_features 会影响单颗树的性能,进而影响整体的集成效果。
需要适当地平衡和选择最佳的 max_features。

(2)决策树的棵数 n_estimators
较多的子树可以让模型有更好的稳定性和泛化能力,但同时让模型的学习速度变慢。
我们会在计算资源能支撑的情况下,选择稍大的子树棵树。

(3)树深 max_depth
太大的树深,因为每颗子树都过度学习,可能会有过拟合问题。
如果模型样本量多特征多,我们会限制最大树深,提高模型的泛化能力。

2)参数调优

(1)RF划分时考虑的最大特征数 max_features
总数的百分比,常见的选择区间是\([0.5,0.9]\)
(2)决策树的棵树 n_estimators
可能会设置为\(>50\)的取值,可根据计算资源调整。
(3)决策树最大深度 max_depth
常见的选择在\(4 到 12\)之间。
(4)内部节点再划分所需最小样本数 min_samples_split
如果样本量不大,不需要调整这个值。
如果样本量数量级非常大,我们可能会设置这个值为\(16,32,64\)等。
(5)叶子节点最少样本数 min_samples_leaf
为了提高泛化能力,我们可能会设置这个值大于1。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/791786.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis组件介绍(六)

今天学习redis最后的知识写在前面 今天学习redis最后的知识。 Redis 的发布与订阅 发布/订阅模式 Redis 提供了两种发布/订阅模式:基于频道 (Channel) 的发布/订阅 基于模式 (Pattern) 的发布/订阅相关命令订阅频道 subscribe channel [channel ...]订阅给定的一个或多个频道。…

prometheus学习笔记之集群内服务发现环境准备

一、环境介绍主要演示prometheus在k8s集群中如何通过服务自动去发现k8s集群自有服务及其他服务发现场景,后续会演示集群外部署prometheus自动发现k8s服务并获取数据创建监控使用的namespaceskubectl create ns monitoring配置docker可以下载镜像[root@k8s-master deploy]# cat…

使用列表推导式实现嵌套列表的平铺

先遍历列表中嵌套的子列表,然后再遍历子列表的元素并提取出来作为最终列表中的元素 a=[[1,2,3],[4,5,6],[7,8,9]] 通过列表推导式[c for b in a for c in b],我们首先将a中的每个子列表(这里用变量b表示) 遍历出来,然后对每个b进行遍历,提取出它的每个元素(这里用变量c表…

章10——面向对象编程(高级部分)——两种单例模式

代码如下: //单例模式 //instance--实例 //该篇中记录了饿汉模式和懒汉模式 public class HungryMan {public static void main(String[] args) {Single01.say();Single02.say();} }class Single01{//只能有instance这一个实例。private Single01(){System.out.println("…

列表操作示例

首先先定义一个列表,列表是写在[]里,用逗号隔开的,元素是可以改变的 列表的截取语法结构是:变量[头下标:尾下标] L = [abc,12,3.45,python,2.789] 输出完整列表 print(L) 输出列表的第一个元素 print(L[0]) 将列表的第一个元素修改为‘a’ L[0]=a 将列表的第2个元素到第3个…

如何设计真正的实时数据湖?

通过剖析“以湖代仓”观点的认知误区,本文提出了数据的流表二象性理论,并基于“流驱表”理念指出了湖仓融合的正确发展方向——利用流式计算加速湖内仓的数据流转,落地真正的实时数据湖。汽车制造行业在企业数据管理方案上的探索已有数十年之久,本文以辩证的视角回顾了这段…

【ELF系列】一文手撕ELF文件

一、ELF文件是什么二、ELF可重定位文件2.1 .shstrtab和.strtab2.2 .rel.text和.symtab2.3 .text节三、ELF可执行文件四、 参考原创 嵌入一下? 谦益行在一文了解ECU软件刷写文件HEX和S19格式 (qq.com)中介绍汽车控制器的刷写软件的格式,不管是编译生成的目标软件格式是哪种,同…

wsl2+arch+个人向美化

也算是入教arch了,本来想物理机的,但是又舍不得把笔记本上的环境,刚好想着玩玩wsl2。到处缝缝补补也算是弄了个感觉能看的 最终效果图 图一内置主题图二p10k使用材料 终端直接用的是win的terminal,不是因为他善,只是我懒。喜欢捣鼓可以拿wezterm来 shell用的是on my zsh +…

Python复杂网络社区检测:并行谱聚类算法设计与多种算法应用实战研究

原文链接: https://tecdat.cn/?p=37574 原文出处:拓端数据部落公众号 分析师:Leiyun Liao 在当今的网络科学领域,复杂网络中的社区检测成为了一个至关重要的研究课题。随着信息技术的飞速发展,各种大规模网络不断涌现,如社交网络、生物网络等。准确地识别这些网络中的社…

IEC101、IEC103、IEC104、Modbus报文解析工具

一、概述国际电工委员会第57技术委员会(IEC TC57)1995年出版IEC 60870-5-101后,得到了广泛的应用。为适应网络传输,2000年IEC TC57又出版了IEC 60870-5-104:2000《远东设备及系统 第5-104部分:传输规约-采用标准传输协议集的IEC 60807-5-1网络访问》。为规范该标准的国内…

人工智能环境与编译器安装

1. 环境与编译器安装本文是为没有Python基础的同学,学习Python相关语法知识准备的1. Python环境安装 第一步:进入【Python官网】第二步:选择你的系统,如果是Windows系统直接点击下载即可,否则选项你对应的操作系统Linux/UNIX、macOS第三步:选择合适Python版本包(一般不要…