线性回归模型

以鸢尾花的花瓣长度与宽度为例,实现回归

import numpy as np 
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error,mean_squared_error,r2_score
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt 
#数据的导入与处理
iris = load_iris()
x = iris.data[:,2].reshape(-1,1)
y = iris.data[:,3].reshape(-1,1)
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=np.random.seed(0))
#模型的拟合
lr = LinearRegression()
lr.fit(x_train,y_train)
#预测
y_hat = lr.predict(x_test)

检查模型的特征的权重与截距

print("权重:",lr.coef_)
print("截距:",lr.intercept_)

权重: [[0.41871246]]
截距: [-0.37545151]

绘制拟合的直线

%matplotlib inline
plt.rcParams["font.family"]="SimHei"
plt.rcParams["axes.unicode_minus"]=False
plt.rcParams["font.size"] = 16

fig,ax = plt.subplots(1,2)
fig.set_size_inches(16,7)
ax[0].scatter(x_train,y_train,s=15,c="b",label="训练集")
ax[0].plot(x_train,lr.predict(x_train),c="g",label="训练集")
ax[1].scatter(x_test,y_test,s=15,c="r",label="测试集")
ax[1].plot(x_test,lr.predict(x_test),c="g",label="训练集")
for axn in ax:
    axn.legend()
    axn.set_xlabel("花瓣长度")
    axn.set_ylabel("花瓣宽度")
plt.show()

线性回归算法评估指标MSERMSEMAER方_mse和rmse 代码 线性回归模型评估_拟合


下面来看一下预测值和真实值的差异

plt.figure(figsize=(17,6))
plt.plot(y_test,c="g",marker="o",label="预测值")
plt.plot(y_hat,c="r",marker="*",ls="--",label="预测值")
plt.legend()
plt.ylabel("数据值")
plt.show()

线性回归算法评估指标MSERMSEMAER方_mse和rmse 代码 线性回归模型评估_MSE_02

线性模型的评估

建立好了线性模型之后,最重要的是评估模型的好坏,主要采用一下几个方法来评估模型:

  • MSE(mean_squared_error)
  • RMSE(root_mean_squared_error)
  • MAE(mean_absolute_error)
  • 线性回归算法评估指标MSERMSEMAER方_mse和rmse 代码 线性回归模型评估_拟合_03

MSE

MSE: mean_squared_error ,平均平方误差,即所有样本数据的真实值与预测值之差的平方和的平均值。

线性回归算法评估指标MSERMSEMAER方_mse和rmse 代码 线性回归模型评估_MSE_04

RMSE

RMSE:root_mean_squared_error,即MSE的平方根。

线性回归算法评估指标MSERMSEMAER方_mse和rmse 代码 线性回归模型评估_权重_05

MAE

MAE:mean_absolute_error,平均绝对值误差,即所有样本数据的误差的绝对值之和。

线性回归算法评估指标MSERMSEMAER方_mse和rmse 代码 线性回归模型评估_权重_06

线性回归算法评估指标MSERMSEMAER方_mse和rmse 代码 线性回归模型评估_MSE_07

线性回归算法评估指标MSERMSEMAER方_mse和rmse 代码 线性回归模型评估_MSE_07为决定系数,用来表示模型拟合性的分值,值越高表示模型拟合性越好,在训练集中,线性回归算法评估指标MSERMSEMAER方_mse和rmse 代码 线性回归模型评估_MSE_07的取值范围是[ 0 , 1 ],在测试集中(未知数据),线性回归算法评估指标MSERMSEMAER方_mse和rmse 代码 线性回归模型评估_MSE_07的取值范围是[ 线性回归算法评估指标MSERMSEMAER方_mse和rmse 代码 线性回归模型评估_python_11 , 1 ]。其中公式为

线性回归算法评估指标MSERMSEMAER方_mse和rmse 代码 线性回归模型评估_python_12


其中TSS(total sum of squares)为所有样本数据与均值的差异,是方差的m倍数 (TSS/m 为方差),RSS(residual sum of squares)为所有样本数据误差平方和,是MSE的m倍(RSS / m 为MSE)。

又公式可以看出,当预测值与真实值相同的时候,RSS = 0 ,线性回归算法评估指标MSERMSEMAER方_mse和rmse 代码 线性回归模型评估_MSE_07=1,模型最理想。

python的实现方式:

"""回归模型评价 """
print("均方误差MSE(mean_squared_error):",mean_squared_error(y_test,y_hat))
print("跟均方误差RMSE(root mean_squared_error):",np.sqrt(mean_squared_error(y_test,y_hat)))
print("平均绝对值误差MAE(mean_absolute_error):",mean_absolute_error(y_test,y_hat))
print("训练集R^2:",r2_score(y_train,lr.predict(x_train)))
print("测试集R^2:",r2_score(y_test,y_hat))
print("训练集R^2:",lr.score(x_train,y_train))
print("测试集R^2:",lr.score(x_test,y_test))

特别注意:r2_score 与 lr.score,两种方法均为线性回归算法评估指标MSERMSEMAER方_mse和rmse 代码 线性回归模型评估_MSE_07的值,但是两个传入的参数不一样

线性回归算法评估指标MSERMSEMAER方_mse和rmse 代码 线性回归模型评估_权重_15


线性回归算法评估指标MSERMSEMAER方_mse和rmse 代码 线性回归模型评估_MSE_16

均方误差MSE(mean_squared_error): 0.05335352448031869
跟均方误差RMSE(root mean_squared_error): 0.23098381865472456
平均绝对值误差MAE(mean_absolute_error): 0.1677835275546856
训练集R^2: 0.9381656942757268
测试集R^2: 0.8956126694950287
训练集R^2: 0.9381656942757268
测试集R^2: 0.8956126694950287