How to pass a parameter to only one part of a pipeline object in scikit learn?と似ています。パイプラインの一部だけにパラメータを渡したいと思っています。通常、それは罰金などを動作するはずです:Sklearnはパイプラインのxgboostにパラメータを渡します
estimator = XGBClassifier()
pipeline = Pipeline([
('clf', estimator)
])
と
pipeline.fit(X_train, y_train, clf__early_stopping_rounds=20)
と同様に実行が、それはで失敗します。うまく
estimator.fit(X_train, y_train, early_stopping_rounds=20)
作品に対し
/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
。
この回答を受け入れないと良いと思います。あなたの質問は、基本的には「私はスケーリンパイプラインでどのように[x]を行うのですか?」とあなたがリンクしている答えはスクリーンパイプラインを使用していません。そして、あなたはあなたの答えで、あなたがそれのために "これはあなたのために働かない"ということを認めました。誰かがパイプラインでこれを行う方法の答えに沿って来たら、それが受け入れられる方が良いでしょう。 –