随机森林及其Python实现,用随机森林进行特征选择

集体智慧

综合若干错误的预测结果,可以得到正确的预测结果吗?答案是可以!这好像违背直觉,但优秀的预测模型可以做到,甚至理应如此。

这基于以下事实:虽然错误的预测结果可能有很多,但是正确的只有一个。通过组合具有不同优缺点的模型,往往能强化正确的预测结果,同时使错误相互抵消。这种通过组合不同模型来提高预测准确度的方法被称为集成方法。

前面学习了决策树,本文主要讲的随机森林就是基于决策树的一种集成方法。为了说明随机森林为何优于决策树,我们首先生成1000棵决策树,用来预测可能发生在美国旧金山的犯罪行为,然后基于这1000棵决策树生成一个随机森林,并比较二者的预测准确度。

示例:预测犯罪行为

我们采用的数据来自于旧金山警察局,这些公开的数据反映了2014~2016年在旧金山发生的犯罪事件,包括地点、日期和严重程度。初步研究显示,这些犯罪事件多发生在天气炎热时,所以我们还获取了同一时间段的天气记录,包括每日气温和降水量。

假设旧金山警察局的警员和资源配置有限,无法派出足够的警力在所有可能发生犯罪行为的片区巡逻。所以,我们要创建一个预测模型,找到每天最有可能发生暴力犯罪行为的前30%个片区,并优先向这些片区派遣巡逻的警员。

初步分析显示,犯罪事件主要发生在旧金山东北部,如图1中的方框所示。因此,我们把方框内的区域分得更小(260米×220米),以做进一步分析。

图1 旧金山犯罪频率热图:很低(灰色)、低(黄色)、中(橙色)、高(红色)

为了预测犯罪事件可能发生的时间和地点,先根据犯罪事件数据和天气数据生成1000棵决策树,然后把它们组合起来,形成随机森林。我们使用2014~2015年的数据训练预测模型,并且使用2016年(从1月到8月)的数据测试模型的准确度。

那么,这个随机森林模型的预测效果如何呢?

经过测试,我们发现随机森林模型成功预测出72%的暴力犯罪事件。相比之下,1000棵决策树的平均预测准确度只有67%,如图2所示。

图2 预测准确度直方图:1000棵决策树的平均预测准确度是67%,而由这1000棵决策树组成的随机森林则能达到72%的预测准确度

在这1000棵决策树中,仅有12棵树的预测结果比随机森林准确。根据这一点,我们确信随机森林的预测结果要优于单棵决策树。

图3显示了随机森林模型连续4天的预测结果。根据预测,警察局应该往红色区域增派警力,派往灰色区域的则不必太多。在犯罪频发的片区增加巡逻力度似乎是理所当然的做法,但是模型还进一步指出了在非红色区域内发生犯罪事件的可能性。以第4天的预测结果为例,模型准确预测了在灰色区域内发生的一起犯罪事件,而此前3天此处并未出现过暴力犯罪事件。

图3 随机森林模型连续4天的预测结果。图中,圆圈表示模型认为可能发生暴力犯罪事件;实心圆表示预测准确;叉号表示实际发生过暴力犯罪事件,但模型未能预测

随机森林模型还能让我们看到哪些变量对预测准确度的影响最大。从图4可以看出,影响大的变量有犯罪频率、地点、哪月哪日以及当日气温。

图4 对随机森林模型的预测准确度影响大的的变量

上文让我们见识了随机森林在预测如犯罪行为这类复杂现象时表现出的强大优势。那么,随机森林的原理是什么呢?

集成模型

随机森林是决策树的集成模型。集成模型是通过组合许多模型的预测结果得到的预测模型。在组合模型时,既可以遵循少数服从多数的原则,也可以取平均值。

从图5可以看到,相比于子模型,集成模型的预测准确度更高(本例遵循少数服从多数的原则)。这是因为准确的预测模型会彼此强化,错误的则会彼此抵消。为了达到这种效果,集成模型的子模型一定不能犯同类错误。换言之,子模型必须是不相关的。

图5 对10个输出做或蓝或红的预测,最后一个是集成模型,由前3个模型组成。正确结果应该是10个输出全为蓝色。相比之下,集成模型的预测准确度最高

有一种系统化方法可以用来生成不相关的决策树,这种方法叫作自助聚集法。

未经允许不得转载!随机森林及其Python实现,用随机森林进行特征选择