【问题标题】:Handling missing values with linear regression使用线性回归处理缺失值
【发布时间】:2019-12-29 22:12:24
【问题描述】:

我尝试使用线性回归处理其中一列中的缺失值。

列的名称是“Landsize”,我正在尝试使用其他几个变量通过线性回归预测 NaN 值。

这是林。回归代码:

# Importing the dataset
dataset = pd.read_csv('real_estate.csv')

from sklearn.linear_model import LinearRegression
linreg = LinearRegression()
data = dataset[['Price','Rooms','Distance','Landsize']]
#Step-1: Split the dataset that contains the missing values and no missing values are test and train respectively.
x_train = data[data['Landsize'].notnull()].drop(columns='Landsize')
y_train = data[data['Landsize'].notnull()]['Landsize']
x_test = data[data['Landsize'].isnull()].drop(columns='Landsize')
y_test = data[data['Landsize'].isnull()]['Landsize']
#Step-2: Train the machine learning algorithm
linreg.fit(x_train, y_train)
#Step-3: Predict the missing values in the attribute of the test data.
predicted = linreg.predict(x_test)
#Step-4: Let’s obtain the complete dataset by combining with the target attribute.
dataset.Landsize[dataset.Landsize.isnull()] = predicted
dataset.info()

当我尝试检查回归结果时,我得到了这个错误:

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

准确度:

accuracy = linreg.score(x_test, y_test)
print(accuracy*100,'%')

【问题讨论】:

  • 您是否将“Nan”转换为“numeric nan 值”?

标签: python pandas scikit-learn linear-regression


【解决方案1】:

我认为您在这里做错的是将 NaN 值传递给算法,处理 NaN 值是预处理数据的主要步骤之一。因此,也许您需要将 NaN 值转换为 0 并预测何时具有 Landsize = 0 (这与逻辑上具有 NaN 值相同,因为 landsize 不能为 0 )。

我认为你做错的另一件事是:

x_train = data[data['Landsize'].notnull()].drop(columns='Landsize') 
y_train = data[data['Landsize'].notnull()]['Landsize']
x_test = data[data['Landsize'].isnull()].drop(columns='Landsize')
y_test = data[data['Landsize'].isnull()]['Landsize']

您正在为训练集和测试集分配相同的数据。你也许应该这样做:

X = data[data['Landsize'].notnull()].drop(columns='Landsize')    
y = data[data['Landsize'].notnull()]['Landsize']  
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

【讨论】:

  • 您不必更改算法,您的问题是回归问题,因此回归算法可以解决它,您只需要将数据拟合到问题;) 80% 的机器学习是数据科学并将您的数据拟合成合适的格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
  • 2019-02-01
  • 2016-01-11
  • 2017-10-21
  • 1970-01-01
  • 2022-01-06
  • 2019-03-26
相关资源
最近更新 更多