Saya menggunakan sklearn dan mengalami masalah dengan propagasi afinitas. Saya telah membangun matriks masukan dan saya terus mendapatkan kesalahan berikut.
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
aku harus lari
np.isnan(mat.any()) #and gets False
np.isfinite(mat.all()) #and gets True
Saya mencoba menggunakan
mat[np.isfinite(mat) == True] = 0
untuk menghapus nilai tak terbatas tetapi ini juga tidak berhasil. Apa yang dapat saya lakukan untuk menghilangkan nilai tak hingga dalam matriks saya, sehingga saya dapat menggunakan algoritme propagasi afinitas?
Saya menggunakan anaconda dan python 2.7.9.
python
python-2.7
scikit-learn
valueerror
Ethan Waldie
sumber
sumber
float64
itu terbatas dan tidaknan
. Pesan kesalahannya tepat - ini hampir pasti menjadi masalah bagi siapa pun yang menemukan diri mereka di sini.Jawaban:
Ini mungkin terjadi di dalam scikit, dan itu tergantung pada apa yang Anda lakukan. Saya sarankan membaca dokumentasi untuk fungsi yang Anda gunakan. Anda mungkin menggunakan salah satu yang bergantung, misalnya pada matriks Anda menjadi pasti positif dan tidak memenuhi kriteria itu.
EDIT : Bagaimana saya bisa merindukan itu:
jelas salah. Benar adalah:
dan
Anda ingin memeriksa apakah salah satu elemen adalah NaN, dan bukan apakah nilai yang dikembalikan dari
any
fungsi tersebut adalah angka ...sumber
Saya mendapat pesan kesalahan yang sama saat menggunakan sklearn dengan panda . Solusi saya adalah mengatur ulang indeks bingkai data saya
df
sebelum menjalankan kode sklearn apa pun:Saya mengalami masalah ini berkali-kali ketika saya menghapus beberapa entri di saya
df
, sepertisumber
Ini adalah fungsi saya (berdasarkan ini ) untuk membersihkan dataset dari
nan
,Inf
, dan sel-sel yang hilang (untuk dataset miring):sumber
dropna
kemudian kedua kalinya saat menjatuhkan inf.Dimensi array masukan saya miring, karena csv masukan saya memiliki ruang kosong.
sumber
dropna
pandas.pydata.org/pandas-docs/stable/generated/…Ini adalah pemeriksaan yang gagal:
Yang mengatakan
Jadi pastikan Anda memiliki nilai non NaN di masukan Anda. Dan semua nilai itu sebenarnya adalah nilai float. Tidak ada nilai yang harus Inf juga.
sumber
Dengan versi python 3 ini:
Melihat detail kesalahan, saya menemukan baris kode yang menyebabkan kegagalan:
Dari sini, saya dapat mengekstrak cara yang benar untuk menguji apa yang terjadi dengan data saya menggunakan tes yang sama yang gagal diberikan oleh pesan kesalahan:
np.isfinite(X)
Kemudian dengan putaran cepat dan kotor, saya dapat menemukan bahwa data saya memang berisi
nans
:Sekarang yang harus saya lakukan adalah menghapus nilai pada indeks ini.
sumber
Saya mengalami kesalahan setelah mencoba memilih subset baris:
Ternyata itu
my_index
berisi nilai yang tidak terkandung di dalamnyadf.index
, sehingga fungsi indeks ulang menyisipkan beberapa baris baru dan mengisinyanan
.sumber
Dalam kebanyakan kasus, menyingkirkan nilai tak terbatas dan nol memecahkan masalah ini.
singkirkan nilai tak terbatas.
singkirkan nilai nol sesuka Anda, nilai spesifik seperti 999, mean, atau buat fungsi Anda sendiri untuk menghubungkan nilai yang hilang
sumber
Saya mengalami kesalahan yang sama, dan dalam kasus saya X dan y adalah kerangka data, jadi saya harus mengonversinya menjadi matriks terlebih dahulu:
Sunting: X.as_matrix () yang semula disarankan tidak digunakan lagi
sumber
saya mendapat kesalahan yang sama. itu bekerja dengan
df.fillna(-99999, inplace=True)
sebelum melakukan penggantian, penggantian, dllsumber
nan
nilai; kamu harus menemukannya.Dalam kasus saya, masalahnya adalah banyak fungsi scikit mengembalikan array numpy, yang tidak memiliki indeks pandas. Jadi ada ketidakcocokan indeks ketika saya menggunakan array numpy tersebut untuk membangun DataFrames baru dan kemudian saya mencoba mencampurnya dengan data asli.
sumber
Hapus semua nilai tak terbatas:
(dan ganti dengan min atau maks untuk kolom itu)
sumber
mencoba
Jika jumlah data Anda tidak terbatas (lebih besar dari nilai float maks yaitu 3.402823e + 38) Anda akan mendapatkan kesalahan itu.
lihat fungsi _assert_all_finite di validation.py dari kode sumber scikit:
sumber