Python3入门机器学习
3.5 衡量线性回归法的指标:MSE,RMSE和MAE
1.线性回归算法的评测:
(1).均方误差MSE(Mean Square Error):
(2).均方根误差RMSE(Root Mean Squared Error):
均方根误差RMSE很好的解决了量纲的问题。
(3).平均绝对误差MAE(Mean Absolute Error):
2.以上三个指标的过程:
(1).首先准备数据,这里我们用sklearn为我们提供的波士顿的房产的数据:
可以观察到这个数据集有13个特征,而我们只选取“房间数量这一个特征”,对数据进一步处理:
有一些点为最大值50,并不真实,将它们去掉:
(2).再将数据集分为训练数据集和测试数据集,使用简单线性回归法,得到参数a和b,然后用测试数据集来看预测的误差:
(3).分别用以上三个指标来评测误差:
3.根据以上的过程,自己尝试封装三种指标的评测方法:
def mean_squared_error(y_true, y_predict):
"""计算y_true和y_predict之间的MSE"""
assert len(y_true) == len(y_predict), \
"the size of y_true must be equal to the size of y_predict"
return np.sum((y_true - y_predict)**2) / len(y_true)
def root_mean_squared_error(y_true, y_predict):
"""计算y_true和y_predict之间的RMSE"""
return sqrt(mean_squared_error(y_true, y_predict))
def mean_absolute_error(y_true, y_predict):
"""计算y_true和y_predict之间的MAE"""
assert len(y_true) == len(y_predict), \
"the size of y_true must be equal to the size of y_predict"
return np.sum(np.absolute(y_true - y_predict)) / len(y_true)
4.使用scikit-learn中的MSE和MAE:
5.RMSE vs MAE:
RMSE和MAE的量纲是一样的,都是原始数据中y对应的那个量纲。但是在具体的实践中我们会发现RMSE比MAE要大一些,这是为什么呢?
其实通过以上的式子就可以理解,原因就在于RMSE是将这个错误值平方,将这些平方累加后再开跟。如果我们的错误值非常大的话,比如相差100,再平方差距就扩大到了10000,也就是说RMSE有放大预测结果和真实结果之间较大的那个差距的趋势,而MAE没有这样的趋势,它直接反应的就是样本的预测结果和真实结果之间的这一个差距。
也正是因为这个原因,从某种程度上来讲,我们尽量的让RMSE的值更加小,相对来讲它的意义更大一些,因为其实这就意味着我们整个样本的错误中最大的错误值相应的比较小。