1. ホーム
  2. スクリプト・コラム
  3. パイソン

[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。

2021-12-28 19:07:29

質問

sklearnを使用しているとき、親和性伝播に問題が発生しました。入力行列を作成したのですが、エラーが発生しました。

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

を実行しました。

np.isnan(mat.any()) #and gets False
np.isfinite(mat.all()) #and gets True

を使ってみました。

mat[np.isfinite(mat) == True] = 0

を使用して無限大の値を削除しましたが、これもうまくいきませんでした。アフィニティ伝搬アルゴリズムを使用するために、行列の無限値を取り除くにはどうしたらよいでしょうか?

私はanacondaとpython 2.7.9を使用しています。

どのように解決するのですか?

これはscikitの内部で起こるかもしれませんし、あなたが何をしているかによります。使用している関数のドキュメントを読むことをお勧めします。例えば、行列が正定値であることに依存するものを使っていて、その基準を満たしていない可能性があります。

EDIT : どうして見逃したんだろう。

np.isnan(mat.any()) #and gets False
np.isfinite(mat.all()) #and gets True

は明らかに間違っています。正しいのは

np.any(np.isnan(mat))

そして

np.all(np.isfinite(mat))

の返り値がNaNであるかどうかではなく、いずれかの要素がNaNであるかどうかをチェックしたいのです。 any 関数が数値である場合...