文章目录

  • 拟合优度/R-Squared
  • 校正决定系数(Adjusted R-square)
  • 均方误差(MSE)
  • 均方根误差(RMSE)
  • 误差平方和(SSE):The sum of squares due to error
  • 平均绝对误差(MAE)
  • 平均绝对百分比误差(MAPE)
  • 代码



对于回归模型效果的判断指标经过了几个过程,从SSE到R-square再到Ajusted R-square, 是一个完善的过程。

拟合优度/R-Squared

拟合优度(Goodness of Fit)是指回归直线对观测值的拟合程度。度量拟合优度的统计量是可决系数(Coefficient of Determination)R²。可决系数,亦称测定系数、确定系数、决定系数、可决指数。
对于m个样本拟合优度R语言代码 拟合优度rss_数据集
某模型的估计值为拟合优度R语言代码 拟合优度rss_MSE_02

计算样本的总平方和TSS(Total Sum of Squares):
拟合优度R语言代码 拟合优度rss_拟合优度R语言代码_03
样本伪方差的m倍拟合优度R语言代码 拟合优度rss_拟合_04

计算残差平方和RSS(Residual Sum of Squares):
拟合优度R语言代码 拟合优度rss_MSE_05
注:RSS即误差平方和SSE(Sum of Squares Error)。

定义拟合优度R语言代码 拟合优度rss_拟合优度R语言代码_06

拟合优度R语言代码 拟合优度rss_拟合优度R语言代码_07

注:拟合优度R语言代码 拟合优度rss_拟合优度R语言代码_08越大,拟合效果越好。拟合优度R语言代码 拟合优度rss_拟合优度R语言代码_08的最优值为1,若模型预测为随机值,拟合优度R语言代码 拟合优度rss_拟合优度R语言代码_08有可能为负值。若预测值恒为样本期望,拟合优度R语言代码 拟合优度rss_拟合优度R语言代码_08为0。理论上取值范围(-∞,1],正常取值范围为[0 1]。实际操作中通常会选择拟合较好的曲线计算R²,因此很少出现-∞。越接近1,表明方程的变量对y的解释能力越强,这个模型对数据拟合的也较好。越接近0,表明模型拟合的越差。经验值:>0.4, 拟合效果好。

数学理解:如果只用分子当做评价指标,存在两个缺点:1、样本数据在100左右的数据集和样本在1000左右的数据集的评价指标没有可比性。2、对离散值的影响比较大。但是除上分母之后可以有效解决这两个缺点。分母理解为原始数据的离散程度,分子为预测数据和原始数据的误差,二者相除可以消除原始数据离散程度的影响。
缺点:数据集的样本越大,R²越大,因此,不同数据集的模型结果比较会有一定的误差。

校正决定系数(Adjusted R-square)

Adjusted R-square:Degree-of-freedom adjusted coefficient of determination。

拟合优度R语言代码 拟合优度rss_拟合优度R语言代码_12


n为样本数量,p为特征数量

消除了样本数量和特征数量的影响。

均方误差(MSE)

MSE (Mean Squared Error)叫做均方误差,真实值-预测值 然后平方之后求和平均,衡量观测值与真实值之间的偏差。

拟合优度R语言代码 拟合优度rss_拟合_13

均方根误差(RMSE)

RMSE(Root Mean Squard Error)均方根误差,RMSE其实是MSE开根号,两者实质一样,但RMSE能更好的描述数据。因为MSE单位量级和误差的量级不一样,而RMSE跟数据是一个级别的,级别一样更容易去感知数据。

缺点:易受异常值的影响。

拟合优度R语言代码 拟合优度rss_MSE_14

误差平方和(SSE):The sum of squares due to error

拟合优度R语言代码 拟合优度rss_数据集_15


特点:同样的数据集的情况下,SSE越小,误差越小,模型效果越好。

缺点:SSE数值大小本身没有意义,随着样本增加,SSE必然增加,也就是说,不同的数据集的情况下,SSE比较没有意义。

平均绝对误差(MAE)

MAE(Mean Absolute Error)平均绝对误差

拟合优度R语言代码 拟合优度rss_拟合优度R语言代码_16

平均绝对百分比误差(MAPE)

平均绝对百分比误差(Mean Absolute Percentage Error),与RMSE相比,更加鲁棒,因为MAPE对每个点的误差进行了归一化。

拟合优度R语言代码 拟合优度rss_MSE_17

代码

scikit-learn中的各种衡量指标

from sklearn.metrics import mean_squared_error #均方误差
from sklearn.metrics import mean_absolute_error #平方绝对误差
from sklearn.metrics import r2_score#R square
#调用
mean_squared_error(y_test,y_predict)
mean_absolute_error(y_test,y_predict)
r2_score(y_test,y_predict)

手写各种衡量指标

# MSE
y_preditc=reg.predict(x_test) #reg是训练好的模型
mse_test=np.sum((y_preditc-y_test)**2)/len(y_test) #跟数学公式一样的
# RMSE
rmse_test=mse_test ** 0.5
# MAE
mae_test=np.sum(np.absolute(y_preditc-y_test))/len(y_test)
# R Squared
1- mean_squared_error(y_test,y_preditc)/ np.var(y_test)