1. ホーム
  2. python

[解決済み] [Solved] sklearn error ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

2022-01-25 02:18:27

質問

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 関数が数値である場合...