通过xgboost查找最佳n_estimators时出错



新手。我正在尝试使用xgboost找到n_estimators的最佳数量。

但是,我得到这个错误。

diabetes.head() #this is a toy dataset in sklearn.datasets.

diabetes.head ()

x=diabetes.drop('y',axis=1).values
y=diabetes.y.values
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=16,test_size=0.25)
import xgboost as xgb
xgbmodel=xgb.XGBRegressor(objective="reg:squarederror",eval_metric='rmse',early_stopping_rounds=10,n_estimators=1000,random_state=16)
xgbmodel.fit(x_train,y_train,eval_set=[x_test,y_test])

我认为问题出在:

eval_set = [x_test y_test]

注:我仔细检查了sklearn的糖尿病数据集可以用于回归。我想知道我的错误是否在eval_metric方法内。

这里完全错误:

ValueError                                Traceback (most recent call last)
~AppDataLocalTemp/ipykernel_10180/532743731.py in <module>
4 import xgboost as xgb
5 xgbmodel=xgb.XGBRegressor(objective="reg:squarederror",eval_metric='rmse',early_stopping_rounds=10,n_estimators=1000,random_state=16)
----> 6 xgbmodel.fit(x_train,y_train,eval_set=[x_test,y_test])
C:ProgramDataAnaconda3libsite-packagesxgboostcore.py in inner_f(*args, **kwargs)
530         for k, arg in zip(sig.parameters, args):
531             kwargs[k] = arg
--> 532         return f(**kwargs)
533 
534     return inner_f
C:ProgramDataAnaconda3libsite-packagesxgboostsklearn.py in fit(self, X, y, sample_weight, base_margin, eval_set, eval_metric, early_stopping_rounds, verbose, xgb_model, sample_weight_eval_set, base_margin_eval_set, feature_weights, callbacks)
929         """
930         evals_result: TrainingCallback.EvalsLog = {}
--> 931         train_dmatrix, evals = _wrap_evaluation_matrices(
932             missing=self.missing,
933             X=X,
C:ProgramDataAnaconda3libsite-packagesxgboostsklearn.py in _wrap_evaluation_matrices(missing, X, y, group, qid, sample_weight, base_margin, feature_weights, eval_set, sample_weight_eval_set, base_margin_eval_set, eval_group, eval_qid, create_dmatrix, enable_categorical)
434 
435         evals = []
--> 436         for i, (valid_X, valid_y) in enumerate(eval_set):
437             # Skip the duplicated entry.
438             if all(
ValueError: too many values to unpack (expected 2)

是的,它必须是一个元组,见下面,您的x_test, y_test应该包含在括号中

eval_setparam = [(self.X_valid, self.y_valid)]

xg_model.fit(self.X_train, self.y_train,  
eval_set = eval_setparam,
verbose=False)

最新更新