質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

905閲覧

XGBoost gridサーチのエラー回避

taitan38

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/08/17 13:57

編集2020/08/17 21:13

前提・実現したいこと

1.エラーを回避させて動作させる。

listではないのにエラーが発生します。num_classに問題があるのでしょうか?
有識者の方々、ご助力お願いいたします。

発生している問題・エラーメッセージ


TypeError Traceback (most recent call last)
<ipython-input-126-ccfa323308ad> in <module>
17
18 num_round = 10
---> 19 bst = xgb.train(param_grid, dtrain, num_round)
20
21

~\Anaconda3\lib\site-packages\xgboost\training.py in train(params, dtrain, num_boost_round, evals, obj, feval, maximize, early_stopping_rounds, evals_result, verbose_eval, xgb_model, callbacks, learning_rates)
214 evals=evals,
215 obj=obj, feval=feval,
--> 216 xgb_model=xgb_model, callbacks=callbacks)
217
218

~\Anaconda3\lib\site-packages\xgboost\training.py in _train_internal(params, dtrain, num_boost_round, evals, obj, feval, xgb_model, callbacks)
46 nboost //= num_parallel_tree
47 if 'num_class' in _params:
---> 48 nboost //= _params['num_class']
49
50 # Distributed code: Load the checkpoint from rabit.

TypeError: unsupported operand type(s) for //=: 'int' and 'list'

該当のソースコード

dtrain = xgb.DMatrix(x_train, label=y_train)
dtest = xgb.DMatrix(x_test, label=y_test)

param_grid = {
'max_depth': [0,1,3],
'gamma':[0,0.2,0.03],
'booster':['gbtree'],
'objective':['multi:softmax'],
'num_class':[50],
}

num_round = 10
bst = xgb.train(param_grid, dtrain, num_round)
xgb.plot_importance(bst)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/08/17 14:44

もう少し前後のコードとエラー発生行を特定できる情報を提示してください。
taitan38

2020/08/17 21:14

ご返信ありがとうございます。 修正しましたのでご確認のほど、よろしくお願いいたします。
meg_

2020/08/18 03:13

詳しくはないのですがエラーに'list'とあることから、'num_class':[50]を'num_class':50としてみてはどうでしょうか?
taitan38

2020/08/18 06:56

ご返信ありがとうございます。 'num_class':50を試してみましたが、以下のエラーになってしまいます。 他ポイントがございましたら、アドバイスのほどよろしくお願いいたします。 --------------------------------------------------------------------------- XGBoostError Traceback (most recent call last) <ipython-input-29-fedefe7465ad> in <module> 14 15 num_round = 10 ---> 16 bst = xgb.train(param_grid, dtrain, num_round) 17 xgb.plot_importance(bst) 18 ~\Anaconda3\lib\site-packages\xgboost\training.py in train(params, dtrain, num_boost_round, evals, obj, feval, maximize, early_stopping_rounds, evals_result, verbose_eval, xgb_model, callbacks, learning_rates) 214 evals=evals, 215 obj=obj, feval=feval, --> 216 xgb_model=xgb_model, callbacks=callbacks) 217 218 ~\Anaconda3\lib\site-packages\xgboost\training.py in _train_internal(params, dtrain, num_boost_round, evals, obj, feval, xgb_model, callbacks) 72 # Skip the first update if it is a recovery step. 73 if version % 2 == 0: ---> 74 bst.update(dtrain, i, obj) 75 bst.save_rabit_checkpoint() 76 version += 1 ~\Anaconda3\lib\site-packages\xgboost\core.py in update(self, dtrain, iteration, fobj) 1107 if fobj is None: 1108 _check_call(_LIB.XGBoosterUpdateOneIter(self.handle, ctypes.c_int(iteration), -> 1109 dtrain.handle)) 1110 else: 1111 pred = self.predict(dtrain) ~\Anaconda3\lib\site-packages\xgboost\core.py in _check_call(ret) 174 """ 175 if ret != 0: --> 176 raise XGBoostError(py_str(_LIB.XGBGetLastError())) 177 178 XGBoostError: [15:49:39] src/objective/objective.cc:23: Unknown objective function ['multi:softmax']
meg_

2020/08/18 08:27

'objective':['multi:softmax']ではなく'objective':'multi:softmax'で大丈夫かと思います。
taitan38

2020/08/18 12:11

ご返答ありがとうございます。しかしながら、 'objective':'multi:softmax'でもエラーは発生してします。 gridサーチでsoftmaxをしようすると、以下の通りintを指定してくるので、softmaxが使えないと思われます。 この認識はいかがでしょうか? dtrain = xgb.DMatrix(x_train, label=y_train) dtest = xgb.DMatrix(x_test, label=y_test) param_grid = { 'max_depth': [0,1,3], 'gamma':[0,0.2,0.03], 'booster':'gbtree', 'objective':'multi:softmax', 'num_class':50, } num_round = 10 bst = xgb.train(param_grid, dtrain, num_round) xgb.plot_importance(bst) --------------------------------------------------------------------------- XGBoostError Traceback (most recent call last) <ipython-input-62-31fd346c8723> in <module> 11 12 num_round = 10 ---> 13 bst = xgb.train(param_grid, dtrain, num_round) 14 xgb.plot_importance(bst) 15 ~\Anaconda3\lib\site-packages\xgboost\training.py in train(params, dtrain, num_boost_round, evals, obj, feval, maximize, early_stopping_rounds, evals_result, verbose_eval, xgb_model, callbacks, learning_rates) 214 evals=evals, 215 obj=obj, feval=feval, --> 216 xgb_model=xgb_model, callbacks=callbacks) 217 218 ~\Anaconda3\lib\site-packages\xgboost\training.py in _train_internal(params, dtrain, num_boost_round, evals, obj, feval, xgb_model, callbacks) 72 # Skip the first update if it is a recovery step. 73 if version % 2 == 0: ---> 74 bst.update(dtrain, i, obj) 75 bst.save_rabit_checkpoint() 76 version += 1 ~\Anaconda3\lib\site-packages\xgboost\core.py in update(self, dtrain, iteration, fobj) 1107 if fobj is None: 1108 _check_call(_LIB.XGBoosterUpdateOneIter(self.handle, ctypes.c_int(iteration), -> 1109 dtrain.handle)) 1110 else: 1111 pred = self.predict(dtrain) ~\Anaconda3\lib\site-packages\xgboost\core.py in _check_call(ret) 174 """ 175 if ret != 0: --> 176 raise XGBoostError(py_str(_LIB.XGBGetLastError())) 177 178 XGBoostError: Invalid Parameter format for min_split_loss expect float but value='[0, 0.2, 0.03]'
meg_

2020/08/18 12:41

そもそもですが、xgboost.train(params・・・のparamsって複数要素指定は可能なのでしょうか?
taitan38

2020/08/19 00:18

Listでは入力できないとのエラーなので、複数要素指定はおそらく不可だと思われます。 ということは、softmaxではgridサーチは使用できないことになりますね。
meg_

2020/08/19 02:30

xgboost.train()はグリッドサーチとは別ではないでしょうか?
taitan38

2020/08/19 12:24

別のようです。softmaxでgridサーチは使えないということが結論になるかと思います。 もし、使用できるようなら回避方法を教示いただきたいです。
meg_

2020/08/19 12:48

scikit-learnのGridSearchCVでは駄目だったということでしょうか?
taitan38

2020/08/22 05:36

scikit-learnのGridSearchCVで解決しました。ありがとうございました。
guest

回答1

0

自己解決

scikit-learnのGridSearchCVを使用する事で解決。

投稿2020/08/22 05:38

taitan38

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問