python - 使用线性回归处理缺失值
问题描述
我试图用线性回归处理其中一列中的缺失值。
该列的名称是“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 值传递给算法,处理 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)
推荐阅读
- azure-ad-b2c - 嵌套 JSON 作为 REST API 的输入/输出,使用 Azure AD B2C 自定义策略
- python - k-mean python的图像分离
- google-chrome - 如何仅在 chrome 扩展中在后台切换用户代理
- c++ - 引用强制模板实例化的静态转换,其中不完整的类型很好
- python - python flask-ask 中的 Alexa youtube 技能
- sequelize.js - 如何在不创建表的情况下创建 sequelizejs 服务
- javascript - 如何改变材质Claraplayer Js的不透明度
- java - 引用表中的 JpaRepository findBy 字段
- r - 将 0 添加到省略结尾 0 的 data.table
- oracle-apex - APEX 5:使报告单元格可单击并传递值