集成算法之随机森林

集成算法之随机森林

集成算法之随机森林

集成算法

集成思想:对于比较复杂的任务,综合多人的意见来进行决策会比“一家独大”更好。也就是通过适当的方式集成许多“个体模型”所得到的最终模型要不单独的“个体模型”。

  1. 如何选择、生成“个体模型”
     弱学习模型:决策树,决策树桩
  2. 如何综合多个模型
     将相同类型但训练集不同的弱分类器进行提升
     将相同类型但权重不同的弱分类器进行提升
     将不同类型的弱分类器进行提升

集成框架的两种模式:

第一种:期望各个分类器之间依赖性不强,可以同时进行生成。这种做法称为并行方法,代表为Bagging,适用性更强的拓展便是随机森林。
并行集成方法的重点:如何从总体训练集获得多个不同的子训练集。

第二种:弱学习器之间具有强依赖性,只能序列生产,称为串行方法。代表方法是Boosting,包括Adaboost,GBDT, XGBoost和lightGBM
串行集成方法的重点:如何更新弱分类器的权重(弱分类器的整体“话语权”,以及某一样本的识别效果)

Bagging和随机森林

Bagging是于1996年Breiman提出的,它的思想根源是数理统计学中非常重要的Bootstrap理论。

Bootstrap:“自举”(“自采样”),通过模拟的方法来逼近样本的概率分布。
集成算法之随机森林

如何统计池塘的鱼的数量

方法

  1. 承包鱼塘,不让别人捞鱼(规定总体分布不变)。
  2. 自己捞鱼,捞100条,都打上标签。
  3. 把鱼放回鱼塘,休息一晚(使之混入整个鱼群,确保之后抽样随机)。
  4. 开始捞鱼,每次捞100条,数一下,自己昨天标记的鱼有多少条,占比多少(一次重采样取分布)。
  5. 重复3,4步骤n次,然后对分布结果进行(求均值,方差)。

结果示例

  1. 假设,第一次捕鱼100条,发现里面有标记的鱼12条,记下为12%,放回去;
  2. 再捕鱼100条(假设不放回的捕100条鱼不会改变总体分布),发现标记的为9条,记下9%,放回去;
  3. 重复重复好多次之后,你会发现,每次捕鱼平均在10条左右有标记,所以,我们可以大致推测出鱼塘有1000条左右。

Bootstrap方法

Bootstrap就针对这种情况提出了一个解决方案,通过不断地“自采样”来模拟真实分布成的数据集。具体而言,Bootstrap的做法是:
集成算法之随机森林

Bagging方法

Bagging方法:全称Bootstrap Aggregating
用Bootstrap生成出M个数据集,然后用这M个数据集训练出M个弱分类器,
最终模型即为这M个弱分类器的简单组合。

所谓简单组合就是:
对于分类问题使用投票表决的方法,对于回归问题使用简单的取平均值。

随机森林

随机森林是一种特殊的Bagging算法。

  1. 随机森林算法不仅对样本集进行Bootstrap采样
  2. 每次对node进行划分时(每个决策节点),都从d个特征中随机挑选k个,然后依信息增益从这个k个特征中选出最好的特征并确定划分标准
  3. 每棵树都不进行后剪枝
  4. 最终随机森林的预测结果即为所有树模型预测结果的的简单组合(分类:投票决定)

如果k=d,那随机森林和Bagging算法相同
如果k=1,那就是完全随机
一般来说,k的取值可尝试三个经验数:k=d、k=log2(d)或者k=sqrt(d)

随机森林的算法实现

修改CART的决策点生成函数,为两层循环:

外层是对特征索引进行循环从特征索引列表中随机抽取n_features个

  内层是对该特征的二分标准进行循环
    对样本集进行划分,并求出基尼系数
    通过比较得到最优

二分标准的选取有三种常用的方法,此处采用最简单的方法将特征空间的每个值作为二分标准。

sklearn中随机森林参数简介

集成算法之随机森林
参考链接为:https://blog.****.net/weixin_43178406/article/details/86653527