三个臭皮匠顶个诸葛亮的随机森林算法!

2024-02-12 02:30

本文主要是介绍三个臭皮匠顶个诸葛亮的随机森林算法!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://mp.weixin.qq.com/s?__biz=MzIzNDM2OTMzOQ==&mid=2247484211&idx=1&sn=5eb8958f7a87fcbb3992a5226e367445&mpshare=1&scene=23&srcid=0306A97NjBiE9Zsp5GmRJSUt#rd

 

随机森林一个已被证明了的成功的集成分类器,特别是用在多维分类问题上更是体现出其强大之处。一个随机森林是一个决策树的集合,可以看作是一个分类器包括很多不同的决策树。整个算法包括三部分:特征和数据的分组,训练决策树,最后的结果投票。

 

 

 1. 随机森林的分组策略

为了保持在随机森林中每个决策树的差异性,选择在生成决策树的时候选择不同特征集在不同的数据集上进行训练,生成最终的决策树。因此,我们需要对数据集和特征集进行分组,在分组的过程中,分别对数据集的分组和对特征集的分组。

在分组的过程中,采用基于BootstrapingAggregation(Bagging)分组策略的改进方法。在Bagging分组策略的方法思路如下:

1.  首先对个数为n的样本集通过重采样(有放回的采样)进行分组,每组大小为n个,分成m组。这样相当于是m个大小为n的样本集。

2.  在所有属性上,分别对m个样本集进行分类模型训练。这样训练完成后就得到m个分类器。

3.  利用m个分类器对数据进行分类。根据m个分类器的投票结果决定数据最终归结为哪一类。

然而,随机森林为了更能体现出其随机性,在Bagging分组策略的基础上进行了一些改进:不仅对样本集进行分类,还对特征集进行分类。具体如下:

1.  首先对个数为n的样本集通过重采样(有放回的采样)进行分组,每组大小为n个,分成m组。这样相当于是m个大小为n的样本集。

2.  对属性进行分组,属性的个数为t,在所有属性上无放回的随机选取k个属性(k<t),重复m次,这样共选取m组,大小为k的特征集。

3.  在m组属性集和m组样本集中,利用一组属性集在一组样本集上训练得到一个决策树分类器。这样训练完成后就得到m个分类器。

4.  利用m个分类器对数据进行分类。根据m个分类器的投票结果决定数据最终归结为哪一类。

首先通过重采样对数据集进行分组,将数据集分为t组。如图1所示: 

图1. 对数据集进行分组

在该分组过程中,输入是原始的数据集,输出为分好组的子数据集D_i其中子数据集的长度是和原始数据集的长度相同,值得注意的是为了保持数据集大小的一致和数据的多样性,这里采用重采样,所以在每一个子数据集中,允许有重复的样本出现。

对数据集进行分组后,对特征集进行分组,如图2所示:


图2. 对特征集的分组

对特征集的分组,如上图所示,输入是原始全部特征集。通过采样得到t组F_i,在对特征集进行分组的时候,是通过直接采样进行的,所以每个子特征集中的特征不会重复。这里特征集的长度应比原始特征集的长度小,如果等于原始特征集的长度,则在子特征集中特征不重复的情况下,每个子特征都一样,缺少了子特征集的多样性,从而限制了随机森林中,决策树的多样性。

 

 

2.决策树的建立

    决策树的建立,主要分两步:构建完全决策树和决策树剪枝。首先是通过一定的方法选择决策树节点,构建出一个未剪枝的决策树。然后,对该决策树进行剪枝来提高其分类的泛华能力。

    随机森林中利用CART算法构建完全决策树,CART算法利用Gini指标进行分裂节点的选择。Gini指标度量数据划分或训练数据集D的不纯度,其中特征A的取值A_i的不纯度定义为;

   其中表示取值A_i时样本的类别,j为该取值下的类别,则特征A的不纯度表示为:

   其中i表示特征A所取的值,j表示所分的类别。

选择不纯度最小的属性作为节点,进行决策树的构建。 

当决策树构建完全之后,由于数据中的噪声点和离群点。许多分枝反应的是训练数据集中的异常。剪枝方法是用来处理构建决策树后的这种过拟合的问题。通常的剪枝方法都是使用统计度量的方法,即剪去最不可靠的分枝。

剪枝一般分为两种方法:先剪枝和后剪枝:

先剪枝的方法是通过提前停止树的构造(比如决定在某个节点不再分裂)而对树剪枝,一旦停止,这个节点就编程树叶,该树叶可能取它持有的子集最频繁的类作为自己的类。先剪枝有很多方法,比如当决策树达到一定的高度就停止决策树的生长;或者到达此节点的实例个数小于某个阈值的时候也可以停止树的生长,不足之处是不能处理那些数据量比较小的特殊情况。先剪枝有个缺点就是视野效果问题,也就是说我们很难确定基于先剪枝生成的决策树是否是最优的决策树。

更常用的是第二种方法后剪枝。它由完全成长的树剪去子树而形成,通过删除节点的分枝并用树叶来替换它。树叶一般用子树中最频繁的类别来标记。这个方法称为基于误判的剪枝。这个思路很直接,因为完全决策树过拟合,所以通过一个测试数据集来纠正它。对于完全决策树中的每一个非叶子节点的子树,我们尝试着把它替换成一个叶子节点,该叶子节点的类别我们用子树所覆盖训练样本中存在最多的那个类来代替,这样就产生了一个简化决策树,然后比较这两个决策树在测试数据集中的表现,如果简化决策树在测试数据集中的错误比较少,并且该子树里面没有包含另外一个具有类似特性的子树(所谓类似的特性,指的就是把子树替换成叶子节点后,其测试数据集误判率降低的特性),那么该子树就可以替换成叶子节点。该算法以bottom-up的方式遍历所有的子树,直至没有任何子树可以替换使得测试数据集的表现得以改进时,算法就可以终止。

在我们的随机森林算法构建决策树的时候,就是在在对数据集和特征集分组之后,将子特征集和子数据集分组进行训练分类模型:                      

   在传统的随机森林算法中,决策树的建立是通过CART算法进行训练决策树模型。CART算法的基本原理是通过由测试变量和目标变量构成的训练数据集的循环分析,而构成的二叉树形式的决策树CART算法在最佳测试变量和分割阈值准则上采用经济学中的基尼系数Gini,Gini系数的定义上。通过CART的方法对每组G_i进行构建决策树。这样我们就可以构建t颗决策树。

 

 

3.投票机制

投票机制是指根据投票者的选择以选出最终结果的一种常用方法。其中主要分一下几种:

1.  一票否决制(一致表决):一票否决制是指在投票的过程中,只有在大家都同意A结果的情况下,最终的结果才为A,任何一票不同意,则最后的结果均不为A。

2.  少数服从多数制:是指在投票的过程中,最终的结果是大多数人认可的结果,少数人须服从多数人的意愿。

3.  阈值表决制:在投票的时候,为每个类设置阈值,当投票结果达到某一类的阈值时,即选取该类为最终结果。

4.  加权投票制:即指在投票的过程中,某些人投票分量比较重,在GEP中,可以看做适应值高的个体投票份额较大。

5.  贝叶斯投票机制:简单的投票法假设每个分类器都是平等的,在实际生活中,我们听取一个人的意见,会考虑这个人过去的意见是否有用,从而加大或减少权值。也就是说贝叶斯投票机制是基于每个分类器在过去的分类表现设定一个权值,然后按照这个权值进行投票。

随机森林的决策树的传统方法通过使用CART的方法训练决策树,在根据t组数据和特征获得t棵决策树后,需要利用每一棵决策树对测试集进行决策出一个结果。这样就会对一个测试样本得到t个测试结果。最简单的,这里每颗决策树投一票,根据少数服从多数的原则,得到该测试样本的最终分类结果。如下图3:

图3 随机森林流程图

整个随机森林的流程图如上图所示。首先对数据集和特征集进行分组,然后对每一组数据集和特征集通过CART算法进行决策树的构建,对于一个测试样本,每一个决策树都会得出一个决策结果,最后根据少数服从多数的原则进行投票得出最终是分类结果。

 


免责声明:本文系网络转载。版权归原作者所有。如涉及版权,请联系删除

转载于:https://www.cnblogs.com/zhangbojiangfeng/p/6513081.html

这篇关于三个臭皮匠顶个诸葛亮的随机森林算法!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/701444

相关文章

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

使用C#如何创建人名或其他物体随机分组

《使用C#如何创建人名或其他物体随机分组》文章描述了一个随机分配人员到多个团队的代码示例,包括将人员列表随机化并根据组数分配到不同组,最后按组号排序显示结果... 目录C#创建人名或其他物体随机分组此示例使用以下代码将人员分配到组代码首先将lstPeople ListBox总结C#创建人名或其他物体随机分组

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

三国地理揭秘:为何北伐之路如此艰难,为何诸葛亮无法攻克陇右小城?

俗话说:天时不如地利,不是随便说说,诸葛亮六出祁山,连关中陇右的几座小城都攻不下来,行军山高路险,无法携带和建造攻城器械,是最难的,所以在汉中,无论从哪一方进攻,防守方都是一夫当关,万夫莫开;再加上千里运粮,根本不需要打,司马懿只需要坚守城池拼消耗就能不战而屈人之兵。 另一边,洛阳的虎牢关,一旦突破,洛阳就无险可守,这样的进军路线,才是顺势而为的用兵之道。 读历史的时候我们常常看到某一方势

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费