随机森林算法及其实现(andomorest)腾讯云开发者社区

大家好,又见面了,我是你们的朋友全栈君。

阅读目录

那说了这么多,那随机森林到底是怎样的一种算法呢?

如果读者接触过决策树(Decision Tree)的话,那么会很容易理解什么是随机森林。随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。随机森林的名称中有两个关键词,一个是“随机”,一个就是“森林”。“森林”我们很好理解,一棵叫做树,那么成百上千棵就可以叫做森林了,这样的比喻还是很贴切的,其实这也是随机森林的主要思想–集成思想的体现。“随机”的含义我们会在下边部分讲到。

其实从直观角度来解释,每棵决策树都是一个分类器(假设现在针对的是分类问题),那么对于一个输入样本,N棵树会有N个分类结果。而随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出,这就是一种最简单的 Bagging 思想。

我们前边提到,随机森林是一种很灵活实用的方法,它有如下几个特点:

实际上,随机森林的特点不只有这六点,它就相当于机器学习领域的Leatherman(多面手),你几乎可以把任何东西扔进去,它基本上都是可供使用的。在估计推断映射方面特别好用,以致都不需要像SVM那样做很多参数的调试。具体的随机森林介绍可以参见随机森林主页:Random Forest。

随机森林看起来是很好理解,但是要完全搞明白它的工作原理,需要很多机器学习方面相关的基础知识。在本文中,我们简单谈一下,而不逐一进行赘述,如果有同学不太了解相关的知识,可以参阅其他博友的一些相关博文或者文献。

1)信息、熵以及信息增益的概念

这三个基本概念是决策树的根本,是决策树利用特征来分类时,确定特征选取顺序的依据。理解了它们,决策树你也就了解了大概。

引用香农的话来说,信息是用来消除随机不确定性的东西。当然这句话虽然经典,但是还是很难去搞明白这种东西到底是个什么样,可能在不同的地方来说,指的东西又不一样。对于机器学习中的决策树而言,如果带分类的事物集合可以划分为多个类别当中,则某个类(xi)的信息可以定义如下:

I(x)用来表示随机变量的信息,p(xi)指是当xi发生时的概率。

熵是用来度量不确定性的,当熵越大,X=xi的不确定性越大,反之越小。对于机器学习中的分类问题而言,熵越大即这个类别的不确定性更大,反之越小。

信息增益在决策树算法中是用来选择特征的指标,信息增益越大,则这个特征的选择性越好。

这方面的内容不再细述,感兴趣的同学可以看 信息&熵&信息增益 这篇博文。

2)决策树

决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。常见的决策树算法有C4.5、ID3和CART。

3)集成学习

集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成单预测,因此优于任何一个单分类的做出预测。

随机森林是集成学习的一个子类,它依靠于决策树的投票选择来决定最后的分类结果。你可以在这找到用python实现集成学习的文档:Scikit 学习文档。

前面提到,随机森林中有许多的分类树。我们要将一个输入样本进行分类,我们需要将输入样本输入到每棵树中进行分类。打个形象的比喻:森林中召开会议,讨论某个动物到底是老鼠还是松鼠,每棵树都要独立地发表自己对这个问题的看法,也就是每棵树都要投票。该动物到底是老鼠还是松鼠,要依据投票情况来确定,获得票数最多的类别就是森林的分类结果。森林中的每棵树都是独立的,99.9%不相关的树做出的预测结果涵盖所有的情况,这些预测结果将会彼此抵消。少数优秀的树的预测结果将会超脱于芸芸“噪音”,做出一个好的预测。将若干个弱分类器的分类结果进行投票选择,从而组成一个强分类器,这就是随机森林bagging的思想(关于bagging的一个有必要提及的问题:bagging的代价是不用单棵决策树来做预测,具体哪个变量起到重要作用变得未知,所以bagging改进了预测准确率但损失了解释性。)。下图可以形象地描述这个情况:

有了树我们就可以分类了,但是森林中的每棵树是怎么生成的呢?

每棵树的按照如下规则生成:

1)如果训练集大小为N,对于每棵树而言,随机且有放回地从训练集中的抽取N个训练样本(这种采样方式称为bootstrap sample方法),作为该树的训练集;

从这里我们可以知道:每棵树的训练集都是不同的,而且里面包含重复的训练样本(理解这点很重要)。

如果不进行随机抽样,每棵树的训练集都一样,那么最终训练出的树分类结果也是完全一样的,这样的话完全没有bagging的必要;

我理解的是这样的:如果不是有放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的,这样每棵树都是”有偏的”,都是绝对”片面的”(当然这样说可能不对),也就是说每棵树训练出来都是有很大的差异的;而随机森林最后分类取决于多棵树(弱分类器)的投票表决,这种表决应该是”求同”,因此使用完全不同的训练集来训练每棵树这样对最终分类结果是没有帮助的,这样无异于是”盲人摸象”。

2)如果每个样本的特征维度为M,指定一个常数m<<M,随机地从M个特征中选取m个特征子集,每次树进行分裂时,从这m个特征中选择最优的;

3)每棵树都尽最大程度的生长,并且没有剪枝过程。

一开始我们提到的随机森林中的“随机”就是指的这里的两个随机性。两个随机性的引入对随机森林的分类性能至关重要。由于它们的引入,使得随机森林不容易陷入过拟合,并且具有很好得抗噪能力(比如:对缺省值不敏感)。

随机森林分类效果(错误率)与两个因素有关:

上面我们提到,构建随机森林的关键问题就是如何选择最优的m,要解决这个问题主要依据计算袋外错误率oob error(out-of-bag error)。

随机森林有一个重要的优点就是,没有必要对它进行交叉验证或者用一个独立的测试集来获得误差的一个无偏估计。它可以在内部进行评估,也就是说在生成的过程中就可以对误差建立一个无偏估计。

我们知道,在构建每棵树时,我们对训练集使用了不同的bootstrap sample(随机且有放回地抽取)。所以对于每棵树而言(假设对于第k棵树),大约有1/3的训练实例没有参与第k棵树的生成,它们称为第k棵树的oob样本。

而这样的采样特点就允许我们进行oob估计,它的计算方式如下:

(note:以样本为单位)

1)对每个样本,计算它作为oob样本的树对它的分类情况(约1/3的树);

2)然后以简单多数投票作为该样本的分类结果;

3)最后用误分个数占样本总数的比率作为随机森林的oob误分率。

(文献原文:Put each case left out in the construction of the kth tree down the kth tree to get a classification. In this way, a test set classification is obtained for each case in about one-third of the trees. At the end of the run, take j to be the class that got most of the votes every time case n was oob. The proportion of times that j is not equal to the true class of n averaged over all cases is the oob error estimate. This has proven to be unbiased in many tests.)

oob误分率是随机森林泛化误差的一个无偏估计,它的结果近似于需要大量计算的k折交叉验证。

描述:根据已有的训练集已经生成了对应的随机森林,随机森林如何利用某一个人的年龄(Age)、性别(Gender)、教育情况(Highest Educational Qualification)、工作领域(Industry)以及住宅地(Residence)共5个字段来预测他的收入层次。

收入层次 :

Band 1 : Below $40,000

Band 2: $40,000 – 150,000

Band 3: More than $150,000

随机森林中每一棵树都可以看做是一棵CART(分类回归树),这里假设森林中有5棵CART树,总特征个数N=5,我们取m=1(这里假设每个CART树对应一个不同的特征)。

CART 1 : Variable Age

CART 2 : Variable Gender

CART 3 : Variable Education

CART 4 : Variable Residence

CART 5 : Variable Industry

我们要预测的某个人的信息如下:

1. Age : 35 years ; 2. Gender : Male ; 3. Highest Educational Qualification : Diploma holder; 4. Industry : Manufacturing; 5. Residence : Metro.

根据这五棵CART树的分类结果,我们可以针对这个人的信息建立收入层次的分布情况:

最后,我们得出结论,这个人的收入层次70%是一等,大约24%为二等,6%为三等,所以最终认定该人属于一等收入层次(小于$40,000)。

利用Python的两个模块,分别为pandas和scikit-learn来实现随机森林。

分类结果:

与其他机器学习分类算法进行对比:

这里随机生成了三个样本集,分割面近似为月形、圆形和线形的。我们可以重点对比一下决策树和随机森林对样本空间的分割:

1)从准确率上可以看出,随机森林在这三个测试集上都要优于单棵决策树,90%>85%,82%>80%,95%=95%;

2)从特征空间上直观地可以看出,随机森林比决策树拥有更强的分割能力(非线性拟合能力)。

更多有关随机森林的代码:

1)Fortran版本

2)OpenCV版本

3)Matlab版本

4)R版本

[1] Random Forest’s homepage (by Leo Breiman and Adele Cutler)

[2] Introduction to Random forest – Simplified

[3] Comparing a Random Forest to a CART model (Part 2)

[4] Introduction to Random forest (博主:爱67)

THE END
0.机器学习集成学习之随机森林随机森林算法的特点什么是随机森林 随机森林(RandomForest)是一种基于决策树的集成学习算法,它在机器学习领域中应用广泛,其核心思想是通过构建多个基学习器(这里是决策树),然后将这些基学习器的预测结果进行综合,以获得更准确和稳定的预测结果。 随机森林的特点 1、数据采样随机:从原始训练数据集D中,采用有放回的抽样方式,抽取n个样本jvzquC41dnuh0lxfp0tfv87423e87=>3:670c{ykenk0fnyckny03=;3;:<:3
1.机器学习——随机森林随机森林算法的特点随机森林(Random Forest)是一种强大的集成学习算法,由Leo Breiman和Adele Cutler于2001年在论文"Random Forests"中首次提出。该算法通过构建多个决策树进行预测,并采用投票或平均的方式来综合各个决策树的结果,从而提高模型的准确性和泛化能力。 作为机器学习领域最常用的算法之一,随机森林具有以下显著特点: jvzquC41dnuh0lxfp0tfv8vs3:;26:<5545bt}neng5eg}fknu5279534377
2.机器学习中常用的几种分类算法,如何选择合适的算法?随机森林算法特点: 优点: 对于很多种资料,可以产生高准确度的分类器 可以处理大量的输入变量 可以在决定类别时,评估变量的重要性 在建造森林时,可以在内部对于一般化后的误差产生不偏差的估计 包含一个好方法可以估计丢失的资料,并且如果有很大一部分的资料丢失,仍可以维持准确度 jvzquC41yy}/7:hvq0ipo8ftvkimg8<96:950qyon
3.可解释性机器学习:基于随机森林和Ceteris随机森林的预测:当新的数据点到达时,让随机森林中的每个决策树对其进行分类,并采取多数票制来决定其分类结果。 随机森林算法的特点包括: 可处理高维数据:随机森林可以处理高维、大规模的数据,适用于各种类型的特征。 泛化能力强:随机森林具有较强的泛化能力和稳定性,不容易出现过拟合问题。 jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1:97;5?8
4.随机森林算法是什么:从工作原理到应用示例全解析|BetterYeahAI什么是随机森林 随机森林,顾名思义,是由大量的决策树组成的森林,通过集成学习的方式,将多个决策树的预测结果进行综合,从而提高整体模型的预测准确性和泛化能力。 随机森林算法属于Bagging类型集成学习算法,通过自举汇聚法(bootstrap aggregating)从原始数据集中有放回地抽样,生成多个新的数据集,训练出多个弱分类器。这些jvzquC41yy}/dnyvgtfcq3eqo5cnxl1yjgu/rx/tcteqv2hqtktv6fniqxjvqr
5.以下属于随机森林算法特点的是()以下属于随机森林算法特点的是()A.具有很好的抗噪声能力 B.不用做特征选择,对数据集的适应能力强 C.训练速度快,可得到变量重要性排序 D.易并行化处理点击查看答案&解析 在线练习 手机看题 你可能感兴趣的试题 多项选择题 以下属于机器学习评价指标的是() A.F1-score B.AUC(Area Under Curve) C.ROC(ReceijvzquC41yy}/rypcq0ipo8ykmw5tjryk17i83@kg:h;2f=h9h:k9cn7999ib:jhh40nuou
6.机器学习——随机森林(RandomForest)6.绘制特征排名 四、总结 前面一节我们学习了一种简单高效的算法——决策树学习算法(Decision Tree ),下面来介绍一种基于决策树的集成学习算法——随机森林算法(Random Forest )。 一、随机森林的介绍 随机森林是一种基于集成学习(Ensemble Learning)的机器学习算法,属于 Bagging 类型的集成方法。它通过jvzquC41dnuh0lxfp0tfv8fz4;97>55;660c{ykenk0fnyckny03=;463>34
7.随机森林(RandomForest):机器学习中的经典算法随机森林算法随机性:在构建每棵决策树时,随机森林引入了两种随机性:一是从训练数据中随机抽取样本(Bootstrap采样),二是从特征集中随机选择部分特征进行节点分裂。 森林:随机森林由多棵决策树组成,这些树共同构成一个“森林”。 随机森林算法有三个主要超参数,需要在训练前设置。这些参数包括节点大小、树的数量和特征采样的数量。jvzquC41dnuh0lxfp0tfv8r2a8752=6851gsvrhng1jfvjnnu1757@>;;3:
8.数据挖掘随机森林这个代码是随机森林算法的一个非常简化的实现,它展示了如何递归地构建一棵决策树。在实际应用中,决策树的构建过程会更加复杂,包括特征选择、阈值选择、剪枝等步骤。随机森林算法通常还涉及到随机抽样、特征列的随机选择等步骤,以保证森林中的每棵树都是不相同的。在上述代码中,我们只是简单地随机选择了一个特征,并以jvzquC41dnuh0lxfp0tfv8}kcqjpp}kzk7::B4ctvodnn4fgvgjn|4364878@=7
9.机器学习5—分类算法之随机森林(RandomForest)随机森林分类1.什么是随机森林 2.随机森林的特点 3.随机森林的生成 二、随机森林的函数模型 三、随机森林算法实现 1.数据的读取 2.数据的清洗和填充 3.数据的划分 4.代码的实现 总结 前言 随机森林(Random Forest)是Bagging(一种并行式的集成学习方法)的一个拓展体,它的基学习器固定为决策树,多棵树也就组成了森林,而“jvzquC41dnuh0lxfp0tfv8jza8:628ftvkimg8igvcomu86483;14:>
10.随机森林算法详解随机森林是一种高效、强大的集成学习算法,适用于多种实际任务。其通过“数据采样+特征随机性+集成投票/平均”三大机制,有效提升了模型的泛化能力和鲁棒性。 九、原理细节 1. Bagging机制 有放回采样(Bootstrap):对原始数据集进行有放回抽样,每次抽取的样本数等于原始数据集大小。这样,每个子集和原始数据集分布类似,jvzquC41dnuh0lxfp0tfv8tpn{stew4ctvodnn4fgvgjn|4374?46982