GBDTで予測した結果をprint()等すると、
TypeError: integer argument expected, got float
となります。
python
1model = XGBRegressor(objective="reg:squarederror", max_depth=10, min_child_weight=4) 2model.fit(train_x, train_y) 3 4preds = model.predict(test_x) 5print(preds) 6 7※ エラーメッセージ追記 8Traceback (most recent call last): 9 File "C:/Users/jimog/OneDrive/Desktop/Programing/Coin_Trade/DeepLearning/Training/Training_DBGT_Main.py", line 71, in <module> 10 print(preds) 11 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 1490, in _array_str_implementation 12 return array2string(a, max_line_width, precision, suppress_small, ' ', "") 13 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 692, in array2string 14 return _array2string(a, options, separator, prefix) 15 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 468, in wrapper 16 return f(self, *args, **kwargs) 17 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 494, in _array2string 18 format_function = _get_format_function(data, **options) 19 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 427, in _get_format_function 20 return formatdict['float']() 21 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 367, in <lambda> 22 data, precision, floatmode, suppress, sign, legacy=legacy), 23 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 861, in __init__ 24 self.fillFormat(data) 25 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 891, in fillFormat 26 frac_strs, _, exp_strs = zip(*(s.partition('e') for s in strs)) 27 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 891, in <genexpr> 28 frac_strs, _, exp_strs = zip(*(s.partition('e') for s in strs)) 29 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 890, in <genexpr> 30 for x in finite_vals) 31TypeError: integer argument expected, got float 32
結果のデータは以下のように、マイナスありの小数です。
python
1pprint(list(preds)) 2 3結果: 4[2400.1956, 5 2252.0037, 6 -766.37213, 7 -885.14404, 8 -336.5241, 9~~~略~~~ 10 11--------------------------------------------- 12for p in preds: 13 print(p,type(p)) 14 15結果: 162400.1956 <class 'numpy.float32'> 172252.0037 <class 'numpy.float32'> 18-766.37213 <class 'numpy.float32'> 19-885.14404 <class 'numpy.float32'> 20~~~略~~~ 21
特徴量と教師ラベルのデータは、NANと空文字等なしで、全て明示的にfloat64へ変換しています。
試したこと
・上記のように、for文で回すとエラー無し(全て型はnumpy.float32でした)
・print(list(preds))でリストに変換すると表示できます。
・print(np.array(preds))で再度ndarray変換は同エラーでできませんでした。
・print(preds.dtype)はfloat32が表示されます。
・print(preds.astype(np.float))で型変換は、同エラーでした。(float32,float64でも同じくエラー)
・print(np.array(list(preds)))でも同エラーでした。
・以下のように、一度変数に代入しても、エラーになるのはprint()の行でした。
python
1a=preds.astype(np.float) 2print(a)
環境は、
Window10
Python 3.7.9
numpy 1.19.2
xgboost 0.90
(anacondaの仮想環境)
pycharm
です。
エラー文としては、整数の引数に小数を入れたのでエラーです、というような内容なので、どこかで型を指定すればよいのかと思うのですが、型変換も受け付けてもらえず、どう対処したらよいかわからないです。
ご存知の方おられましたら教えて頂きたく思います。
よろしくお願い致します。
追記:
toast-uz様からの質問での実行結果
python
1for i in range(2, len(preds)): 2print(preds[:i]) 3 4結果 5Traceback (most recent call last): 6 File "C:/Users/jimog/OneDrive/Desktop/Programing/Coin_Trade/DeepLearning/Training/Training_DBGT_Main.py", line 82, in <module> 7 print(preds[:i]) 8 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 1490, in _array_str_implementation 9 return array2string(a, max_line_width, precision, suppress_small, ' ', "") 10 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 692, in array2string 11 return _array2string(a, options, separator, prefix) 12 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 468, in wrapper 13 return f(self, *args, **kwargs) 14 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 494, in _array2string 15 format_function = _get_format_function(data, **options) 16 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 427, in _get_format_function 17 return formatdict['float']() 18 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 367, in <lambda> 19 data, precision, floatmode, suppress, sign, legacy=legacy), 20 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 861, in __init__ 21 self.fillFormat(data) 22 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 918, in fillFormat 23 int_part, frac_part = zip(*(s.split('.') for s in strs)) 24 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 918, in <genexpr> 25 int_part, frac_part = zip(*(s.split('.') for s in strs)) 26 File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 917, in <genexpr> 27 for x in finite_vals) 28TypeError: integer argument expected, got float
回答1件
あなたの回答
tips
プレビュー