本文参考饼干Japson《模型之母:线性回归的评价指标》编写
今天,我们学习线性回归算法的评价指标——MSE、RMSE、MAE、R Square。
一、了解线性回归算法的衡量标准
引用饼干Japson的话。已知训练数据样本x、y,找到a和b的值,使尽可能小 。
实际上是找到训练数据集中最小。
衡量标准是看在测试数据集中y的真实值与预测值之间的差距。
因此我们可以使用下面公式作为衡量标准:
但是这里有一个问题,这个衡量标准是和m相关的。在具体衡量时,测试数据集不同将会导致误差的累积量不同。
首先我们从“使损失函数尽量小”这个思路出发:
对于训练数据集合来说,使尽可能小
在得到a和b之后将代入a、b中。可以使用来作为衡量回归算法好坏的标准。
二、四个指标
2.1 均方误差MSE(Mean Squared Error)
公式:
代码:
def mean_squared_error(y_true,y_predict):
"""计算y_true和y_predict之间的MSE"""
assert y_true.shape[0]==y_predict.shape[0],\
"the size of y_true must be equal to the size of y_predict"
return np.sum((y_true-y_predict)**2)/y_true.shape[0]
2.2 均方根误差RMSE(Root Mean Squarde Error)
为了解决量纲的问题,引入RMSE,公式:
代码:
def root_mean_squared_error(y_true,y_predict):
"""计算y_true和y_predict之间的RMSE"""
return sqrt(mean_squared_error(y_true,y_predict))
2.3 平均绝对误差MAE(Mean Absolute Error)
MAE是非常朴素评测标准,公式:
代码:
def mean_absolute_error(y_true, y_predict):
"""计算y_true和y_predict之间的MAE"""
assert y_true.shape[0]==y_predict.shape[0],\
"the size of y_true must be equal to the size of y_predict"
return np.sum(np.absolute(y_true-y_predict))/y_true.shape[0]
从数学角度来分析,RMSE和MAE的量纲相同,但RMSE的结果较大,这是因为RMSE是将错误值平方,平方操作会放大样本中预测结果和真实结果较大的差距。MAE没有放大。而我们就是要解决目标函数最大差距,因为选RMSE更好一点。
2.4 R Square()
因RMSE和MAE受量纲的局限性影响,无法对不同量纲的模型评价好坏,于是,引入指标。公式:
的好处:
①、对于分子来说,预测值和真实值之差的平方和,即使用我们的模型预测产生的错误。
②、对于分母来说,是均值和真实值之差的平方和,即认为“预测值=样本均值”这个模型(Baseline Model)所产生的错误。
③、我们使用Baseline模型产生的错误较多,我们使用自己的模型错误较少。因此用1减去较少的错误除以较多的错误,实际上是衡量了我们的模型拟合住数据的地方,即没有产生错误的相应指标。
代码:
/def r2_score(y_true,y_predict):
"""计算简单线性回归准确度(R方)"""
return 1- mean_squared_error(y_true,y_predict)/np.var(y_true)
以上代码我们封装在metrics.py文件中。
2.5 总结
①、 小于等于1,可能取负数。
②、越大模型拟合度越高。值在[0.5,0.7)区间说明模型很好,值在[0.7,0.96)区间说明模型非常好,值大于等于0.96需要考虑模型是否过拟合。
③、小于0,说明模型很糟糕,连’瞎猜’的效果都不如。
附上代码.