6

在 SciKit-Learn Random Forest classifier 的文档中,指出

子样本大小始终与原始输入样本大小相同,但如果 bootstrap=True(默认),则使用替换绘制样本。

我不明白的是,如果样本量总是与输入样本量相同,那么我们怎么能谈论随机选择。这里没有选择,因为我们在每次训练中使用所有(自然是相同的)样本。

我在这里错过了什么吗?

4

4 回答 4

6

我相信这部分文档回答了你的问题

在随机森林中(参见 RandomForestClassifier 和 RandomForestRegressor 类),集成中的每棵树都是从训练集中的替换样本(即引导样本)中构建的。此外,在树的构建过程中拆分节点时,选择的拆分不再是所有特征中最好的拆分。相反,选择的分割是特征的随机子集之间的最佳分割。由于这种随机性,森林的偏差通常会略微增加(相对于单个非随机树的偏差),但由于平均化,它的方差也会降低,通常超过补偿偏差的增加,因此产生了一个整体更好的模型。

理解的关键在于“用替换抽取的样本”。这意味着可以多次绘制每个实例。这反过来意味着,训练集中的某些实例多次出现,而有些则根本不存在(袋外)。对于不同的树,这些是不同的

于 2016-03-06T17:23:02.447 回答
2

当然,并不是每棵树都选择了所有样本。默认情况下,每个样本有 1-((N-1)/N)^N~0.63 的机会被一棵特定的树抽样,0.63^2 被抽样两次,0.63^3 被抽样 3 次......其中 N 是训练集的样本大小。

每个 bootstrap 样本选择在平均上与其他 bootstrap 有足够的不同,因此决策树有足够的不同,因此树的平均预测对每个树模型的方差是稳健的。如果样本大小可以增加到训练集大小的 5 倍以上,那么每个观察结果可能会在每棵树中出现 3-7 次,并且整体集成预测性能会受到影响。

于 2016-03-07T15:46:46.053 回答
1

@communitywiki 的答案错过了这个问题:“我不明白的是,如果样本量总是与输入样本量相同,那么我们怎么能谈论随机选择”:这与自举的性质有关本身。Bootstrapping 包括在不同时间重复相同的值,但仍具有与原始数据相同的样本大小:示例(由Bootstrapping/Approach 的wiki页面提供):

  • 原始样本:[1,2,3,4,5]

  • Boostrap 1:[1,2,4,4,1]

  • 引导程序 2:[1,1,3,3,5]

    等等。

这就是随机选择发生的方式,并且样本量仍然可以保持不变。

于 2019-06-27T12:30:15.663 回答
0

虽然我对 python 很陌生,但我遇到了类似的问题。

我试图将 RandomForestClassifier 拟合到我的数据中。我将数据分成训练和测试:

train_x, test_x, train_y, test_y = train_test_split(X, Y, test_size=0.2, random_state=0)

DF 的长度是相同的,但在我预测模型之后:

rfc_pred = rf_mod.predict(test_x)

结果有不同的长度。

为了解决这个问题,我将引导选项设置为 false:

param_grid = {
    'bootstrap': [False],
    'max_depth': [110, 150, 200],
    'max_features': [3, 5],
    'min_samples_leaf': [1, 3],
    'min_samples_split': [6, 8],
    'n_estimators': [100, 200]
}

并重新运行该过程。它工作得很好,我可以计算我的混淆矩阵。但我想了解如何使用引导程序并生成具有相同长度的预测数据。

于 2022-01-31T13:02:25.563 回答