1. 均方误差
(Mean Squared Error,MSE)
观测值与真值偏差的平方和与观测次数的比值:
M S E = 1 m ∑ i = 1 m ( f i − y i ) 2 MSE = \frac{1}{m}\sum_{i=1}^{m}(f_i-y_i)^2 MSE=m1∑i=1m(fi−yi)2
这就是线性回归中最常用的损失函数,线性回归过程中尽量让该损失函数最小。那么模型之间的对比也可以用它来比较。
MSE可以评价数据的变化程度,MSE的值越小,说明预测模型描述实验数据具有更好的精确度。
2. 均方根误差(标准误差)
(Root Mean Squard Error,RMSE)
标准差是方差的算术平方根。
标准误差是均方误差的算术平方根。
标准差是用来衡量一组数自身的离散程度,而均方根误差是用来衡量观测值同真值之间的偏差,它们的研究对象和研究目的不同,但是计算过程类似。
R M S E = 1 m ∑ i = 1 m ( f i − y i ) 2 RMSE =\sqrt{\frac{1}{m}\sum_{i=1}^{m}(f_i-y_i)^2} RMSE=m1∑i=1m(fi−yi)2
它的意义在于开个根号后,误差的结果就与数据是一个级别的,可以更好地来描述数据。标准误差对一组测量中的特大或特小误差反映非常敏感,所以,标准误差能够很好地反映出测量的精密度。这正是标准误差在工程测量中广泛被采用的原因。
3. 平均绝对误差
(Mean Absolute Error,MAE)
平均绝对误差是绝对误差的平均值 :
M A E = 1 m ∑ i = 1 m ∣ f i − y i ∣ MAE = \frac{1}{m}\sum_{i=1}^{m}|f_i-y_i| MAE=m1∑i=1m∣fi−yi∣
平均绝对误差能更好地反映预测值误差的实际情况.
4. R-squared
R 2 = 1 − ∑ i = 1 m ( f i − y i ) 2 ∑ i = 1 m ( y i ‾ − y i ) 2 R^2=1-\frac{\sum_{i=1}^{m}(f_i-y_i)^2}{\sum_{i=1}^{m}(\overline{y_i}-y_i)^2} R2=1−∑i=1m(yi−yi)2∑i=1m(fi−yi)2
上面分子就是我们训练出的模型预测的误差和。
下面分母就是瞎猜的误差和。(通常取观测值的平均值)
如果结果是0,就说明我们的模型跟瞎猜差不多。
如果结果是1。就说明我们模型无错误。
R 2 R^2 R2介于0~1之间,越接近1,回归拟合效果越好,一般认为超过0.8的模型拟合优度比较高。
化简上面的公式
分子分母同时除以m,那么分子就变成了我们的均方误差MSE,下面分母就变成了方差。
R 2 = 1 − 1 m ∑ i = 1 m ( f i − y i ) 2 1 m ∑ i = 1 m ( y i ‾ − y i ) 2 = 1 − M S E ( f , y ) V a r ( y ) R^2=1-\frac{\frac{1}{m}\sum_{i=1}^{m}(f_i-y_i)^2}{\frac{1}{m}\sum_{i=1}^{m}(\overline{y_i}-y_i)^2}=1-\frac{MSE(f,y)}{Var(y)} R2=1−m1∑i=1m(yi−yi)2m1∑i=1m(fi−yi)2=1−Var(y)MSE(f,y)
5. Python实现
MSE
def rmse(y_test, y_true):
return sp.mean((y_test - y_true) ** 2)
RMSE
def rmse(y_test, y_true):
return sp.sqrt(sp.mean((y_test - y_true) ** 2))
MAE
def mae(y_test, y_true):
return np.sum(np.absolute(y_test - y_true)) / len(y_test)
R 2 R^2 R2
def r2(y_test, y_true):
return 1 - ((y_test - y_true) ** 2).sum() / ((y_true - np.mean(y_true)) ** 2).sum()
sklearn的调用
from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import r2_score
mean_squared_error(y_test,y_predict)
mean_absolute_error(y_test,y_predict)
r2_score(y_test,y_predict)