我正在尝试使用scikit-learn包中的梯度提升来实现k折交叉验证,如下所示:
#Defining BRT model
BRTreg = sklearn.ensemble.GradientBoostingRegressor(learning_rate=0.01,
n_estimators=1000,
max_depth=5,
min_weight_fraction_leaf =0.05,
subsample=0.75)
#Including in 5-fold cross validation to examine performance
outputBRT = cross_validate(BRTreg, x_train, y_train.values.ravel(),
cv=5, scoring=['neg_mean_squared_error', 'r2'],
return_estimator=True)
如上所示,我首先定义了一个BRT对象,然后将其包含在交叉验证框架中。我知道可以通过在样本选择中实现随机性来提高性能,因此我将子样本参数设置为0.75(经过一些调整)。我只是对这个随机性如何在交叉验证中实际工作提出了一个简短的问题?有几种可能的情况:
1)对于按顺序生长的每棵树,将对75%的数据进行采样并用于创建树。我知道后续树是使用先前树的残差来增长的(直到达到指定的节点数),但这是否意味着每棵树使用不同的75%?还是只有最初的树?
2)每次使用75%的数据?这与上面类似,但是在CV框架中,这是否意味着(在这种情况下)测试了4折的75%和其余75%的折纸?或采取每折的75%,然后合并在一起。如果是这种情况,大概样本在CV迭代之间会发生变化吗?
3)每次使用75%的数据,然后对其余25%的数据进行测试以给出误差估计?
我了解这可能会因我感兴趣的错误类型而异(例如,OOB错误与交叉折叠测试错误)。我对后者感兴趣。谁能在sci-kit学习实施中最有可能阐明哪种情况?
非常感谢!