学术中 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,而且计算出来的值应该是一样的。
学术中 R2 的问题_第1张图片
在这里插入图片描述

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

第二:如何通过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中的结果如下图所示。
学术中 R2 的问题_第2张图片

你可能感兴趣的:(基础理论,R2)