【干货】随机森林的Python实现
1 新智元编译
来源:yhat.com
作者: yhat
译者:刘小芹
新智元启动新一轮大招聘 :COO、执行总编、主编、高级编译、主笔、运营总监、客户经理、咨询总监、行政助理等 9 大岗位全面开放。
简历投递:j obs@aiera.com.cn
HR 微信: 13552313024
新智元为COO和执行总编提供最高超百万的年薪激励;为骨干员工提供最完整的培训体系、 高于业界平均水平的工资和奖金。
加盟新智元,与人工智能业界领袖携手改变世界。
【新智元导读】 在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。 随机森林几乎是任何预测类问题(甚至非线性问题)的首选。 本文介绍了随机森林的原理、用途,以及用 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
新智元启动新一轮大招聘 :COO、执行总编、主编、高级编译、主笔、运营总监、客户经理、咨询总监、行政助理等 9 大岗位全面开放。
简历投递:j obs@aiera.com.cn
HR 微信: 13552313024
新智元为COO和执行总编提供最高超百万的年薪激励;为骨干员工提供最完整的培训体系、 高于业界平均水平的工资和奖金。
加盟新智元,与人工智能业界领袖携手改变世界。
点击阅读原文,查看新智元招聘信息。