机器学习的评价指标决定系数的理解

问题引入

在做机器学习时,需要做模型的优劣进行合理评价。其中MSE,MAPE等评价指标是从数值层面评价模型的精确程度,而R2(2是右上角标,不会设置)可以从统计学角度,整体评估模型的拟合优度。这里的R2称为决定系数,有的地方称为判定系数。但是在做深度学习模型时,笔者尝试用两种方式计算决定系数,但是计算获取的答案不一致,因此展开探究。

决定系数的数学定义

在这里插入图片描述
其实我们从宏观意义的层面去理解,可以发现,SSR是预测数组与真实均值的波动差距和,SST是真实的方差,大致意思就是你的模型的预测数组能否达到数据本身的波动程度,或者是达到百分之多少。越靠近1当然越好。
在这里插入图片描述

深度学习中的决定系数

那在深度学习中,决定系数也是可以在一定程度上表征模型拟合程度的。但是在用图1中的两种算法计算决定系数时,发现计算结果不一致。代码如下:

def r2_ob(y_actual, y_predicted):
    sse = np.sum((y_actual - y_predicted) ** 2)
    ssr = np.sum((y_predicted - np.mean(y_actual)) ** 2)
    sst = np.sum((y_actual - np.mean(y_actual)) ** 2)
    r2 = ssr / sst  # 第二种算法是1-sse/sst
    return r2

当然更加简洁的算法是直接利用sklearn中的r2_score()直接进行计算,值得注意的是,这个函数默认是利用第二种算法计算的:

train_r2 = r2_score(train_true_y, train_pre_y)

在深度学习模型中(如神经网络回归预测),两种算法的结果并不一致。根本原因在于图1第三个等号能够成立的前提是线性模型,具体的原因和详细的推导可以参考其他的博客和资料。深度学习模型的典型特征就是非线性,因此导致两个算法计算出来的决定系数不相同,这也是很多资料里提到决定系数大多适用于机器学习模型(狭义的机器学习模型),如岭回归,支持向量机等。有的小伙伴会问,这些机器学习模型好像也不是线性的把,这里的线性又是广义的线性,包含高次幂的多项式。
那又有小伙伴问了,那在做深度学习模型中,到底用哪一个呢?我的建议是第一个,但是跟随你的模型,用哪个都可以,前提是把公式写清楚,别张冠李戴了,那就是学术错误了。

深度学习中决定系数的奇怪现象

一般而言,决定系数范围为:[0,1],但是有时会有很多不在正常范围的数值。如果你的模型很奇怪,就有可能预测数组的相对波动程度还大于真实方差,在第一种算法中,表现在决定系数上就是决定系数大于1了;在第二种算法中,决定系数就为负数了。所以如果你的深度学习模型出现了这些数值,那就是你的模型波动幅度太厉害了,看看是不是以下情况:1.网络太复杂,过拟合了;2.数据量太小;3.数据分布不平衡,测试集的真实数据波动明显比训练集小。

深度学习中其他容易与之混淆的评价指标

有人说R2,是不是相关系数r的平方啊。答案并不是,因为这两个指标完全是从两个不同的统计学层面去考虑和计算的。当然预测值和真实值的相关性也可以作为模型评价指标啊:

train_r = np.corrcoef(train_true_y, train_pre_y)
train_r = train_r.reshape(4, 1)
train_r = train_r[1]  # 获取相关性矩阵中的r值

又有人说R2,(人有点多)是不是预测值和真实值线性拟合时的斜率的平方啊。答案也不是,这也是不同的统计学角度。但是搞过深度学习模型的小伙伴知道,一般我们要把真实值作为x轴,预测值为y轴,进行线性拟合,用Origin画个图,放在论文里面,一般会有拟合的斜率。这个值和相关性接近,但仍是不同,论文里也可以提这个数值。
在这里插入图片描述

结语

这些概念都很相似,容易弄混,在此记录一下,也希望帮助到一些像前几天在寻寻觅觅的我一样的小童靴,如有异议,可以在评论区提,提了我也不一定回,哈哈哈

  • 7
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值