如何判断线性回归模型(Linear Regression)的好坏

本文旨在对刚学了一点Linear Regression理论知识, 还不知道代码如何实现,以及代码复现后查看哪些参数可以确定线性回归模型训练的好坏的同学,有些许启发.

本文参考公众号’酷酷的算法’ 按照官方文档修订了R方的公式

一. 模型训练

一般我们需要通过模型求weight和bias, 但这次为了方便验证,我们假设已知方程 f ( x ) = 3 x + 4 f(x) = 3x +4 f(x)=3x+4来模拟实验环境, weight和bias是3和4.

x x x: 通过random.uniform()来获得已知的特征矩阵
通过random.normal()来生成噪声, 和已知方程合并生成y

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(24)
x=np.random.uniform(0,10,size=100) #左闭右开 随机生成浮点数  已知的特征矩阵
#x =np.random.randint(a,b) 左闭右开, 随机生成整数
X=x.reshape(-1,1) ##reshape新数组为1列, 以便
y=3*x+4+np.random.normal(0,1,100) # y是真实值
plt.scatter(x,y)
plt.show()

在这里插入图片描述

查看数据 如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

接下来就是最激动人心的训练模型阶段(.fit)

fit函数

from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(X,y)

Output:

LinearRegression()

训练完成后即可得出weight和bias

LinearRegression.coef_ 回归系数 即 权重weight

lin_reg.coef_  #表示直线的斜率. 回归系数越大表示X 对y影响越大, 正回归系数表示y 随X增大而增大,负回归系数表示y 随X增大而减小

Output:

array([3.00103731])

LinearRegression.intercept_ : 截距 即 bias

lin_reg.intercept_  #表示直线在y轴上的截距,代表直线的起点

Output:

4.048208007900303

因此, 预测值y_hat, 即可根据上面得出的weight和bias代入方程得出, 代码如下图:

y_hat=lin_reg.coef_[0]*x+lin_reg.intercept_

plt.scatter(x,y) #散点图
plt.plot(np.sort(x),y_hat[np.argsort(x)],color='r')  
#np.sort 对给定的数组的元素进行排序 
#np.argsort(x) 将x中的元素从小到大排列, 提取其对应的index
plt.show()

在这里插入图片描述

y_hat 由方程求得, 数值如下:

在这里插入图片描述

如果直接使用LinearRegression.predict(X), 所得数值与方程求得数值相同

在这里插入图片描述

二. 模型判断优劣 (4中方法,最常用的是第四种R方)

数值约接近1, 代表模型拟合越好.

2.1 均方误差MSE(MeanSquaredError)

1 m ∑ i = 1 m ( y − y ^ ) 2 \frac1m \sum_{i=1}^m(y -\hat y)^2 m1i=1m(yy^)2

使用样本的真实值减去样本的预测值,然后平方(因为可能减出来的是负数),假设一共m个样本,乘以1/m以便最终值和样本个数无关

from sklearn.metrics import mean_squared_error
MSE=mean_squared_error(y,y_hat)
MES

Output:

0.9255820462274633

2.2 均方根误差RMSE(RootMeanSquaredError)

1 m ∑ i = 1 m ( y − y ^ ) 2 \sqrt{\frac1m \sum_{i=1}^m(y -\hat y)^2} m1i=1m(yy^)2
RMSE是MSE的平方根

from math import sqrt
RMSE=sqrt(mean_squared_error(y,y_hat))
RMSE

Output:

0.962071746922995

2.3 平均绝对误差MAE (MeanAbsoluteError)

1 m ∑ i = 1 m ∣ y − y ^ ∣ \frac1m \sum_{i=1}^m|y -\hat y| m1i=1myy^

MAE的计算方法和MSE的计算方法不同在于抵消符号使用的是绝对值的方法

from sklearn.metrics import mean_absolute_error
MAE=mean_absolute_error(y,y_hat)
MAE

Output:

0.7953110680751729

2.4 R方 ( R 2 R^2 R2) (R_Squared) 最好的标准

在这里插入图片描述

R方也叫确定系数(coefficient of determination)
R 2 = 1 − ∑ i ( y − y ^ ) 2 ∑ i ( y − y ‾ ) 2 R^2 = 1- \frac{ \sum_{i}(y-\hat y)^2}{ \sum_{i}(y-\overline{y} )^2} R2=1i(yy)2i(yy^)2

from sklearn.metrics import r2_score
R2=r2_score(y,y_hat)
R2

Output:

0.987840340927941

注意: 默认LinearRegression对象中直接封装了一个成员函数,即R方,调用函数并传入需要预测的特征矩阵以及每个样本的真实值

lin_reg.score(X,y)

Output:

0.987840340927941
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是关于Python中使用sklearn库实现多元线性回归模型的建立、评估和调优的详细介绍。 1. 多元线性回归模型简介 多元线性回归模型是一种用于建立因变量和多个自变量之间关系的统计模型。它假设因变量与自变量之间存在线性关系,并且能够通过最小二乘法等方法进行求解。 多元线性回归模型的一般形式为: y = β0 + β1x1 + β2x2 + … + βpxp + ε 其中,y 表示因变量,x1, x2, …, xp 表示自变量,β0, β1, β2, …, βp 表示回归系数,ε 表示误差项。多元线性回归的目标是求出最优的回归系数,使得模型的预测误差最小。 2. sklearn库实现多元线性回归模型的建立 sklearn库提供了LinearRegression类来实现多元线性回归模型的建立。下面是一个简单的示例代码: ```python from sklearn.linear_model import LinearRegression # 创建线性回归模型对象 model = LinearRegression() # 使用数据拟合模型 model.fit(X, y) # 打印回归系数 print(model.coef_) ``` 其中,X表示自变量的数据集,y表示因变量的数据集。model.fit(X, y)用于拟合模型,model.coef_用于获取回归系数。 3. 多元线性回归模型的评估 在建立多元线性回归模型后,需要对模型进行评估以确定其预测能力的好坏。常用的评估指标包括均方误差(MSE)、平均绝对误差(MAE)和决定系数(R2)等。 下面是一个使用sklearn库计算MSE和R2的示例代码: ```python from sklearn.metrics import mean_squared_error, r2_score # 使用模型进行预测 y_pred = model.predict(X) # 计算MSE和R2 mse = mean_squared_error(y, y_pred) r2 = r2_score(y, y_pred) # 打印评估结果 print("MSE:", mse) print("R2:", r2) ``` 4. 多元线性回归模型的调优 为了提高模型的预测能力,需要对模型进行调优。常用的调优方法包括特征选择和正则化等。 特征选择是指选择对因变量具有最强预测能力的自变量。sklearn库提供了SelectKBest、RFE和SelectFromModel等特征选择方法。下面是一个使用SelectKBest方法进行特征选择的示例代码: ```python from sklearn.feature_selection import SelectKBest, f_regression # 使用SelectKBest方法选择前两个最具预测能力的特征 selector = SelectKBest(f_regression, k=2) X_new = selector.fit_transform(X, y) # 使用新的特征集拟合模型 model.fit(X_new, y) ``` 正则化是指通过加入惩罚项来抑制模型过拟合的方法。sklearn库提供了Ridge、Lasso和ElasticNet等正则化方法。下面是一个使用Ridge方法进行正则化的示例代码: ```python from sklearn.linear_model import Ridge # 创建Ridge模型对象 model = Ridge(alpha=0.1) # 使用数据拟合模型 model.fit(X, y) ``` 其中,alpha是正则化强度的超参数,取值范围为[0, ∞]。alpha越大,惩罚力度越大,模型越不容易过拟合。 好的,以上就是关于Python中使用sklearn库实现多元线性回归模型的建立、评估和调优的介绍。希望对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值