學術中 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中的結果如下圖所示。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章