Я пытаюсь реализовать перекрестную проверку k-кратных значений с использованием повышения градиента в пакете scikit-learn, как показано ниже:
#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 это (в данном случае) 75% из 4 сгибов тестируются против 75% от оставшегося сгиба? Или что 75% каждого сгиба берется и затем объединяется. Если это так, предположительно, выборка изменяется между итерациями CV?
3) 75% данных используются за раз и проверяются по сравнению с оставшимися 25%, чтобы дать оценку ошибки?
Я понимаю, что это может варьироваться в зависимости от того, какая ошибка меня интересует (например, ошибка OOB против ошибки перекрестного теста). Я заинтересован в последнем. Может ли кто-нибудь пролить свет на то, какой сценарий наиболее вероятен в реализации Sci-Kit Learn?
Большое спасибо заранее!