【理论篇】Bagging 集成与随机森林

集成算法:Bagging 模型

集成算法 Ensemble Learning 的思想通俗解释就是训练一个模型不可靠,那可以训练出一批独立的模型,多个模型一起说了算。通过这样的方式让机器学习的效果更好,这也是为什么我们在竞赛中看到集成算法被普遍使用的原因。

集成算法的集成思想多种多样,今天小鱼和大家学习其中的一种集成思想 - Bagging 模型。Bagging 全称为 Bootstrap ggregation,简单来说就是并行训练多个模型取平均:

Bagging 最典型的代表就是随机森林,所谓森林,就是很多棵决策树组成的决策树森林。随机森林的重点在随机:

  • 数据随机采样
  • 特征选择随机

比如,我们可以指定构建没棵决策树时,有放回的随机选择其中的 60% 的样本,这样构建出来的决策树就是随机的,树与树之间相互独立,各不相同。同理,我们也可以指定有放回地选择 80% 的特征来构建决策树。

注:数据随机采样与特征随机采样相关的参数为 bootstrap、max_samples、max_features、random_stateAPI 文档 https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html#sklearn.ensemble.RandomForestRegressor

Bagging 模型代表 - 随机森林

下面是随机森林分类的示意图:

同一个样本,经过不同的决策树分类之后,得到 n 个预测结果,而最终的结果取决于众数。例如:80%的决策数判断属于 A 类别,20%的决策数判断属于 B 类别,则最终属于 A 类别。

注:解决回归问题时,则可以取所有预测结果的平均值。

由于在构造决策树时,样本的选择以及特征的选取均具有随机性,因此,没棵树基本上都会不一样,最终结果也会不一样。

这样,我们在训练随机森林的模型时,就可以在服务器并行地去训练决策树了,从而缩短训练的时间。

此外,进行随机最大的好处还在于保证模型的泛化能力:

上述第一张示意图为单棵决策树的分类效果:单个树模型切了几刀就完成了数据的划分,其中树的深度越大,切分的刀数就越多。

第二张示意图为随机森林的分类效果:把单个树的切分组合到一起,整个切分变得更碎了,泛化能力也就越强。对于随机森林,如果树都一样,那就没意义了。

说到泛化能力,KNN 模型就不太适合 Bagging

这是因为 KNN 很难去随机,从而让泛化能力变强!

最后,我们再来看一下树模型的个数,是不是越多越好呢?

理论上讲,树越多效果越好,但实际上基本超过一定数量之后,最终结果将会在一定范围内上下浮动。一般会使用100~200棵树,可以使用交叉验证确定树的个数。

随机森林优势总结

1、随机森林可以处理很高维度的数据集(即特征非常多),并不需要我们自己去做特征选择。

这一点很好理解,因为在随机构造决策树的时候,我们可以指定 max_features 参数来随机选择指定数量的特征,并且最终模型还会为我们返回特征以及特征的重要性。

关于特征的重要性,这里做个简单的解释:

比如使用特征 A、B、C、D 训练好了模型 M1,预测得分为 S1;接下来将特征 A 进行人为破坏,将 A 列全部使用随机的垃圾值赋值,这时候再进行模型的训练,得到 M2,M2的预测得分为 S2。

如果最后我们发现,S1 和 S2 两个得分非常相近,甚至接近相等,那就说明特征 A 的存在感很弱,自然就是不重要的特征啦~

2、在训练完模型后,随机森林可以给出我们哪些特征比较重要

在连载的上一篇文章,我们得到了加利福尼亚房屋价值预测的特征重要性排名:

>> s = pd.Series(rfr.feature_importances_, index=housing.feature_names).sort_values(ascending=False)
>> s
MedInc        0.539850
AveOccup      0.135402
Latitude      0.083998
Longitude     0.082741
HouseAge      0.054384
AveRooms      0.045247
Population    0.030297
AveBedrms     0.028082
dtype: float64

这样可能不够直观,可以进行一下可视化展示:

import seaborn as sns
sns.barplot(x=s.values, y=s.index)

绘制结果:

我们发现,在加利福尼亚房屋价值预测任务中,收入是非常重要的特征,其次是家庭成员的人数,接下来是经纬度,共同觉得房屋的位置。

这一点也是随机森林非常友好的地方,可以让我们对特征的重要性一目了然。对于神经网络这类的算法来讲,我们只能由输入得出一个输出,中间过程则是一个黑盒。

3、容易做成并行方法,速度比较快

森林中的决策树具有随机性(特征随机、样本随机),互不影响,因此可以并行训练,提高效率。

4、可以进行可视化展示,便于分析

借助 Graphviz 工具,我们可以将决策树绘制出来,方便对决策树的判断过程分析。

你可能感兴趣的:(【理论篇】Bagging 集成与随机森林)