【典型算法】随机森林
随机森林是一个高度灵活的机器学习方法,拥有广泛的应用前景,从市场营销到医疗保健保险。 既可以用来做市场营销模拟的建模,统计客户来源,保留和流失。也可用来预测疾病的风险和病患者的易感性。
随机森林是一个可做能够回归和分类。 它具备处理大数据的特性,而且它有助于估计或变量是非常重要的基础数据建模。
什么是随机森林?
随机森林是几乎任何预测问题 (甚至非直线部分)的固有选择 。它是 一个相对较新的机器学习的策略( 在90年代产生于尔实验室)和它可以几乎用于任何方面。它 属于机器学习算法一大类—– 集成学习方法 。
集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成单 预测,因此优于任何一个单分类的做出预测。
随机森林是集成学习的一个子类,由于它依靠于策率树的合并。你可以在这找到用python实现集成学习的文档: Scikit 学习文档。
我们知道随机森林是其他的模型聚合,但它 聚合了什么类型模型?你 可能已经从其名称、随机 森林 聚合分类(或回归)的树中猜到。 决策 树是由一系列的决策的组合,可用于分类观察数据集 。
算法引入了一个随机森林来自动创建随机决策树群。由于树随机生成的树,大部分的树(或许 99.9%树)不会对学习的分类/回归问题都有意义 。
如果观察到长度为45,蓝眼睛,和2条腿,就被归类为红色 。
所以10000个(概率上)糟糕的模型有TMD什么好的?好吧,这样确实没什么特别的好处。但是随着很多糟糕的决策树被生成,其中也会有很少确实很优秀的决策树。
当你要做预测的时候,新的观察到的特征随着决策树自上而下走下来,这样一组观察到的特征将会被贴上一个预测值/标签。一旦森林中的每棵树都给出了预测值/标签,所有的预测结果将被归总到一起,所有树的模式投票被返回做为最终的预测结果。
简单来说,99.9%不相关的树做出的预测结果涵盖所有的情况,这些预测结果将会彼此抵消。少数优秀的树的预测结果将会超脱于芸芸“噪音”,做出一个好的预测。
简单
随机森林就是学习方法中的Leatherman呀。你几乎可以把任何东西扔进去,它基本上都是可供使用的。在估计推断映射方面特别好用,以致都不需要像SVM那样做很多调试(也就是说对于那些最后期限很紧的家伙们真是太棒了)。
一个映射的例子
随机森林在没有精心准备的数据映射的情况下也能学习。以方程f(x) = log(x)为例。
制造一些假数据,并且加上一点儿噪音。
如果我们建立了一个基本的线性模型通过使用x来预测y,我们需要作 一 条直线 ,算是平分log(x)函数。而如果我们使用 一个随机的森林 , 它不会更好的逼近log(x) 曲线并能够使得它更像实际函数。你也许会说 随机森林有点扰乱了log(x)函数。不管怎样,我都认为这做了一个很 好 的说明如何随机森林并未绑定于线性约束 。
变量选择
随机森林最好的用例之一是特征选择。尝试很多决策树变种的一个副产品就是你可以检测每棵树中哪个变量最合适/最糟糕。
当一棵树使用一个变量,而另一棵不使用这个变量,你就可以从是否包含这个变量来比较价值的减少或增加。优秀的随机森林实现将为你做这些事情,所以你需要做的仅仅是知道去看那个方法或参数。
在下述的例子中,我们尝试去指出对于将酒分为红酒或者白酒哪个变量是最重要的。
分类
随机森林也很善于分类。它可以被用于为多个可能目标类别做预测,它也可以被校正输出概率。你需要注意的一件事情是过拟合。随机森林容易产生过拟合,特别是在数据集相对小的时候。当你的模型对于测试集合做出“太好”的预测的时候就应该怀疑一下了。
产生过拟合的一个原因是在模型中只使用相关特征。然而只使用相关特征并不总是事先准备好的,使用特征选择(就像前面提到的)可以使其更简单。
回归
我们已经发现随机森林——不像其它算法——对分类变量或者分类变量和真实变量混合学习的非常好。具有高基数(可能值的#)的分类变量是很棘手的,所以在你的口袋中放点儿这样的东西将会是非常有用的。
示例
数据为R自带的数据集iris,该数据集包含了150个样本,5个变量,记录了鸢尾属植物的萼片、花瓣的长度和宽度,三个物种,每个物种50株植物,下面我们用随机森林方法通过植物的萼片、花瓣的长度和宽度来对150个样本根据其物种进行分类。
1.函数介绍
randomForest(formula, data, mtry, ntree)
注:mtry的取值是创建随机森林方法的作者的建议。
2.操作步骤如下:
注:1. OOB错误率即袋外数据错误率,如何产生的呢?我们在随机森林模型的原理中提到“从原始数据m*n维数据中有放回的抽取样本容量与原数据相同的数据样本m*n”,既然是有放回的抽取,则必然有未抽取到的样本,那么这部分数据就是袋外数据,在每个决策树形成后,这部分被用于验证决策树的正确率,再将所有的决策树的OOB错误率平均即得到模型的OOB错误率。
到这里一个随机森林模型便建好了,当然randomForest包的功能可不到这里为止,你可以看到在建好的模型中,变量的相对重要性,即importance()函数,它以MeanDecreaseAccuracy为指标评价变量的重要性,基本原理可以理解为它在原有的模型的基础上将某个变量进行随机赋值,预测的误差的变化即是变量的重要性。
3. importance()函数
这里展示importance()函数。
拓展延伸:
-
randomForest包中集合了众多具有强大功能的函数,如tuneRF()函数可以调节mtry值、varImpPlot()函数可以将变量的相对重要性做成图示以方便比较、varUsed可以显示统计随机森林模型中使用到的变量的次数。
-
关于随机森林模型,这里列出些笔者参考的网页及资源,有兴趣的读者可以点击查看。
我爱机器学习网站:http://www.52ml.net/该网站介绍了很多机器学习的和理论,对笔者的帮助很大。
一篇文献:《随机森林理论浅析》,董师师,黄哲学。这篇文献将森林中的几个定理进行了证明,有兴趣的读者可以寻找查看。
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!