• 回归算法的评估指标


    回归算法:对历史数据进行拟合,形成拟合方程。接下来使用该方程对新数据进行预测。下图中红线表示的是一元数据的拟合方程,如果数据是二元数据,那么它的拟合方程就是一个拟合平面,对于更高维的数据,它的拟合方程将更加复杂。

    ​对于回归算法,我们评价它的好坏,就是看它的预测结果与我们的真实结果的差异大小。在回归算法中,我们最常用的评估指标分别是:平均绝对值误差,平均绝对百分比误差、均方误差,均方根误差,可决系数、校正决定系数、误差平方和。

    1.平均绝对值误差

     计算每一个样本的预测值和真实值的差的绝对值,然后求和再取平均值。其公式如下, Yi为真实值, F(Xi)算法的预测值。,可以更好地反映预测值误差的实际情况 ,在线性回归的时候我们的目的就是让这个损失函数最小。

    Python方法:

    1. MAE_1 = np.mean(abs(y_test - prediction))
    2. print(MAE_1)
    3. [out]:3.3446655035987476

    MSE相当于模型中的 损失函数 ,线性回归过程中尽量让该损失函数最小。那么模型之间的对比也可以用它来比较。平均绝对误差可以避免误差相互抵消的问题,因而可以准确反映实际预测误差的大小。MSE可以评价模型的预测精度,MSE的值越小,说明预测模型对于目标的拟合程度越精确。  

     2、平均绝对百分比误差

    范围[0,+∞),MAPE 为0%表示完美模型,MAPE 大于 100 %则表示劣质模型。MAPE 的值越小,说明预测模型拥有更好的精确度。MAPE 是一个百分比值,因此比其他统计量更容易理解。例如,如果 MAPE 为 5,则表示预测结果较真实结果平均偏离 5 %。MAPE 的值越小,说明预测模型拥有更好的精确度。

     

     Python方法:

    1. import numpy as np
    2. def mape(y_true, y_pred):
    3. """
    4. 参数:
    5. y_true -- 测试集目标真实值
    6. y_pred -- 测试集目标预测值
    7. 返回:
    8. mape -- MAPE 评价指标
    9. """
    10. n = len(y_true)
    11. mape = sum(np.abs((y_true - y_pred)/y_true))/n*100
    12. return mape

    平均绝对百分比误差,与RMSE相比,更加鲁棒,因为MAPE对每个点的误差进行了归一化。理论上,MAPE 的值越小,说明预测模型拟合效果越好,具有更好的精确度

     3.均方误差

    计算每一个样本的预测值与真实值差的平方,然后求和再取平均值。一般用来检测模型的预测值和真实值之间的偏差

     Python方法:

    1. MSE_1 = np.mean((y_test - prediction)**2)
    2. print(MSE_1)
    3. [out]:19.831323672063235

    4.均方根误差

    均方根误差就是在均方误差的基础上再开方。即均方误差开根号,方均根偏移代表预测的值和观察到的值之差的样本标准差。将误差的结果就跟数据变成一个级别的。

    python方法:

    1. RMSE_1 = np.sqrt(np.mean((y_test - prediction)**2))
    2. print(RMSE_1)
    3. [out]:4.45323743719816

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

     5.可决系数

    可决系数 R^{2}的值为0~1之间的值。 R^{2} 越接近于1,说明模型的效果越好, R^{2}越接近于0,说明的模型效果越差,当然 R^{2} 也存在负值,此时说明模型的效果非常的差。公式中 \酒吧{y}为 y 的平均值。

    其中,分子部分表示真实值与预测值的平方差之和,类似于均方差 MSE;分母部分表示真实值与均值的平方差之和,类似于方差 Var。上面分子就是我们训练出的模型预测的所有误差,下面分母就是不管什么我们猜的结果就是y的平均数。

    python方法:
    1. R_1 = 1 - np.mean((y_test - prediction)**2)/np.mean((y_test - np.mean(y_test)**2))
    2. print(R_1)
    3. [out]:0.7836295385076281

    根据 R-Squared 的取值,来判断模型的好坏,其取值范围为[0,1]:如果结果是 0,说明模型拟合效果很差;如果结果是 1,说明模型无错误。一般来说,R2 越接近于1,说明回归直线对观测值的拟合程度越好;相反,R2值越小,说明回归直线对观测值的拟合程度越差。

    6、校正决定系数

     其中,n为样本数量,p为特征数量。 取值范围还是负无穷到1,大多是 0~1

    一般来说,R-Squared 越大,表示模型拟合效果越好。R-Squared 反映的是大概有多准,因为,随着样本数量的增加,R-Square必然增加,无法真正定量说明准确程度,只能大概定量。

    Adjusted R-Square 抵消样本数量对 R-Square的影响,做到了真正的 0~1,越大越好。 且越大越好。

    1. R2:r2_score(y_test,y_predict)
    2. Adjusted_R2::1-((1-r2_score(y_test,y_predict))*(n-1))/(n-p-1)

    (机器学习)如何评价回归模型?——Adjusted R-Square(校正决定系数)_远行人_Xu的博客-CSDN博客_adjusted r square表示什么?

    这个式子其实就是将R-Square式子中那个 “一堆除以一堆” 乘以 “一个稍大于1的数” 再被1减。样本数量(接上文flag)会影响“一个稍大于1的数”,故而 抵消样本数量对R-Square的影响 ,从而更能用一个0~1的数字描述回归模型的拟合情况好坏。

    小结:

    1. MAE, MSE, RMSE可以准确的计算出预测结果和真实的结果的误差大小,但却无法衡量模型的好坏程度。但是这些指标可以指导我们的模型改进工作,如调参,特征选择等。
    2. R^{2}的结果可以很清楚的说明模型的好坏,该值越接近于1,表明模型的效果越好。该值越接近于0,表明模型的效果越差。

    3、上面的几种衡量标准针对不同的模型会有不同的值。比如说预测房价, 那么误差单位就是万元。数子可能是3,4,5之类的。那么预测身高就可能是0.1,0.6之类的。没有什么可读性,到底多少才算好呢?不知道,那要根据模型的应用场景来。
    看看分类算法的衡量标准就是正确率,而正确率又在0~1之间,最高百分之百。最低0。很直观,而且不同模型一样的。那么线性回归有没有这样的衡量标准呢?答案是有的。那就是R2
     

  • 相关阅读:
    建行广东省江门市分行服务客户显温度
    驱动开发:内核遍历文件或目录
    机器学习第11天:降维
    基本数据类型和对应的包装类
    《Python编程无师自通》读书笔记
    SpringCloud-7-Spring Boot使用Jetty容器
    java毕业设计血库系统Mybatis+系统+数据库+调试部署
    上周热点回顾(4.24-4.30)
    微信小程序是什么?如何快速搭建一个微信小程序?
    redis使用zset实现数据库多字段排序的一种方式
  • 原文地址:https://blog.csdn.net/qq_40379132/article/details/126291360