SciKit-Learn 随机森林子样本大小如何可能等于原始训练数据大小



在SciKit-Learn随机森林分类器的文档中,指出

子样本大小

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

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

我在这里错过了什么吗?

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

在随机林中(请参阅随机森林分类器和 RandomForestRegressor 类),构建融合中的每棵树 从替换抽取的样本(即自举样本)来自 训练集。此外,在拆分节点期间 树的构造,选择的分裂不再是 在所有功能中最好拆分。相反,选择的拆分是 要素的随机子集之间的最佳拆分。由于 这种随机性,森林的偏差通常会略有增加 (关于单个非随机树的偏差)但是,由于 平均,其方差也会减小,通常大于补偿 对于偏差的增加,从而产生一个整体更好的模型。

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

当然,

并非为每棵树选择所有样本。默认情况下,每个样本有 1-((N-1)/N)^N~0.63 的几率被采样为一个特定的树,0.63^2 的几率被采样两次,0.63^3 的几率被采样 3 次......其中 N 是训练集的样本大小。

每个自举

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

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

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

  • 速推 1 : [1,2,4,4,1]

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

    等等。

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

虽然我对python很陌生,但我也有类似的问题。

我试图将随机森林分类器与我的数据相匹配。我将数据拆分为训练和测试:

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]
}

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

最新更新