目录
一、衡量线性回归法的指标
1、 MSE、RMSE、MAE
对于分类问题,我们将原始数据集划分成训练数据集和测试数据集两个部分,并且使用训练数据集训练出模型,然后使用模型来预测测试数据集,然后使用测试数据集自带的真实标签值与预测值进行对比,进而得到分类准确度,利用分类准确度我们可以判定该模型的好坏。
但对于回归算法,如何评判该模型的好坏呢?
在上一小节我们可知,我们将原始数据集划分成训练数据集和测试数据集后,简单线性回归的目标是找到a,b,来使得以下式子的值尽可能小。
因此最后我们衡量的标准就是:
但是该标准与m相关,即测试数据集数量,因此通过改进衡量标准来使得与m无关,即均方差MSE。
但是均方差与量纲有关,因此进一步改进可得均方误差RMSE。
MSE和RMSE质是一样的,虽然结果不一样,区别在于结果对量纲是否有影响。此外线性回归还有另外一个评测标准,叫做平方绝对误差MAE,即真值之间的距离的平均值。
2、R Squared
R方用于衡量模型对数据变异性的解释程度,如下公式:
其中,SS(residual)计算方法是将预测结果减去真值的差值平方求和,相当于使用我们自己的模型产生的错误。而SS(total)就是整个y的平均值减去每一个y的差值平方求和,相当于基本模型(Baseline Model)产生的错误,该模型产生的错误较多。因此,最后用1减去该式子就衡量了该模型没有产生错误的指标。
此外,R2肯定是<=1的,并且R2越大越好,当我们预测模型不犯任何错误时,R2得到最大值1。同时,当我们的模型基本等于基准模型时,R2=0。如果R2<0,说明我们学习的模型还不如基准模型,此时,很有可能我们的数据不存在任何线性关系。对式子进行处理,就可以得到如下式子:
二、波士顿房产数据衡量回归算法的标准
1、加载数据
#导入相关包
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
#导入数据
boston = datasets.load_boston()
x = boston.data
y = boston.target
x = x[y < 50.0] #剔除异常值
y = y[y < 50.0]
2、使用简单线性回归法
#数据集切分
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(x,y,random_state = 666)
#使用sklearn中的线性回归
from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
y_predict = lin_reg.predict(X_test)
3、评估
#MSE
mse_test = np.sum((y_predict - y_test)**2) / len(y_test)
mse_test
#RMSE
from math import sqrt
rmse_test = sqrt(mse_test)
rmse_test
#MAE
mae_test = np.sum(np.absolute(y_predict - y_test)) / len(y_test)
mae_test
#R2
r2 = 1 - mean_squared_error(y_test,y_predict) / np.var(y_test)
r2
4、sklearn的MSE、MAE、R2
from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import r2_score
mse_ = mean_squared_error(y_test,y_predict)
#rmse = sqrt(mse_)
mae_ = mean_absolute_error(y_test,y_predict)
r2_ = r2_score(y_test,y_predict)
#在sklearn中的score函数它也会直接返回一个R2
#r2_ = lin_reg.score(X_test,y_test)
5、RMSE和MAE比较
RMSE和MAE的量纲都是一样的,都是原始数据中y对应的量纲,但在实际中RMSE比MAE的求出结果大,那是因为RMSE是将错误值进行平方后再累加再开根。假如有两个值之间的错误值很大,那么经过平方操作后会更大,即RMSE有放大错误值的趋势。而MAE却没有,它直接反应了样本预测结果与真实结果之间的差距,没有平方操作。因此,由此原因可知,我们尽可能让RMSE的值尽可能小,其意义会更大一些,因为这背后意味着样本的最大错误值比较小。