线性回归模型评估

通过几个参数验证回归模型

SSE(和方差,误差平方和) :The sum of squares due to errorMSE(均方差,方差):Mean squared errorRMSE(均方根,标准差):Root mean squared errorR-square(确定系数):Coefficient of determination(主要用R方来做评估)

1.SSE(和方差)

该统计参数计算的是拟合数据和原始数据对应点的误差的平方和,计算公式如下:

SSE越接近于0,说明模型选择和拟合更好,数据预测也越成功。

2.MSE(均方差)

该统计参数是预测数据和原始数据对应点误差的平方和的均值,也就是SSE/n,和SSE没有太大的区别,计算公式如下:

3.RMSE(均方根)

该统计参数,也叫回归系数的拟合标准差,是MSE的平方根,计算公式如下:

在这之前,我们所有的误差参数都是基于预测值(y_hat)和原始值(y)之间的误差(即点对点)。从下面开始是所有的误差都是相对原始数据平均值(y_ba)而展开的(即点对全)!!!

4.R-square(确定系数)

R -square越接近1,越好,大于0.8就不错了。

在讲确定系数之前,我们需要介绍另外两个参数SSR和SST,因为确定系数就是由它们两个决定的

(1)SSR:Sum of squares of the regression,即预测数据与原始数据均值之差的平方和,公式如下:

(2)SST:Total sum of squares,即原始数据和均值之差的平方和,公式如下:

细心的读者会发现,SST=SSE+SSR,呵呵只是一个有趣的问题。而我们的“确定系数”是定义为SSR和SST的比值,故

其实“确定系数”是通过数据的变化来表征一个拟合的好坏。由上面的表达式可以知道“确定系数”的正常取值范围为[0 1],越接近1,表明方程的变量对y的解释能力越强,这个模型对数据拟合的也较好。

附代码:

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

%matplotlib inline

from sklearn import metrics

from sklearn.linear_model import LinearRegression

#random_state=1指的是伪随机数生成器的种子

#创建数据

rng = np.random.RandomState(1)

xtrain = 10 * rng.rand(30)#生成30个数

ytrain = 8 + 4*xtrain + rng.rand(30)*3 #生成30个数,与上面30个数不同

#创建模型,用训练集拟合模型

model = LinearRegression()

model.fit(xtrain[:,np.newaxis],ytrain)#np.newaxis插入新维度,xtrain给的是一列数据

ytest = model.predict(xtrain[:,np.newaxis]) # ytest = 根据X评估出来的y值

mse = metrics.mean_absolute_error(ytrain,ytest)#均方差

rmse = np.sqrt(mse)#均方根

print(mse)

print(rmse)

ssr = ((ytest - ytrain.mean())**2).sum() # 预测数据和原始均值之差 的平方和

sst = ((ytrain - ytrain.mean())**2).sum() # 原始数据 和 均值之差 的平方和

r2 = ssr/sst

print(r2)

结果:

0.7797031388892226

0.8830080061297421

0.9946452159695

第二种计算R2的方式(确定系数)

r22 = model.score(xtrain[:,np.newaxis],ytrain)

print(r22)

结果:

0.9946452159694995