scikit-learn 中的线性回归

Posted

技术标签:

【中文标题】scikit-learn 中的线性回归【英文标题】:Linear regression in scikit-learn 【发布时间】:2019-05-14 21:43:53 【问题描述】:

我开始使用 Pandas 和 Sklearn 在 Python 上学习机加工学习。 我尝试使用LinearRegression().fit 方法:

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split 
house_data = pd.read_csv(r"C:\Users\yassine\Desktop\ml\OC-tp-ML\house_data.csv")
y = house_data[["price"]] 
x = house_data[["surface","arrondissement"]] 
X = house_data.iloc[:, 1:3].values  
x_train, x_test, y_train, y_test = train_test_split (x, y, test_size=0.25, random_state=1) 
model = LinearRegression()
model.fit(x_train, y_train) 

当我运行代码时,我有这个消息:

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

你能帮帮我吗?

【问题讨论】:

错误告诉你问题所在,你有NaN值,infinite值,或者scikit无法处理的非常大的值。检查数据中的NaN 行并尝试删除它们 house_data.info(),检查空值 我得到了这个:house_data.info() RangeIndex:827 个条目,0 到 826 数据列(共 3 列):价格 827 非空int64 表面 822 非空 float64 区 822 非空 float64 数据类型:float64(2),int64(1) 内存使用量:19.5 KB 请不要使用 cmets 空间发布代码和结果 - 改为编辑和更新您的帖子 【参考方案1】:

机器学习模型可能要求您在数据清理过程中估算数据。线性回归非常关心 yhat,所以我通常从估算平均值开始。如果您不愿意估算缺失的数据,您可以删除包含 NaN 的观测值(前提是您只有一小部分 NaN 观测值。)

估算平均值可能如下所示:

df = df.fillna(df.mean())

归零可能如下所示:

df = df.fillna(0)

输入自定义结果可能如下所示:

df = df.fillna(my_func(args))

完全丢弃可能看起来像:

df = df.dropna()

准备以便inf 可能被这些方法提前捕获可能如下所示:

df.replace([np.inf, -np.inf], np.nan)

【讨论】:

以上是关于scikit-learn 中的线性回归的主要内容,如果未能解决你的问题,请参考以下文章

scikit-learn,线性回归中的分类(但数字)特征

线性回归 scikit-learn LinearRegression最小二乘法梯度下降SDG多项式回归学习曲线岭回归Lasso回归

Python/Scikit-learn - 线性回归 - 访问线性回归方程

scikit-learn 线性回归算法库小结

scikit-learn 线性回归算法库小结

机器学习系列6 使用Scikit-learn构建回归模型:简单线性回归多项式回归与多元线性回归