お世話になります.
前提・実現したいこと
Google Colabを使用しています.
以下のようにライブラリを読み込み,XGBoostで多クラスの出力を行うことを目的としています.
その一貫として,グリッドサーチを行います.この際,MultiOutputRegressorを用いるため,Pipelineを用いました.
参考にしたページ(Stack Overflow)
この際,Pipelineを用いると,データセットにNaNが有った場合にエラーが出てしまうことが問題で,それを解決したいと思っています.
python
1from sklearn.multioutput import MultiOutputRegressor 2from xgboost import XGBRegressor 3from sklearn.pipeline import Pipeline 4from sklearn.model_selection import GridSearchCV 5 6xgb = XGBRegressor() 7pipe_reg = Pipeline([("mltxgb", MultiOutputRegressor(xgb))]) # Pipelineを用います 8param_xgb = {'mltxgb__estimator__max_depth': [2,4,6], 'mltxgb__estimator__n_estimators': [50,100,200]} 9reg_cv = GridSearchCV(pipe_reg, param_xgb, cv=5) 10reg_cv.fit(X, y)
入力値Xと予測値yの配列は以下あくまで例ですが,このような配列があるとして質問させてください.
python
1print(X.shape) # (227900, 1128) 2print(y.shape) # (227900, 108)
この配列にはNaNが含まれています.
発生している問題・エラーメッセージ
このときに以下のようなエラーが発生します.
python
1----> 1 reg_cv.fit(seq_train, target_train) 2# 省略 3/usr/local/lib/python3.6/dist-packages/sklearn/utils/validation.py in _assert_all_finite(X, allow_nan) 4 54 not allow_nan and not np.isfinite(X).all 5 55 type_err = 'infinity' if allow_nan else 'NaN, infinity' 6---> 56 raise ValueError(msg_err.format(type_err, X.dtype)) 7 57 # for object dtype data, we only check for NaNs (GH-13254) 8 58 elif X.dtype == np.dtype('object') and not allow_nan: 9 10ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
どうやら,Pipelineでエラーが発生していると思われます.
試したこと
Pipelineが原因だとわかったのは,以下のような処理を試して同様のエラーを得たためです.
python
1xgb = XGBRegressor() 2pipe_reg = Pipeline([("mltxgb", MultiOutputRegressor(xgb))]) 3pipe_reg.fit(X, y)
同様にMultiOutputRegressor(xgb)をフィットさせようとしたところ,エラーは出ませんでした.
どのようにすれば良いのか,教えていただければ幸いです.
よろしくお願いいたします.