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