Python: ValueError слишком много значений для распаковки (ожидается 2)
Я пытаюсь найти лучшую модель xgboost через GridSearchCV и в качестве перекрестной проверки хочу использовать апрельские целевые данные. Вот код:
x_train.head()
y_train.head()
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.metrics import make_scorer
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import TimeSeriesSplit
import xgboost as xg
xgb_parameters={'max_depth':[3,5,7,9],'min_child_weight':[1,3,5]}
xgb=xg.XGBRegressor(learning_rate=0.1, n_estimators=100,max_depth=5, min_child_weight=1, gamma=0, subsample=0.8, colsample_bytree=0.8)
model=GridSearchCV(n_jobs=2,estimator=xgb,param_grid=xgb_parameters,cv=train_test_split(x_train,y_train,test_size=len(y_train['2016-04':'2016-04']), random_state=42, shuffle=False),scoring=my_func)
model.fit(x_train,y_train)
model.grid_scores_
model.best_params_
Но у меня есть эта ошибка, пока я тренирую свою модель.
Кто-нибудь может мне помочь с этим, пожалуйста? Или кто-то может подсказать, как я могу разделить несмешанные данные для обучения / тестирования для проверки модели в прошлом месяце?
Спасибо за помощь
1 ответ
Основной причиной этой ошибки является способ, которым вы использовали cv
параметр в GridSearchCV()
вызов:
cv=train_test_split(x_train,y_train,test_size=len(y_train['2016-04':'2016-04'])
Вот выдержка из строки документации для cv
параметр:
cv : int, cross-validation generator or an iterable, optional
Determines the cross-validation splitting strategy.
Possible inputs for cv are:
- None, to use the default 3-fold cross validation,
- integer, to specify the number of folds in a `(Stratified)KFold`,
- An object to be used as a cross-validation generator.
- An iterable yielding train, test splits.
For integer/None inputs, if the estimator is a classifier and ``y`` is
either binary or multiclass, :class:`StratifiedKFold` is used. In all
other cases, :class:`KFold` is used.
Refer :ref:`User Guide <cross_validation>` for the various
cross-validation strategies that can be used here.
тем не мение train_test_split(x_train,y_train)
возвращает 4 массива:
X_train, X_test, y_train, y_test
это вызывает: ValueError too many values to unpack (expected 2)
ошибка.
В качестве обходного пути вы можете указать один из параметров, указанных выше (строка документации для cv
параметр)...