210

私は 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

無限値を削除しますが、これも機能しませんでした。アフィニティ伝播アルゴリズムを使用できるように、マトリックス内の無限値を取り除くにはどうすればよいですか?

私はアナコンダとpython 2.7.9を使用しています。

4

22 に答える 22

145

これは scikit 内で発生する可能性があり、何をしているかによって異なります。使用している関数のドキュメントを読むことをお勧めします。たとえば、マトリックスが正定であり、その基準を満たしていないことに依存するものを使用している可能性があります。

編集:どうすればそれを見逃すことができますか:

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 かどうかをチェックしたいany...

于 2015-07-09T16:43:31.247 に答える
15

これは、失敗するチェックです。

どちらが言う

def _assert_all_finite(X):
    """Like assert_all_finite, but only for ndarray."""
    X = np.asanyarray(X)
    # First try an O(n) time, O(1) space solution for the common case that
    # everything is finite; fall back to O(n) space np.isfinite to prevent
    # false positives from overflow in sum method.
    if (X.dtype.char in np.typecodes['AllFloat'] and not np.isfinite(X.sum())
            and not np.isfinite(X).all()):
        raise ValueError("Input contains NaN, infinity"
                         " or a value too large for %r." % X.dtype)

そのため、入力に NaN 以外の値が含まれていることを確認してください。そして、これらの値はすべて実際には float 値です。いずれの値も Inf であってはなりません。

于 2016-04-13T15:12:55.463 に答える
13

入力 csv に空のスペースがあったため、入力配列のディメンションが歪んでいました。

于 2015-07-14T21:09:47.490 に答える
5

ここでの答えはどれもうまくいきませんでした。これがうまくいきました。

Test_y = np.nan_to_num(Test_y)

無限値を高い有限値に置き換え、nan 値を数値に置き換えます。

于 2021-01-09T18:48:22.180 に答える
4

行のサブセットを選択しようとした後にエラーが発生しました:

df = df.reindex(index=my_index)

my_indexには に含まれていない値が含まれていることが判明したためdf.index、再インデックス関数はいくつかの新しい行を挿入し、それらを で埋めましたnan

于 2018-02-15T16:07:52.307 に答える
0

私は同じ問題を抱えていました.私の場合、答えは単にCSVに値のないセル(「x、y、z、、」)があったということでした。デフォルト値を入れると修正されました。

于 2021-12-13T15:29:59.777 に答える
0

私の場合、問題は、多くの scikit 関数が numpy 配列を返すことでした。これには pandas インデックスがありません。そのため、これらのnumpy配列を使用して新しいDataFrameを構築し、それらを元のデータと混合しようとすると、インデックスの不一致が発生しました。

于 2018-06-25T09:24:03.223 に答える