回归模型评价指标:MSE、RMSE、MAE、 R 2R^2 R2 score
回归模型评价指标:MSE、RMSE、MAE、R2 score
- 前言
- 平均绝对误差(MAE)
- 均方误差(MSE)
- 均方根误差(RMSE)
- 决定系数( R 2R^2 R2 score)
- R2 R^2R2( R2 R^2R2 score)-深度研究
- 校正决定系数(Adjusted R-Square)
- 统计学理论
- 代码实现
- sklearn库调用模型评估
- 原生实现
- 应用
- 总结
前言
提示:
回归模型的性能的评价指标主要有:RMSE(平方根误差)、MAE(平均绝对误差)、MSE(平均平方误差)、R2_score。但是当量纲不同时,RMSE、MAE、MSE难以衡量模型效果好坏,这就需要用到R2_score。
平均绝对误差(MAE)
(MAE)Mean Absolute Error,是绝对误差的平均值,能更好地反映预测值误差的实际情况。
均方误差(MSE)
MSE(mean-square error) 该统计参数是预测数据和原始数据对应点误差的平方和的均值。
均方根误差(RMSE)
Root Mean Square Error求均方误差的根号
决定系数( R2 R^2R2 score)
决定系数R2(coefficient of determination),也称判定系数或者拟合优度。它是表征回归方程在多大程度上解释了因变量的变化,或者说方程对观测值的拟合程度如何。拟合优度的有效性通常要求:自变量个数:样本数>1:10。
R2 R^2R2 score决定系数,反映因变量的全部变异能通过回归关系被自变量解释的比例。
根据 R-Squared 的取值,来判断模型的好坏,其取值范围为[0,1]:
- 如果结果是 0,说明模型拟合效果很差;
- 如果结果是 1,说明模型无错误。
一般来说,R-Squared 越大,表示模型拟合效果越好。R-Squared 反映的是大概有多准,因为,随着样本数量的增加,R-Square必然增加,无法真正定量说明准确程度,只能大概定量。
所以要想决定系数R2越接近1,必须满足MSE越小,也就是真实值与预测值相差不大,也就是模型拟合程度高,同时var方差越大,也就是我们的样本离散程度大,对应的我们实际采样过程中,就是要求样本是随机性,以及全面性,覆盖度广。
注意
- 决定系数适用于线性回归,单变量或者多元线性;y=ax或者y=ax1+bx2…; – 拟合模型是非线性的,不能用决定系数来评价其拟合效果,例如:BP神经网络;
- 当拟合程度不行,可以调整参数或者权重-例如a,b,使预测值与真实值越接近。
- 其中,分子部分表示真实值与预测值的平方差之和,类似于均方差 MSE;分母部分表示真实值与均值的平方差之和,类似于方差 Var。
R2 R^2R2( R2 R^2R2 score)-深度研究
对于 R2 R^2R2可以通俗地理解为使用均值作为误差基准,看预测误差是否大于或者小于均值基准误差。
- R2_score = 1,样本中预测值和真实值完全相等,没有任何误差,表示回归分析中自变量对因变量的解释越好。
- R2_score =0。此时分子等于分母,样本的每项预测值都等于均值。
- R2_score不是r的平方,也可能为负数(分子>分母),模型等于盲猜,还不如直接计算目标变量的平均值。
#根据公式,我们可以写出r2_score实现代码 **1- mean_squared_error(y_test,y_preditc)/ np.var(y_test)**也可以直接调用sklearn.metrics中的r2_score**sklearn.metrics.r2_score(y_true, y_pred, sample_weight=None, multioutput='uniform_average')**> y_true:观测值 > y_pred:预测值 > sample_weight:样本权重,默认None> multioutput:多维输入输出,可选‘raw_values’, ‘uniform_average’,‘variance_weighted’或None。默认为’uniform_average’;> raw_values:分别返回各维度得分 uniform_average:各输出维度得分的平均> variance_weighted:对所有输出的分数进行平均,并根据每个输出的方差进行加权。
r2_score: 0.47
r2_score偏小,预测效果一般。
注意事项
1、 R2 R^2R2 一般用在线性模型中(非线性模型也可以用)
2、 R2 R^2R2不能完全反映模型预测能力的高低,某个实际观测的自变量取值范围很窄,但此时所建模型的R2 很大,但这并不代表模型在外推应用时的效果肯定会很好。
3、数据集的样本越大,R²越大,因此,不同数据集的模型结果比较会有一定的误差,此时可以使用Adjusted R-Square (校正决定系数),能对添加的非显著变量给出惩罚:
n是样本的个数,p是变量的个数
校正决定系数(Adjusted R-Square)
其中,n 是样本数量,p 是特征数量。
Adjusted R-Square 抵消样本数量对 R-Square的影响,做到了真正的 0~1,越大越好。
python中可以直接调用。
统计学理论
方差(variance):
计算公式:S2=1/n [(x1-X)2+(x2-X)2+(x3-X)2+…(xn-X)2] (X表示平均数)
方差在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。
概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。
统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。
代码实现
sklearn库调用模型评估
#导入相应的函数库from sklearn import datasetsfrom sklearn.model_selection import train_test_splitfrom sklearn.ensemble import RandomForestRegressorimport numpy as npimport pandas as pd# 使用sklearn调用衡量线性回归的MSE 、 RMSE、 MAE、r2from math import sqrtfrom sklearn.metrics import mean_absolute_errorfrom sklearn.metrics import mean_squared_errorfrom sklearn.metrics import r2_scoreprint("mean_absolute_error:", mean_absolute_error(y_test, y_predict))print("mean_squared_error:", mean_squared_error(y_test, y_predict))print("rmse:", sqrt(mean_squared_error(y_test, y_predict)))print("r2 score:", r2_score(y_test, y_predict))
原生实现
# 衡量线性回归的MSE 、 RMSE、 MAE、r2from math import sqrtmse = np.sum((y_test - y_predict) ** 2) / len(y_test)rmse = sqrt(mse)mae = np.sum(np.absolute(y_test - y_predict)) / len(y_test)r2 = 1-mse/ np.var(y_test)#均方误差/方差print(" mae:",mae,"mse:",mse," rmse:",rmse," r2:",r2)
应用
y_test1=np.array(Y_true_3[:,0:1])y_predict1=np.array(predict[:,0])y_test2=np.array(Y_true_3[:,1:2])y_predict2=np.array(predict[:,1])print("ROP : R2:%.4f"% r2_score(y_test1, y_predict1)," MSE:%.4f"%mean_squared_error(y_test1, y_predict1),"RMSE:%.4f" % calc_rmse(y_test1, y_predict1))print("Torque: R2:%.4f"% r2_score(y_test2, y_predict2),"MSE:%.4f"%mean_squared_error(y_test2, y_predict2),"RMSE:%.4f" % calc_rmse(y_test2, y_predict2))
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。