学术中 R2 的问题

这个博客我想讲三个内容,第一是R2的计算公式,第二是如何通过python计算R2。
**

第一 :R2的计算公式

**
最近一直在纠结一个问题,那就是在回归中,得到的估测结果,和实际值之间的相关性是多少?用什么值来衡量呢?
很自然的想到了R2,毕竟在各种文献中,大家看到的都是这个指标。
那么这个指标怎么计算呢,网上也是有一大堆公式,基本上都是一样的,我这里放几个给大家参考一下。
第一个:https://blog.csdn.net/grape875499765/article/details/78631435
第二个:https://blog.csdn.net/snowdroptulip/article/details/79022532
第三个:https://blog.csdn.net/theonegis/article/details/85991138

注意,在第二个的连接中,R2的计算公式(见下图),右边有两个等于号,也就是说这两个公式,都能计算出来R2,而且计算出来的值应该是一样的。
在这里插入图片描述
在这里插入图片描述

然而我通过代码,将两个公式都计算了一下,但是计算出来的值并不相同。这是我不明白的第一个问题,有清楚的小伙伴,可以帮忙解释一下吧。
**

第二:如何通过python计算R2

**
废话不多说,咱们直接上代码,这是Python版本的。第一个和第二个是按照公式写的版本,第三个是SKLearn中计算R2的版本,这三个函数计算出来的R2都是一样的值。

注意:SKLearn中的计算R2,这里有一个大坑,那就是顺序问题,这个函数中有两个参数,分别是真值和估测值,注意第一个是真值,第二个是估测值,别把顺序弄反了,不然计算出来的结果,是不对的。

```python
def calR_and_R2(y_true,y_predict):
    mean_y_true=np.mean(y_true)
    mean_y_predict=np.mean(y_predict)
    # 计算分子
    print str(len(y_true))
    print str(len(y_predict))
    sigmaFenZi=0
    for i in range(len(y_true)):
        sigmaFenZi=sigmaFenZi+np.square(y_true[i]-y_predict[i])
    # 计算分母
    sigmaFenMu=0
    for i in range(len(y_true)):
        sigmaFenMu=sigmaFenMu+np.square(y_true[i]-mean_y_true)
    # 计算相关系数R2
    R2=1-sigmaFenZi/sigmaFenMu
    print "R2 is "+str(R2)

```python
def performance_metric2(y_true, y_predict):
    """计算并返回预测值相比于预测值的分数"""
    import numpy as np
    arr_true = np.array(y_true)
    y_mean = np.mean(arr_true)
    ssreg = 0
    sstotal = 0
    ssres = 0
    for item in y_predict:
        ssreg += (item - y_mean)**2
    for item in y_true:
        sstotal += (item - y_mean)**2
    for index,item in enumerate(y_true):
        ssres += (item - y_predict[index])**2

    score = 1-(ssres/sstotal)
    print "from net R2 "+str(score)
    return score

```python
def performance_metric(y_true, y_predict):
    from sklearn.metrics import r2_score
    score = r2_score(y_true, y_predict)
    print "from net R2 " + str(score)
    return score

注意:好多同学都会在excel中,将实际值和估测值,通过绘制散点图,然后显示出来公式和R2,但是这里显示的R2和我们用代码计算的R2会有一点细小的差别。下面是用代码计算出来的值为:0.5356349099507338,但是在excel中的结果如下图所示。
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值