python筆記:sklearn r2_score和explained_variance_score的本質區別是什麼?

Q:我知道r2_score表示的是在總變變量中模式解釋的百分比。但是explained_variance_score和它有什麼區別?

A:從公式的差別角度看:

當殘差的均值爲0時,它倆是一樣的。至於用哪個,就看你有沒有假設殘差均值爲0。
——Answered by CT Zhu:


一、先舉個殘差均值不爲0的栗子:
import numpy as np
from sklearn import metrics

y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
print(metrics.explained_variance_score(y_true, y_pred))
print(metrics.r2_score(y_true, y_pred))

# 結果如下
0.957173447537
0.948608137045

# 注意:此處殘差的均值不爲0
print((np.array(y_true) - np.array(y_pred)).mean())
# 結果如下
-0.25
  • explained_variance_score 和r^2其實是:

explained_variance_score=1[Variance(YtureYpred)/VarianceYtrue]explained\_variance\_score = 1- [Variance_{(Y_{ture}-Y_{pred})}/Variance_{Y_{true}}]

r2=1[(Squared_Residuals/n)/VarianceYtrue]r2 = 1-[(\sum Squared\_Residuals/n) / Variance_{Y_{true}}]

# 上邊的例子用numpy這樣實現:
explained_variance_score = 1- np.var( np.array(y_true) - np.array(y_pred) ) / np.var(y_true)
r2 = 1 - ((np.array(y_true) - np.array(y_pred))**2).sum() / (4 * np.array(y_true).var())    

print(explained_variance_score)
print(r2)

# 結果如下
0.95717344753747324
0.94860813704496794

1) r2分母4 * np.array(y_true).var() 的另一種解釋:
依據R2 = 1 - Sum_of_Squares_for_Error/ Sum_of_Squares_for_Total,所以 分母應是總方差SST,即 4 * np.array(y_true).var() = ((y - y.mean())**2).sum(),其中,y 代表 np.array(y_true)

2) explained_variance_score = 1 - np.cov( np.array(y_true)-np.array(y_pred) )/np.cov(y_true)

二、再舉個殘差均值爲0的栗子:
y_ture = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 7]

print((np.array(y_true) - np.array(y_pred)).mean())
# 結果如下
0.0

print(metrics.explained_variance_score(y_true, y_pred))
print(metrics.r2_score(y_true, y_pred))
# 結果入下
0.982869379015
0.982869379015

備註:對於一維數據, 協方差cov/方差var的區別僅僅是自由度的區別,或者說是前者是樣本方差,後者是總體方差。例如:

a = [1, 2, 3, 45]
print(np.cov(a))
print(np.var(a)*len(a)/(len(a)-1))   # 即 cov=離差的平方/(樣本數 -1),var=離差平方/(樣本數)
 # 結果如下:
 462.91666666666663
 462.9166666666667

從含義的差別角度看:Answered by Yahya:

  • 先看R2 / 可決係數 / 判定係數:

– 從公式上看:Variancetrue_y x R2true_y = Variancepred_y,很明顯R2越接近1,效果越好。

– R2的含義,是從最小二乘(就是2次方差)的角度出發,表示實際y值的方差有多大比重被預測y值解釋了。

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