【干货】随机森林的Python实现

【新智元导读】在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。随机森林几乎是任何预测类问题(甚至非线性问题)的首选。本文介绍了随机森林的原理、用途,以及用 Python 实现随机森林的方法。

随机森林是一种高度通用的机器学习方法,广泛应用于市场营销、医疗保健、保险等各领域。它可用于模拟市场营销对客户获取、保持和流失的影响,或用于预测患者的患病风险和感病性。

随机森林能够进行回归和分类。它能处理大量的特征,有助于预估哪些变量在建模的底层数据中很重要。本文介绍了随机森林的原理、用途,以及用 Python 实现随机森林的方法。

什么是随机森林?

随机森林几乎是任何预测类问题(甚至非线性问题)的首选。随机森林是相对较新的机器学习策略(出自90年代的贝尔实验室),可应用于几乎所用问题。它隶属于更大的一类机器学习算法,叫做“集成方法”(ensemble methods)

  • 集成学习(Ensemble Learning)

集成学习是解决单个预测问题的数个模型的组合。集成学习通过生成多个独立学习并进行预测的分类器/模型生效。然后这些预测结果被组合成一个预测,这个预测的准确率应当等于或大于任一分类器做出的预测。

随机森林是集成学习中非常有效的一种,因为它依赖于许多决策树的集合。更多关于Python 集成学习的内容可参考:http://scikit-learn.org/dev/modules/ensemble.html

  • 随机决策树(Randomized Decision Trees)

我们已经知道随机森林是其他模型的聚合,那么它聚合的是哪些模型呢?正如它的名字所示,随机森林是分类(或回归)决策树的聚合。决策树由一系列能够用于对一个数据集的观察进行分类的决策组成(参考:决策树的可视化演示)。

  • 随机森林(Random Forest)

诱发随机森林的算法将自动创建许多随机决策树。由于这些树是随机生成的,它们大多数(大概99.9%)不会对学习分类/回归问题有影响。

如果观察到长度为45,眼睛是蓝色,并且有两条腿,那么它将被归类为红色。

  • Arboreal Voting

那么10000个(多半)糟糕的模型有什么好处?好吧,他们确实没什么帮助。但有帮助的是这么多的模型中也会产生少数几个非常好的决策树。

在进行预测时,新观察到的特征沿着每棵决策树的分支往下走,并被赋予一个预测值/标签(predicted value/label)。当森林中的每棵树都得到它的预测值/标签,这些预测就会被统计,所有树的投票被返回作为最终的预测结果。

简单地说,99.9%的不相关的树做出了大部分的预测,但它们彼此抵消。少数好的决策树做出了准确度高的预测,它们处于“噪声”的顶端,使得随机森林最终能产生较好的预测结果。

为什么使用随机森林?

  • 因为它简单。

随机森林就像学习方法中的瑞士军刀,任何东西它都可以给你修好。随机森林尤其擅长预估推断变换(inferred transformations),因此,它不需要像 SVM 那样进行很多调试。

  • 有关变换的一个例子

随机森林能够在没有精心设计的数据变换(data transformations)的环境下学习。以 f (x) = log(x) 函数为例。

我们在Yhat自己的为数据分析而建的交互环境 Rodeo 中编写 Python 代码。可在这里下载Rodeo:https://www.yhat.com/products/rodeo。

首先,制造一些不真实数据(fake data)来加入一点噪音。

用 Rodeo 的话,应该能看到这样的情形:

放大看这张图:

如果我们尝试建一个基本线性模型来用 x 预测 y,我们需要作一条直线来平分 log (x)。但如果我们使用随机森林,能得到一条接近 log (x) 的曲线,看起来更像实际的函数。

你可能认为随机森林对 log (x) 函数过度拟合了。不管怎么说,我觉得它很好地说明了随机森林不受线性约束的限制。

用途

  • 特征选择

随机森林的最佳使用实例之一是特征选择(feature selection)。尝试许多决策树变量(variations)带来的副产品之一是,你可以检验每棵树中哪个变量最相关/无关。

当一棵树使用某个变量,而另一棵不用这个时,你可以比较包含/排除该变量时丢失或得到的值。在下面的例子中,我们试图找出哪些变量在将酒分类为红酒和白酒的任务中最重要。

  • 分类

随机森林也很擅长分类任务。它能用于对具有多个可能值的类别进行预测,也能被校准来输出概率。需要注意的是过拟合(overfitting)。随机森林可能容易过拟合,尤其是使用相对小型的数据集时。如果你的模型在我们的测试集中表现“太好”,就应该怀疑过拟合了。

引起过拟合的原因之一是在模型中只使用真正相关的特征。虽然不是固定的方式,但使用一些特征选择技术(例如前文提到的)可以避免过拟合。

  • 回归

我发现随机森林——不像其他算法——在学习分类变量或分类变量和真实变量的结合时真的很有效。高基数的分类变量处理起来很棘手,因此随机森林会大有帮助。

一个 Python 实现的例子

Scikit-Learn 对开始使用随机森林非常好。Scikit-Learn API 在各种算法中都非常一致,因此可以很容易地在模型之间进行比较和切换。多数时候我会从简单的地方开始,再转移到随机森林。

随机森林在 scikit-learn 中实现得最好的特征之一是 n_jobs 参数。它会根据你想要使用的核的数量自动并行拟合随机森林。这里有一个关于如何在 20 节点的 EC2 簇中训练随机森林的演示:https://vimeo.com/63269736。

按照如上代码,你应该能看到如下的结果。由于我们使用随机选择的数据,因此确切的值每次都会有不同。

总结

随机森林非常强大而且相当容易使用。与任何模型训练一样,要警惕过拟合。

编译来源:http://blog.yhat.com/posts/python-random-forest.html

原文发布于微信公众号 - 新智元(AI_era)

原文发表时间:2016-11-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术随笔

计算机视觉中 RNN 应用于目标检测

5126
来自专栏智能算法

卷积神经网络工作原理直观解释

其实我们在做线性回归也好,分类(逻辑斯蒂回归)也好,本质上来讲,就是把数据进行映射,要么映射到一个多个离散的标签上,或者是连续的空间里面,一般简单的数据而言,我...

3405
来自专栏人工智能头条

CMU最新视觉特征自监督学习模型——TextTopicNet

作者 | Yash Patel,Lluis Gomez,Raul Gomez,Marcal Rusinol,Dimosthenis Karatzas, C.V....

1911
来自专栏智能算法

直观理解深度学习的卷积操作,超赞!

近几年随着功能强大的深度学习框架的出现,在深度学习模型中搭建卷积神经网络变得十分容易,甚至只需要一行代码就可以完成。

1002
来自专栏AI研习社

随机加权平均 -- 在深度学习中获得最优结果的新方法

在这篇文章中,我将讨论最近两篇有趣的论文。它们提供了一种简单的方式,通过使用一种巧妙的集成方法提升神经网络的性能。

2402
来自专栏AI研习社

图像分类比赛中,你可以用如下方案举一反三

雷锋网 AI 研习社按,在本文中,作者将向大家介绍其在 Kaggle 植物幼苗分类大赛(https://www.kaggle.com/c/plant-seedl...

1663
来自专栏ATYUN订阅号

利用TensorFlow生成图像标题

图像标题生成器模型结合了计算机视觉和机器翻译的最新进展,利用神经网络生成现实的 图像标题。神经图像标题模型被训练,以最大限度地产生给定输入图像的字幕的可能性。并...

6855
来自专栏null的专栏

可扩展机器学习——线性回归(linear Regression)

注:这是一份学习笔记,记录的是参考文献中的可扩展机器学习的一些内容,英文的PPT可见参考文献的链接。这个只是自己的学习笔记,对原来教程中的内容进行了梳理,有些图...

3365
来自专栏机器之心

学界 | CIFAR-10+ImageNet=?CINIC-10!

CINIC-10 可以直接替代 CIFAR-10。由于 CIFAR-10 太小(太简单),而 ImageNet 又太大(太难),所以我们将 CINIC-10 编...

1213
来自专栏人工智能LeadAI

计算机视觉中 RNN 应用于目标检测

深度学习在计算机视觉领域取得的巨大的发展,最近几年CNN一直是目前主流模型所采取的架构。最近半年RNN/LSTM应用在识别领域逐渐成为一种潮流,RNN在获取目标...

6085

扫码关注云+社区

领取腾讯云代金券