Python sci-kit learn (metrics): r2_score和explained_variance_



我注意到r2_scoreexplained_variance_score都是内置的sklearn.metrics方法来解决回归问题。

我一直认为r2_score是模型解释的方差百分比。与explained_variance_score有何不同?

什么时候你会选择一个而不是另一个?

谢谢!

我发现的大多数答案(包括这里)都强调R2和Explained Variance Score之间的差异,即平均残差(即误差均值)。

然而,还有一个重要的问题,那就是:我到底为什么需要考虑误差均值?


复习:

R2:是决定系数,它测量由(最小二乘)线性回归解释的变异量。

为了评估y预测值,您可以从不同的角度来看它,如下所示:

方差

<子> actual_y × R <一口> 2 <子> actual_y = 方差 <子> predicted_y

因此直观地说,R2越接近1, actual_y和predicted_y就越具有相同的方差(即。)


如前所述,主要区别在于误差均值;如果我们看一下公式,我们会发现这是真的:

R2 = 1 - [(Sum of Squared Residuals / n) / Variancey_actual]
Explained Variance Score = 1 - [Variance(Ypredicted - Yactual) / Variancey_actual]

Variance(Ypredicted - Yactual) = (Sum of Squared Residuals - Mean Error) / n 
所以,显然唯一的区别是我们从第一个公式中减去平均误差 !…但是为什么呢?


当我们比较R2得分解释方差得分时,我们基本上是在检查平均误差;因此,如果R2 =解释方差得分,这意味着:平均误差= !

Mean Error反映了估计量的趋势,即偏估计vs .s无偏估计


中h2含量> <摘要:

如果你想有无偏估计器,所以我们的模型不会低估或高估,你可以考虑考虑误差均值

好,看看这个例子:

In [123]:
#data
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
In [124]:
#what explained_variance_score really is
1-np.cov(np.array(y_true)-np.array(y_pred))/np.cov(y_true)
Out[124]:
0.95717344753747324
In [125]:
#what r^2 really is
1-((np.array(y_true)-np.array(y_pred))**2).sum()/(4*np.array(y_true).std()**2)
Out[125]:
0.94860813704496794
In [126]:
#Notice that the mean residue is not 0
(np.array(y_true)-np.array(y_pred)).mean()
Out[126]:
-0.25
In [127]:
#if the predicted values are different, such that the mean residue IS 0:
y_pred=[2.5, 0.0, 2, 7]
(np.array(y_true)-np.array(y_pred)).mean()
Out[127]:
0.0
In [128]:
#They become the same stuff
print metrics.explained_variance_score(y_true, y_pred)
print metrics.r2_score(y_true, y_pred)
0.982869379015
0.982869379015

所以,当平均残差为0时,它们是相同的。选择哪一个取决于你的需要,也就是说,假设为0,平均残差是否为0?

相关内容

  • 没有找到相关文章