Ähnlich wie How to pass a parameter to only one part of a pipeline object in scikit learn? Ich möchte Parameter an nur einen Teil einer Pipeline übergeben. Normalerweise sollte es funktionieren wie:Sklearn pass passen Parameter zu xgboost in Pipeline
estimator = XGBClassifier()
pipeline = Pipeline([
('clf', estimator)
])
und ausgeführt wie
pipeline.fit(X_train, y_train, clf__early_stopping_rounds=20)
aber es funktioniert nicht mit:
/usr/local/lib/python3.5/site-packages/sklearn/pipeline.py in fit(self, X, y, **fit_params)
114 """
115 Xt, yt, fit_params = self._pre_transform(X, y, **fit_params)
--> 116 self.steps[-1][-1].fit(Xt, yt, **fit_params)
117 return self
118
/usr/local/lib/python3.5/site-packages/xgboost-0.6-py3.5.egg/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"]
/usr/local/lib/python3.5/site-packages/xgboost-0.6-py3.5.egg/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)
201 evals=evals,
202 obj=obj, feval=feval,
--> 203 xgb_model=xgb_model, callbacks=callbacks)
204
205
/usr/local/lib/python3.5/site-packages/xgboost-0.6-py3.5.egg/xgboost/training.py in _train_internal(params, dtrain, num_boost_round, evals, obj, feval, xgb_model, callbacks)
97 end_iteration=num_boost_round,
98 rank=rank,
---> 99 evaluation_result_list=evaluation_result_list))
100 except EarlyStopException:
101 break
/usr/local/lib/python3.5/site-packages/xgboost-0.6-py3.5.egg/xgboost/callback.py in callback(env)
196 def callback(env):
197 """internal function"""
--> 198 score = env.evaluation_result_list[-1][1]
199 if len(state) == 0:
200 init(env)
IndexError: list index out of range
Während ein
estimator.fit(X_train, y_train, early_stopping_rounds=20)
funktioniert gut.
Ich denke, es wäre besser, wenn Sie diese Antwort nicht akzeptiert. Ihre Frage ist im Grunde "wie mache ich [x] in einer sklearn-Pipeline" und die Antwort, auf die Sie verlinken, verwendet keine sklearn-Pipeline. und du sagst sogar in deiner Antwort, dass du deswegen akzeptiert hast, dass "das nicht funktioniert". Wenn jemand mit einer Antwort darauf gekommen wäre, wie man das in einer Pipeline macht, wäre es besser, dass das akzeptiert wird. –