ValueError при попытке подогнать регрессионную модель - PullRequest
0 голосов
/ 13 июня 2019

У меня есть набор данных из 1000 наблюдений, где x не зависит, а y зависит. Когда я пытаюсь соответствовать простой модели регрессии, я получаю следующую ошибку:

ValueError: вход содержит NaN, бесконечность или слишком большое значение для DTYPE ( 'float64')

В наборе данных есть значения NaN или отсутствуют данные и я также попробовал импутер со средней стратегией для пропущенных данных (если есть).

import numpy as np 
import matplotlib.pyplot as plt
import pandas as pd


dataset=pd.read_csv('dataset1.csv')
x = dataset.iloc[:,:-1].values
y = dataset.iloc[: , 1].values


from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values='NaN' , strategy = 'mean' , axis=0 )
imputer = imputer.fit(x[:, 0:1])
x[:,0:1] = imputer.transform(x[:,0:1])
imputer = imputer.fit(y)
y = imputer.transform(y)



from sklearn.cross_validation import train_test_split
x_train , x_test , y_train , y_test = train_test_split(x,y , 
test_size=0.3 , random_state=0)


from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(x_train , y_train)

Сообщение об ошибке: -

ValueError: вход содержит NaN, бесконечность или значение, слишком большое для DTYPE ( 'float64').

набор данных : - https://drive.google.com/file/d/1Ryl5my2RG2LpyByhQ_qqgVb7ztZeGtie/view?usp=sharing

1 Ответ

2 голосов
/ 13 июня 2019

В вашем наборе данных отсутствует метка (строка 215 столбца y в связанном файле). Чтобы избавиться от него, вы можете просто добавить следующую строку сразу после загрузки набора данных:

dataset.dropna(subset=["y"], inplace=True)  # drop any columns with missing labels in place

В вашем коде вы в настоящее время пытаетесь вменить отсутствующий ярлык. Это не имеет особого смысла, поскольку по отсутствующей метке нечему учиться, и соответствующее значение x также выглядит подозрительно. Но на случай, если вам интересно, вменение не сработало, потому что вам нужно сначала изменить форму массива:

imputer = imputer.fit(y.reshape(-1, 1))
y = imputer.transform(y.reshape(-1, 1))
...