前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【干货】随机森林的Python实现

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

作者头像
新智元
发布2018-03-26 15:00:04
1.7K0
发布2018-03-26 15:00:04
举报
文章被收录于专栏:新智元新智元

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 新智元 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档