Невозможно уместить модель линейной многомерной регрессии из-за пропущенных значений в файле CSV - PullRequest
1 голос
/ 19 сентября 2019

Я пытаюсь выполнить модель линейной регрессии с несколькими переменными.У меня есть файл CSV с атрибутами: 'area', 'bedrooms', 'age', 'price', но спальни имеют пропущенное значение (то есть NaN).Я хочу соответствовать модели и предсказать цену, предоставив другие три атрибута, но из-за одного пропущенного значения мне показана ошибка input contains nan infinity or a value too large for dtype('float64').Я нашел медиану и заполнил пропущенное значение, но в файле CSV оно не заменяется и выдает ошибку при подгонке модели.Файл CSV выглядит следующим образом:

CSV file

Я использовал следующие коды:

df=pd.read_csv(r"C:\Users\rohit\Desktop\homeprices4.csv")

df

m=math.floor(df.bedrooms.median()) // m is median which I have calculated

m

df.bedrooms.fillna(m)

reg=linear_model.LinearRegression()

reg.fit(df[['area','bedrooms','age']],df.price)

После этой строки я получаю сообщение об ошибке, потому что в спальнях есть одиннедостающее значениеЕсли я удаляю bedrooms из этой строки и использую только area и age для прогноза, тогда NO error, и я получаю правильные результаты.

Поэтому мой вопрос: какзаменить отсутствующее значение медианой в файле CSV?Какой код для этого?Почему я получаю ошибку?

Посмотрите на скриншот для ошибки:

enter image description here

1 Ответ

2 голосов
/ 19 сентября 2019

Два вопроса в вашем сообщении:

  1. Ваши изменения не сохраняются в фрейме данных, поскольку fillna вернет копию, если inplace=True не передано в аргументах.Вот почему вы все еще получаете сообщение об ошибке.
  2. Чтобы сохранить изменения в CSV, вам нужно использовать DataFrame.to_csv(...), но, учитывая мой предыдущий пункт, возможно, вам это не нужно.

Я бы обогатил ваш конвейер этапом очистки данных и сохранил очищенные данные.Я бы сделал 2 отдельных сценария.

Очистка данных:

path_raw_data= r"C:\Users\rohit\Desktop\homeprices4.csv"
path_clean_data= r"C:\Users\rohit\Desktop\homeprices4_clean.csv"
df=pd.read_csv(path_raw_data)
m=math.floor(df.bedrooms.median()) // m is median which I have calculated
df.bedrooms.fillna(m, inplace=True)
df.to_csv(path_clean_data)

Линейная регрессия:

path_clean_data= r"C:\Users\rohit\Desktop\homeprices4_clean.csv"
df=pd.read_csv(path_clean_data)
reg=linear_model.LinearRegression()
reg.fit(df[['area','bedrooms','age']],df.price)
...