🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

1回答

1111閲覧

GBDTの予測結果のndarrayでTypeError: integer argument expected, got float

666_paru

総合スコア20

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2021/02/01 14:02

編集2021/02/02 16:08

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

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

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

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

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

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

toast-uz

2021/02/01 22:15

コードもエラーメッセージも解釈を記載して一部を切り出すのではなく、できるだけ全てをそのまま掲載いただき、解釈はコードの外に記載するか、コメント形式で記載するようにお願いします。エラーメッセージも複数行出る全体を掲載ください。
666_paru

2021/02/02 03:08

すみません、エラーメッセージ全文を記載するようにします。 追記させて頂きます。
jbpb0

2021/02/02 07:14 編集

エラーは https://teratail.com/questions/224947 と、かなり似てますね (残念ながら解決はしてません) そちらは、XGBRegressor()ではなくLinearRegression()で起きてるので、学習アルゴ固有の話ではないような どちらの質問も、入力データが提示されてないので、他人には現象が再現できないのですよね
jbpb0

2021/02/02 07:35

下記のようにデータを適当に作ってやってみましたが、エラーになりませんでした import numpy as np from xgboost import * train_x = np.arange(-50, 51).T.astype(np.float64) train_y = train_x * 2 train_x = train_x[:, np.newaxis] test_x = np.arange(-5, 6).T.astype(np.float64) test_x = test_x[:, np.newaxis] model = XGBRegressor(objective="reg:squarederror", max_depth=10, min_child_weight=4) model.fit(train_x, train_y) preds = model.predict(test_x) print(preds) 環境 Windows 10 Python 3.7.9 numpy 1.19.2 xgboost 1.2.1
toast-uz

2021/02/02 12:55

〜〜略〜〜 に何かある可能性がありますので、切り分けのために、 print(preds[:2]) print(preds[:3]) ・・ と順に試して、どこでエラーが発生するのかを確認できますでしょうか? for i in range(2, len(preds)): print(preds[:i]) で、順に全て試せます。
666_paru

2021/02/02 16:01

jbpb0様 検証頂きありがとうございます。 自分の環境について調べてみたとこと、xgboostは 1.2.1ではなく、0.90でした。 conda update py-xgboostを行いましたが、print(xgboost.__version__)で0.90のままでして、アップデート方法確認中になります。 データについてですが、どうお渡しすればよいかわからないのですが、全量ないと完全に再現できるかわからないと思いました。 しかし、BitFlyerApiからのデータ取得に2晩くらいかかっておりまして、 また、1か月前までのデータしか取得できないため、同じデータはとれないようでした。
666_paru

2021/02/02 16:05

toast-uz様 for i in range(2, len(preds)): print(preds[:i]) を試したところ、print()の行でTypeError: integer argument expected, got floatのエラーになりました。 エラーコード全文は以下になります。 Traceback (most recent call last): File "C:/Users/jimog/OneDrive/Desktop/Programing/Coin_Trade/DeepLearning/Training/Training_DBGT_Main.py", line 82, in <module> print(preds[:i]) File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 1490, in _array_str_implementation return array2string(a, max_line_width, precision, suppress_small, ' ', "") File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 692, in array2string return _array2string(a, options, separator, prefix) File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 468, in wrapper return f(self, *args, **kwargs) File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 494, in _array2string format_function = _get_format_function(data, **options) File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 427, in _get_format_function return formatdict['float']() File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 367, in <lambda> data, precision, floatmode, suppress, sign, legacy=legacy), File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 861, in __init__ self.fillFormat(data) File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 918, in fillFormat int_part, frac_part = zip(*(s.split('.') for s in strs)) File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 918, in <genexpr> int_part, frac_part = zip(*(s.split('.') for s in strs)) File "C:\Users\jimog\anaconda3\envs\Bit_Trade\lib\site-packages\numpy\core\arrayprint.py", line 917, in <genexpr> for x in finite_vals) TypeError: integer argument expected, got float
toast-uz

2021/02/02 22:20 編集

ありがとうございます。この欄はインデントが書けませんので表現できませんが、for文の後のprint文にはインデントを入れてください。なお、どのiまで動いたのかわかるように、iも一緒にprintするようにお願いします。 for i in range(2, len(preds)): インデントprint(i) インデントprint(preds[:i]) 結果ご報告の際は、エラーメッセージ直前の表示も入れるようにお願いします。最低でも2が表示されるはずです。なお、今回の結果は中途半端なので、次の結果記載する際は、今回記載いただいた「追記」を上書きしてしまったほうがよいです。
jbpb0

2021/02/02 23:53

> conda update py-xgboostを行いましたが、print(xgboost.__version__)で0.90のままでして、アップデート方法確認中になります。 このエラーはデータに依存して発生しているような気がするので、バージョンは関係無いような (根拠なく思ってるだけですが) ちなみに、私はpipで入れてます https://xgboost.readthedocs.io/en/latest/build.html に、condaでの入れ方が書かれてないからです もちろん、アップデートもpipでやってます (condaで入れたものはアップデートもconda、pipで入れたものはアップデートもpipでやってます) 公式のインストールの案内に書かれてる方法の方が、なんとなく安心するので
bsdfan

2021/02/03 09:21

numpy.get_printoptions() で返ってくる値がおかしく(intであるべき値がfloatに)なってないでしょうか。
666_paru

2021/02/03 12:12

解決に向けご協力頂いている皆さま、大変申し訳ございません。 先ほど、細かく確認していったところ、使っているデータでも同じエラーが出ることがわかりました。 遡っていくと、df['price'].resample(term).ohlc()等のリサンプルの集計メソッドで発生しておりました。 以前、集計前の元データの期間を短くしてテストした際には問題なかったため、修正したGBDT周辺に原因があると判断したのが良くありませんでした 。 申し訳ございません。 原因はわかっておりませんが、最初の質問内容から大幅に変わりますので、調べて解決しない場合は改めて質問させて頂こうと思っております。 ご協力頂き大変ありがとうございました。
666_paru

2021/02/03 13:14 編集

重ね重ね申し訳ございません。 bsdfan様のお話から np.set_printoptions(precision=5, suppress=True) と、指数表記しないよう設定してみたところ、エラーが出なくなりました。
toast-uz

2021/02/03 12:35

解決してよかったです。自己解決の回答を投稿して、クローズをお願いします。
guest

回答1

0

自己解決

np.set_printoptions(precision=5, suppress=True)
と、指数表記しないよう設定してみたところ、エラーが出なくなりました。

皆さまありがとうございました。

投稿2021/02/03 13:18

666_paru

総合スコア20

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問