线性回归(模型的评估)
1 前言
前面两篇文章笔者介绍了如何建模线性回归(包括多变量与多项式回归)、如何通过sklearn搭建模型并求解。但是对于一个求解出来的模型我们应该怎样来对其进行评估呢?换句话说,你这个模型到底怎么样?
以最开始的房价预测为例,现在假设你求解得到了图中所示的两个模型与,那么应该选哪一个呢?亦或是在不能可视化的情况下,应该来如何评估模型的好与坏呢?
2 评估指标
在回归任务(对连续值的预测)中,常见的评估指标(Metric)有:平均绝对误差(Mean Absolute Error,MAE)、均方误差(Mean Square Error,MSE)、均方根误差(Root Mean Square Error,RMSE)和平均绝对百分比误差(Mean Absolute Percentage Error,MAPE),其中用得最为广泛的就是MAE和MSE。下面依次来进行一个大致的介绍,同时对于下面所有的计算公式:均表示样本数量、均表示第个样本的真实值、均表示第个样本的预测值。
2.1 常见指标
-
平均绝对误差(MAE)
MAE用来衡量预测值与真实值之间的平均绝对误差,MAE越小表示模型越好,其定义如下:
def MAE(y, y_pre):
return np.mean(np.abs(y - y_pre))
-
均方误差(MSE)
MSE也许是回归中最普通的评价指标,MSE越小表示模型越好,其定义如下:
看到,有人肯定会说这不是线性回归的目标函数吗?不错,公式(2)既可以作为目标函数也可以用作评 估指标。
def MSE(y, y_pre):
return np.mean((y - y_pre) ** 2)
-
均方根误差(RMSE)
RMSE是在MSE的基础之上开根号而来,RMSE越小表示模型越好,其定义如下:
def RMSE(y, y_pre):
return np.sqrt(MSE(y, y_pre))
-
平均绝对百分比误差(MAPE)
MAPE和MAE类似,只是在MAE的基础上做了标准化处理,MAPE越小表示模型越好,其定义如下:
def MAPE(y, y_pre):
return np.mean(np.abs((y - y_pre) / y))
-
评价指标
尽管如此,但是sklearn在实现线性回归时默认采用了指标,越大表示模型越好,其定义如下:
其中表示真实值的平均值。可能的好处在于其结果进行了归一化,更容易看出模型间的差距。
def R2(y, y_pre):
u = np.sum((y - y_pre) ** 2)
v = np.sum((y - np.mean(y_pre)) ** 2)
return 1 - (u / v)
2.2 代码示例
def load_data():
data = load_boston()
x = data.data
y = data.target
return x, y
def train(x, y):
model = LinearRegression()
model.fit(x, y)
y_pre = model.predict(x)
print("model score: ", model.score(x, y))
print("MAE: ", MAE(y, y_pre))
print("MSE: ", MSE(y, y_pre))
print("MAPE: ", MAPE(y, y_pre))
print("R^2: ", R2(y, y_pre))
if __name__ == '__main__':
x, y = load_data()
train(x, y)
#结果:
#model score: 0.7406426641094094
#MAE: 3.270862810900317
#MSE: 21.894831181729206
#MAPE: 0.16417298806489977
#R^2: 0.7406426641094093
3 总结
通过上面两个小节,笔者详细的介绍了如何评价一个回归模型的好坏,以及一些常用的评估指标和实现方式。最后,笔者还通过了一个房价预测示例来展示了评价指标的用法。下一篇文章笔者将继续介绍如何通过梯度下降算法来求解目标函数,以及这个目标函数的由来。本次内容就到此结束,感谢阅读!
若有任何疑问,请发邮件至aaa@qq.com并附上文章链接,青山不改,绿水长流,月来客栈见!
引用
-
示例代码与练习: https://github.com/moon-hotel/MachineLearningWithMe
-
吴恩达机器学习
更多内容欢迎扫码关注公众号月来客栈!
上一篇: 文本特征提取之词袋模型
下一篇: IDEA配置