StatQuest生物统计学专题 - 随机森林(1) 构建与评价
随机森林的构建方法随机森林的模型评价方法最优子集数目的选择
在上两周介绍了决策树相关的内容,涉及到了决策树的构建、评价以及缺失值的处理等方面的知识。
在那里我们知道决策树其实是一种非常简便、易于操作的分类算法。但是不得不说的是,它虽然构建起来非常简单,但是它的分类效果其实并不好。
本周将开始介绍一种新的方法——随机森林,它兼具构建简单和分类效果良好的优点。
注意:
随机森林的名字其实很有意思,首先它使用bootstrap方法构建了新的数据集,然后使用随机抽取特定数量的变量子集的办法来构建决策树,而且上述过程会重复很多次,构建大量的决策树。所以不管是bootstrap方法还是随机抽取子集都是随机,而构建大量的决策树,树多成林,所以是森林。
随机森林,名副其实~
简言之,随机森林就是使用随机的方法重新构建大量的决策树,根据多个决策树分类结果的“少数服从多数”的原则来完成对新数据的分类预测。
随机森林的构建方法
构建一个决策树是很简单的,分为3步:
构建bootstrap数据集;
创建bootstrap数据集的决策树;
如此重复很多次,树多成林,就完成了随机森林的构建
从一个例子来看如何构建随机森林。对于如下共有4条记录的原始数据,使用Chest Pain、Good Blood Circ.、Blocked Arteries和Weight来构建随机森林,以用于判断一个病人是否罹患Hear Disease。
构建bootstrap数据集
bootstrap数据集就是以有放回的方式重新从原数据中抽取同样数量的记录构成新的数据集。
比如原始数据有4条记录,因此要随机抽取4条组成新的记录,假定我们随机抽取四次,结果为第2条、第1条、第4条、第4条。
所以此时的bootstrap数据集为:
构建每一个bootstrap数据集的决策树
构建每一个bootstrap数据集的决策树,不同于前面讲过的决策树方法,此处要加一个调整,就是每次只选择特定数量的变量子集。
举例来说,假如每次只选择2个变量的子集,那么在构建根节点(Root)时,随机从Chest Pain、Good Blood Circ.、Blocked Arteries和Weight选取2个变量构建决策树。假如此时选择的两个是Chest Pain、Good Blood Circ.,而且经过计算Good Blood Circ.的作为根节点的Gini指数要低,所以固定Good Blood Circ.为根节点。
接着进行中间节点的构建,同样是随机选取2个变量,此时从Chest Pain、Blocked Arteries和Weight中随机选取2个变量,比如是Chest Pain和Weight,再去计算相应的Gini指数。
以此类推,完成整个决策树构建,假定此时的决策树(示意图)如下图所示。
为何要选择变量子集的数目为2?如何确定最佳的变量子集数目?
本文第三部分会对这些内容进行说明。
如此重复很多次,就完成了随机森林的构建
将上述步骤重复很多次,比如是100次,那么这100个决策树就构成了随机森林。
随机森林的用法也很简单,当有新数据需要分类时,那么100个决策树都要纳入计算,根据100个分类结果,按照“少数服从多数”的原则进行定论,假如100个分类结果有80个Yes、20个No,那么最终分类结果就是”Yes“。
此时的前6个决策树(示意图)如下图所示。
随机森林的模型评价方法
随机森林通过bootstrap和随机子集的方法可以产生大量的随机数据集,从而形成随机森林。而在bootstrap的过程中,由于是有放回的抽样,所以每一个boots数据集中绝大部分都会有重复样本,也就是说原始数据集中的一些样本不在bootstrap数据集中,这些样本称为“Out-of-bag Dataset”。
在每一次bootstrap过程中,Out-of-bag Dataset的样本数量大约为原始数据量的1/3(0.36左右)。
反过来说,假定一个随机森林有100个决策树,对于原始数据来说,每一个样本都有可能是某些树的Out-of-bag数据。
所以刚好就可以使用Out-of-bag Dataset数据集去评价随机森林的效果好坏。
如何评价呢?
方法就是将同Out-of-bag数据对应的决策树对Out-of-bag数据进行分类计算,看计算出来的分类结果和原始分类是否相符,计算不相符的Out-of-bag Dataset的比例,此比例就是随机森林的优劣程度评价。此比例又叫做Out-of-bag Error。
比如对于上述随机森林,
对于第一个样本而言,假设它是第5#、15#、30#、36#、60#、70#、99#共7个决策树的Out-of-bag数据。
那么将第一个样本带入上述7个决策树中,计算最终的分类结果,比如是6个No、1个Yes,因此计算的分类结果是No,而原始数据中第一个样本的分类结果也是No,所以第一个Out-of-bag数据相符。
以此类推,计算所有的Out-of-bag Dataset的相符情况,不相符数据的比例就是Out-of-bag Error,它可以用来衡量模型的优劣程度,Out-of-bag Error越低越好。
最优子集数目的选择
我们在上面的例子中是将随机子集的数目定为2,那么如果找到最佳的子集数目呢?
由于我们已经知道了如何构建随机森林,也已经知道了随机森林的评价方法,所以寻找最优子集数目是一个非常简单的过程,多试试几个子集数目,寻找Out-of-bag Error最小的随机森林不就好了嘛。
是的,实际情况就是这样。
最优子集的选择是如下过程:
一般先从“样本数目的平方根”个数目开始,如上例子样本数目为4,则先定子集数目为2;
计算此时的随机森林和相应的Out-of-bag Error值;
然后再将“样本数目的平方根”周围的一些数作为子集数目,计算此时的随机森林和Out-of-bag Error;
根据Out-of-bag Error值,选择最佳的子集数目和相应的随机森林即可。
本周的随机森林就到这里,下周继续关注随机森林的其他细节。
专题以往文章
参考资料
StatQuest课程:https://statquest.org/video-index/
猜你喜欢
生信菜鸟团-专题学习目录(6)
生信菜鸟团-专题学习目录(7)
还有更多文章,请移步公众号阅读
▼ 如果你生信基本技能已经入门,需要提高自己,请关注下面的生信技能树,看我们是如何完善生信技能,成为一个生信全栈工程师。
▼ 如果你是初学者,请关注下面的生信菜鸟团,了解生信基础名词,概念,扎实的打好基础,争取早日入门。