Input X contains infinity or a value too large for dtype('float64')
僕の中では結構ゾッとする類のエラーです。内容は書いてあるとおり、「無限大の値または浮動小数として桁が大きすぎの値が含まれて処理できません」と言っています。このエラーは何がいやらしいかというと、どの数字がエラーを起こしているのかさっぱり分からないところにあります。木形式のランダムフォレストやLightgbmを使うときは標準化しないので別にいいのですが、深層学習モデルもやってみようするとやはり標準化したほうが精度が高くなることが多いので、やはり標準化したい。
roundを使って四捨五入すればよさそうなものですが、以前やってみてroundではだめだった記憶があります。
そこで、何とか動くようにする方法ですが、
np.clip()
を使います。
np.clip(対象となるデータ、最小値、最大値)
の形で使います。
例えば、
df['a÷b'] = df['a'] / df['b']
が怪しいとすると、これを
df['a÷b'] = np.clip(df['a'] / df['b'], 0.000001, 1000000)
とします。すると
0.000001より小さいもの、1000000より大きいものは、自動的にそれぞれ0.000001と1000000に丸められてしまいます。
僕の場合、割り算をしているところのすべてに、これを使うことで何とか動いています。
nishikaの問題をやっていて出てきたのですが、不動産の価格でそこまで細かい数字は必要ないのでざっくりとやってしまいました。
細かい数字を必要としない場合でこの腹の立つエラーが出た時で、どうしてもコードを動かさなければいけない時は試してみてください。
(大小の桁数はご自分で調整してください)
ちょうど動かないエラーがあったので試してみます😊