Cara memperbaiki: input berisi nan, tak terhingga, atau nilai yang terlalu besar untuk dtype ('float64')
Kesalahan umum yang mungkin Anda temui saat menggunakan Python adalah:
ValueError: Input contains infinity or a value too large for dtype('float64').
Kesalahan ini biasanya terjadi ketika Anda mencoba menggunakan fungsi dari modul scikit-learn, tetapi DataFrame atau matriks yang Anda gunakan sebagai input memiliki nilai NaN atau nilai tak terbatas.
Contoh berikut menunjukkan cara mengatasi kesalahan ini dalam praktiknya.
Bagaimana cara mereproduksi kesalahan tersebut
Misalkan kita memiliki panda DataFrame berikut:
import pandas as pd import numpy as np #createDataFrame df = pd. DataFrame ({' x1 ': [1, 2, 2, 4, 2, 1, 5, 4, 2, 4, 4], ' x2 ': [1, 3, 3, 5, 2, 2, 1, np.inf, 0, 3, 4], ' y ': [np.nan, 78, 85, 88, 72, 69, 94, 94, 88, 92, 90]}) #view DataFrame print (df) x1 x2 y 0 1 1.0 NaN 1 2 3.0 78.0 2 2 3.0 85.0 3 4 5.0 88.0 4 2 2.0 72.0 5 1 2.0 69.0 6 5 1.0 94.0 7 4 lower 94.0 8 2 0.0 88.0 9 4 3.0 92.0 10 4 4.0 90.0
Sekarang anggaplah kita mencoba menyesuaikan model regresi linier berganda menggunakan fungsi scikit-learn :
from sklearn. linear_model import LinearRegression
#initiate linear regression model
model = LinearRegression()
#define predictor and response variables
x, y = df[[' x1 ', ' x2 ']], df. y
#fit regression model
model. fit (x,y)
#print model intercept and coefficients
print (model. intercept_ , model. coef_ )
ValueError: Input contains infinity or a value too large for dtype('float64').
Kami menerima kesalahan karena DataFrame yang kami gunakan memiliki nilai tak terbatas dan NaN.
Bagaimana cara memperbaiki kesalahan tersebut
Cara mengatasi kesalahan ini adalah dengan menghapus terlebih dahulu semua baris dari DataFrame yang berisi nilai tak terbatas atau NaN:
#remove rows with any values that are not finite
df_new = df[np. isfinite (df). all ( 1 )]
#view updated DataFrame
print (df_new)
x1 x2 y
1 2 3.0 78.0
2 2 3.0 85.0
3 4 5.0 88.0
4 2 2.0 72.0
5 1 2.0 69.0
6 5 1.0 94.0
8 2 0.0 88.0
9 4 3.0 92.0
10 4 4.0 90.0
Dua baris dengan nilai tak terhingga atau NaN telah dihapus.
Sekarang kita dapat melanjutkan untuk menyesuaikan model regresi linier kita:
from sklearn. linear_model import LinearRegression
#initiate linear regression model
model = LinearRegression()
#define predictor and response variables
x, y = df_new[[' x1 ', ' x2 ']], df_new. y
#fit regression model
model. fit (x,y)
#print model intercept and coefficients
print (model. intercept_ , model. coef_ )
69.85144124168515 [5.72727273 -0.93791574]
Perhatikan bahwa kami tidak menerima kesalahan apa pun kali ini karena kami terlebih dahulu menghapus baris dengan nilai tak terbatas atau NaN dari DataFrame.
Sumber daya tambahan
Tutorial berikut menjelaskan cara memperbaiki kesalahan umum lainnya dengan Python:
Cara Memperbaiki dengan Python: Objek ‘numpy.ndarray’ tidak dapat dipanggil
Cara Memperbaiki: TypeError: Objek ‘numpy.float64’ tidak dapat dipanggil
Cara Memperbaiki: Kesalahan Ketik: Objek String atau Bytes yang Diharapkan