专栏首页新智元【干货】随机森林的Python实现

【干货】随机森林的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)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • AI假脸王生成!新一代GAN攻破几乎所有人脸识别系统,胜率95%

    2015年,现任教皇方济各 (Pope Francis) 访美,他是首次对美国进行正式访问的教皇,还将主持在美国领土上的首次封圣,并在国会发表演讲。时任美国总统...

    新智元
  • 蒙娜丽莎一键“复活”!三星AI Lab:只需一张图片就能合成动画

    是的,《哈利·波特》世界中”会动的画“魔法实现了!来自三星AI中心(Samsung AI Center)和莫斯科斯的Skolkovo 科学技术研究所的一组研究人...

    新智元
  • 【智驾深谈】自动驾驶潜在突破点:传感器与车载集成系统(万字干货)

    作者:黄武陵 【新智元导读】黄武陵从事无人车系统研发、无人车标准评估体系构建、无人车挑战赛等工作多年,每次发表观点都非常详尽,本文从自动驾驶近期热点入手,结合挑...

    新智元
  • 随机森林 – Random forest

    随机森林属于 集成学习 中的 Bagging(Bootstrap AGgregation 的简称) 方法。如果用图来表示他们之间的关系如下:

    easyAI
  • 【干货】机器学习基础算法之随机森林

    【导读】在当今深度学习如此火热的背景下,其他基础的机器学习算法显得黯然失色,但是我们不得不承认深度学习并不能完全取代其他机器学习算法,诸如随机森林之类的算法凭借...

    WZEARW
  • 随机森林算法

    随机森林是一种灵活,易于使用的机器学习算法,即使没有超参数调整,也能在大多数情况下产生出色的结果。它也是最常用的算法之一,因为它简单,并且可以用于分类和回归任务...

    银河1号
  • 随机森林再复习

    这里只是准备简单谈谈基础的内容,主要参考一下别人的文章,对于随机森林与GBDT,有两个地方比较重要,首先是information gain,其次是决策树。这里特...

    云时之间
  • 『互联网架构』软件架构-分布式系列并发编程atomic&collections(31)

    1.CAS指的是现代CPU广泛支持的一种对内存中的共享数据进行操作的一种特殊指令。这个指令会对内存中的共享数据做原子的读写操作。在Java并发应用中通常指Com...

    IT故事会
  • 『互联网架构』软件架构-分布式系列并发编程atomic&collections(31)

    1.CAS指的是现代CPU广泛支持的一种对内存中的共享数据进行操作的一种特殊指令。这个指令会对内存中的共享数据做原子的读写操作。在Java并发应用中通常指Com...

    IT故事会
  • Spring Cloud里的服务提供者如何与注册中心进行通信

    从这张图我们知道,无论是服务提供者还是服务的调用者,他们都需要与Eureka服务器进行通信。他们之间是如何进行消息传递的呢?通过wireshark抓包工具...

    良辰美景TT

扫码关注云+社区

领取腾讯云代金券