Python XGBClassifier在我通过早期\u停止\u轮时失败
我以以下方式使用Python XGBClassifier在我通过早期\u停止\u轮时失败,python,jupyter,xgboost,Python,Jupyter,Xgboost,我以以下方式使用xgboost: from xgboost import XGBClassifier clf = XGBClassifier() clf = clf.fit(df_train, df_train_labels, verbose=True) 这很有效。但是,如果我添加一个early\u stopping\u rounds参数,如下所示: clf = clf.fit(df_train, df_train_labels, early_stopping_rounds=10, verbo
xgboost
:
from xgboost import XGBClassifier
clf = XGBClassifier()
clf = clf.fit(df_train, df_train_labels, verbose=True)
这很有效。但是,如果我添加一个early\u stopping\u rounds
参数,如下所示:
clf = clf.fit(df_train, df_train_labels, early_stopping_rounds=10, verbose=True)
我得到这个错误:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-16-786925228ae5> in <module>()
9
10
---> 11 clf = clf.fit(df_train, df_train_labels, early_stopping_rounds=10, verbose=True)
12 print("after fit")
13 prediction = np.exp(clf.predict(df_test))
~/anaconda3/envs/python3/lib/python3.6/site-packages/xgboost/sklearn.py in fit(self, X, y, sample_weight, eval_set, eval_metric, early_stopping_rounds, verbose)
443 early_stopping_rounds=early_stopping_rounds,
444 evals_result=evals_result, obj=obj, feval=feval,
--> 445 verbose_eval=verbose)
446
447 self.objective = xgb_options["objective"]
~/anaconda3/envs/python3/lib/python3.6/site-packages/xgboost/training.py in train(params, dtrain, num_boost_round, evals, obj, feval, maximize, early_stopping_rounds, evals_result, verbose_eval, learning_rates, xgb_model, callbacks)
203 evals=evals,
204 obj=obj, feval=feval,
--> 205 xgb_model=xgb_model, callbacks=callbacks)
206
207
~/anaconda3/envs/python3/lib/python3.6/site-packages/xgboost/training.py in _train_internal(params, dtrain, num_boost_round, evals, obj, feval, xgb_model, callbacks)
99 end_iteration=num_boost_round,
100 rank=rank,
--> 101 evaluation_result_list=evaluation_result_list))
102 except EarlyStopException:
103 break
~/anaconda3/envs/python3/lib/python3.6/site-packages/xgboost/callback.py in callback(env)
190 def callback(env):
191 """internal function"""
--> 192 score = env.evaluation_result_list[-1][1]
193 if len(state) == 0:
194 init(env)
IndexError: list index out of range
---------------------------------------------------------------------------
索引器回溯(最后一次最近调用)
在()
9
10
--->11 clf=clf.fit(df\U系列、df\U系列标签、提前停止\U轮=10、详细=真)
12打印(“拟合后”)
13预测=np.exp(clf.predict(df_测试))
~/anaconda3/envs/python3/lib/python3.6/site-packages/xgboost/sklearn.py适合(自身、X、y、样本重量、评估集、评估度量、提前停止、详细)
443早停轮=早停轮,
444评估结果=评估结果,obj=obj,feval=feval,
-->445详细(评估=详细)
446
447 self.objective=xgb_选项[“objective”]
~/anaconda3/envs/python3/lib/python3.6/site-packages/xgboost/training.py in train(参数、数据训练、数值推进、评估、对象、feval、最大化、提前停止、评估结果、详细评估、学习率、xgb模型、回调)
203 evals=evals,
204 obj=obj,feval=feval,
-->205 xgb_模型=xgb_模型,回调=回调)
206
207
~/anaconda3/envs/python3/lib/python3.6/site-packages/xgboost/training.py in\u train\u internal(参数、数据训练、数值推进、评估、obj、feval、xgb\u模型、回调)
99 end_迭代=num_boost_轮,
100秩=秩,
-->101评估结果列表=评估结果列表)
102除早期例外:
103休息
回调(env)中的~/anaconda3/envs/python3/lib/python3.6/site-packages/xgboost/callback.py
190 def回调(环境):
191“内部功能”
-->192分=环境评估结果列表[-1][1]
193如果len(状态)==0:
194初始(环境)
索引器:列表索引超出范围
我查了一下,发现fit
方法可以传递许多参数,所以我不认为我添加提前停止轮数的事实会导致问题
知道该错误的原因吗?该错误的原因是您没有指定评估集,xgboost使用该评估集来确定何时停止以便提前停止
有关拟合方法,请参见文档
eval_集(列表,可选)–用作提前停止验证集的(X,y)元组对列表
例如,如果您已将数据拆分为训练集和测试集,您将使用以下内容:
eval_set = [(X_test, y_test)]
clf = clf.fit(df_train,
df_train_labels,
eval_set=eval_set,
early_stopping_rounds=10,
verbose=True)