sklearn中随机森林与Bagging之间的区别

机器算法验证 Python 机器学习 scikit-学习
2022-03-13 07:32:02

我知道随机森林使用 Bagging,但是集成如何在sklearnBagging 与随机森林中给出单一预测?另外,我不明白为什么在 Bagging 中不需要选择树估计器,而在 RF 中不需要?除此之外,其他步骤是否相同?sklearnBagging 与随机森林的主要实现差异是什么?

如果您有“像我 5 岁一样解释”的简单示例,请使用sklearn请加分。

2个回答

我们可以使用“Iris”数据集来演示Bagging随机森林

首先,让我们看一下Iris数据集:

  • 150个鲜花样品
  • y
  • 4 个连续特征xj

做例子 sklearn,我们需要导入通常的嫌疑人......

from sklearn.datasets import load_iris
from sklearn.ensemble import BaggingClassifier, RandomForestClassifier
import pandas as pd


iris = load_iris()
y= pd.Series(iris.target)

然后我们指定我们将使用两个 ML 模型中的哪一个:

# create Ensemble object/instance
model = BaggingClassifier(base_estimator=None)
model = RandomForestClassifier() 

无论我们使用哪两个,我们的sklearn步骤都是一样的:

# Train the model using the training sets 
model.fit(X_train, y_train)

# OUTPUT
## check score
model.score(X_train, y_train)

## Predict on test set
predicted= model.predict(X_test)


为了直观全面地展示 Bagging 投票,WLOG 我们有一个简化版的“Iris”数据集有:

  • 7 次观察
  • 4 个特征xj
  • 3 种不同的可能物种作为标签y
    • 而不是他们的拉丁名字,为了简单起见,我们将这 3 个不同的物种表示为
      • 物种A)
      • 物种B)
      • 物种C)
    • 因为sklearn总是需要数字输入,所以它们的sklearn数字标签=[0,1,2]
      • 物种A)0
      • 物种B)1
      • 物种C)2


for我们的 7 观察简化“虹膜”训练数据集,我们:

  1. 5 个 Bootstrap 样本

    • 每个 Bootstrap 样本的基数为 7,从我们简化的“虹膜”数据集中选择替换

      • 即,每个引导样本有 7 个可能重复的观察值

         

然后在第 2 步中,我们训练

  • 在每个 Bootstrap 样本上训练一个不同的决策树分类器

    • 每棵树都适合其自己独特的 7 个观测值的 Bootstrap 样本
  • 在每个 Bootstrap 样本上训练一个不同的随机森林决策树分类器

    • 将每个随机森林分类器设置为使用4 个特征中的 3 个来决定其树节点xj
      • 选择的 3 个特征是4 个可能特征的随机子集xj
        • 子集是在没有替换的情况下绘制的)

所以我们最终得到了一个由总共 5 个决策树分类器组成的 Bootstrap-samples-aggregated 集合,这些分类器在 Bagging 的情况下是完全增长的,或者在随机森林的情况下是使用特征子集增长的。

  1. 使用 Bootstrap-samples-aggregated 集成元估计器 预测新数据标签
    • 随机森林和其他 Bagging 元估计器使用所有5 棵决策树来预测标签y
    • 所有 5 棵树都进行预测,RF 元估计器平均它们各自的预测
      • (参见下面的示例计算)


for一个测试集X_test由一朵以前看不见的花组成:

if5 个单独的子估计树输出是:(A,B,C) predict_probasklearn

  1. (0.75,0.20,0.05)
  2. (0.60,0.35,0.05)
  3. (0.55,0.40,0.05)
  4. (0.35,0.60,0.05)
  5. (0.50,0.45,0.05)

然后任何一个 Bootstrap-samples-aggregating meta-estimators' Test-set predict = A)on this specific flower-sample

  • 即,我们新的测试集观察将被A)Bagging 或随机森林元估计器分类为物种
  • 因为 3 个类别的平均预测概率中最高的是 SpeciesA)=3=bootstraps5bootstraps=0.55
  • 因为所有sklearn的 Bootstrap-samples-aggregating分类元估计器都有一种predict方法,其平均过程returns是具有最高平均预测概率的类

(并且还能够使用我在互联网上找到的图像

这个(荒谬的)7数据点“鸢尾花”数据集仅用于解释目的

不同之处在于两者的节点级别拆分。因此,使用决策树的 Bagging 算法将使用所有特征来决定最佳分割。另一方面,在随机森林中构建的树使用每个节点的随机特征子集来决定最佳分割。