В настоящее время я работаю над In Class Competition в Kaggle.Я читал об официальной справке по Python API, и меня немного смущают два вида интерфейсов, особенно в поиске по сетке, перекрестной проверке и ранней остановке.
В XGBoost API я могу использовать xgb.cv()
, который разделяет набор данных которого на две части для перекрестной проверки, чтобы настроить хорошие гиперпараметры, а затем получить best_iteration
.Таким образом, я могу настроить num_boost_round
на best_iteration
.Чтобы максимально использовать данные, я снова тренирую весь набор данных с хорошо настроенными гиперпараметрами, а затем использую его для классификации.Единственный недостаток - я сам должен написать код GridSearch
.
ВНИМАНИЕ: этот набор перекрестной проверки изменяется при каждом сворачивании, поэтому результат обработки не будет иметь какой-либо конкретной тенденции к какой-либо части данных.
Но в sklearn кажется, что я не могу получить best_iteration
, используя clf.fit()
, как в модели xgb.Действительно, метод fit()
имеет early_stopping_rounds
и eval_set
для реализации части ранней остановки.Многие люди реализуют такой код:
X_train, X_test, y_train, y_test = train_test_split(train, target_label, test_size=0.2, random_state=0)
clf = GridSearchCV(xgb_model, para_grid, scoring='roc_auc', cv=5, \
verbose=True, refit=True, return_train_score=False)
clf.fit(X_train, y_train, early_stopping_rounds=30, eval_set=[(X_test, y_test)])
....
clf.predict(something)
Но проблема в том, что я сначала разбил данные на две части.Набор перекрестной проверки не будет изменяться при каждом сгибе.Поэтому, возможно, результат будет иметь тенденцию к этой случайной части всего набора данных.Та же проблема возникает и при поиске по сетке, конечный параметр может подходить больше X_test
и y_test
.
Мне нравится GridSearchCV
в sklearn, но я также хочу, чтобы eval_set
менялся при каждом фолде, как и xgb.cv
.Я считаю, что он может использовать данные, не допуская переоснащения.
Как мне поступить?Я подумал о двух способах:
- , используя XGB API, и сам написать GridSearch.
- , используя sklean API, и вручную изменять
eval_set
при каждом сгибе.Есть ли более удобные методы?