第2.4节 线性回归(回归模型评估)
2.4 回归模型评估 2.4.1 常见回归评估指标 2.4.2 回归指标示例代码 2.4.3 小结
2.4 回归模型评估
在2.1~2.3节这3节内容中,笔者介绍了如何建模线性回归(包括多变量与多项式回归)及如何通过sklearn来搭建模型并求解,但是对于一个创建出来的模型应该怎样来对其进行评估呢?换句话说,这个模型到底怎么样呢?
以最开始的房价预测为例,现在假设求解得到了图2-8所示的两个模型与,那么应该选哪一个呢?抑或在不能可视化的情况下,应该如何评估模型的好与坏呢?
在回归任务(对连续值的预测)中,常见的评估指标(Metric)有平均绝对误差(Mean Absolute Error,MAE)、均方误差(Mean Square Error,MSE)、均方根误差(Root Mean Square Error,RMSE)、平均绝对百分比误差(Mean Absolute Percentage Error,MAPE)和决定系数(Coefficient of Determination)等,其中用得最为广泛的是MAE和MSE。下面笔者依次来对这些指标进行一个大致的介绍,同时在所有的计算公式中,均表示样本数量、均表示第个样本的真实值、均表示第个样本的预测值。
2.4.1 常见回归评估指标
1.平均绝对误差(MAE)
MAE用来衡量预测值与真实值之间的平均绝对误差,定义如下:
其中,其值越小表示模型越好,实现代码如下:
def MAE(y, y_pre):
return np.mean(np.abs(y - y_pre))
2. 均方误差(MSE)
MSE用来衡量预测值与真实值之间的误差平方,定义如下:
其中,其值越小表示模型越好,实现代码如下:
def MSE(y, y_pre):
return np.mean((y - y_pre) ** 2)
3. 均方根误差(RMSE)
RMSE是在MSE的基础之上取算术平方根而来,其定义如下:
其中,其值越小表示模型越好,实现代码如下:
def RMSE(y, y_pre):
return np.sqrt(MSE(y, y_pre))
4. 平均绝对百分比误差(MAPE)
MAPE和MAE类似,只是在MAE的基础上做了标准化处理,其定义如下:
其中,其值越小表示模型越好,实现代码如下:
def MAPE(y, y_pre):
return np.mean(np.abs((y - y_pre) / y)) * 100
5. R2评价指标
决定系数R2是线性回归模型中sklearn默认采用的评价指标,其定义如下:
其中,其值越大表示模型越好,表示真实值的平均值,实现代码如下:
def R2(y, y_pre):
u = np.sum((y - y_pre) ** 2)
v = np.sum((y - np.mean(y)) ** 2)
return 1 - (u / v)
2.4.2 回归指标示例代码
有了这些评估指标后,在对模型训练时就可以选择其中的一些指标对模型的精度进行评估了。这里以前面波士顿房价的预测结果为例进行示例,完整代码见Book/Chapter02/04_metrics_boston_price.py
文件,代码如下:
def train(x, y):
model = LinearRegression()
model.fit(x, y)
y_pre = model.predict(x)
print("MAE:{},MSE:{}".format(MAE(y, y_pre),MSE(y,y_pre)))
#MAE: 3.27, MSE:21.89
从上述代码的输出结果可以看到,此时模型对应的MAE和MSE评价指标分别为3.27和21.89。
2.4.3 小结
在本节中,笔者详细地介绍了如何评价一个回归模型的优与劣,以及一些常用的评估指标和实现方法。最后,笔者还通过波士顿房价预测示例来展示了评价指标的用法。到此,对于线性回归模型在整个阶段一部分的内容就介绍完了。在2.5节中,笔者将介绍如何通过梯度下降算法来求解目标函数,以及这个目标函数的由来。