gpt4 book ai didi

python - 使用 numpy 和 sklearn 的 R^2(决定系数)计算给出了不同的结果

转载 作者:行者123 更新时间:2023-12-05 04:41:18 29 4
gpt4 key购买 nike

我需要计算线性回归模型的决定系数。

我得到了一个奇怪的东西,使用 definition 计算的结果和 numpy 函数不同于 sklearn.metrics.r2_score结果。此代码显示了不同之处:

import numpy as np
from sklearn.metrics import r2_score

y_true = np.array([2, -0.5, 2.5, 3, 0])
y_pred = np.array([2.5, 0.0, 3, 8, 0])

r2_score(y_true, y_pred)

>>> -1.6546391752577323
def my_r2_score(y_true, y_pred):
return 1 - np.sum((y_true - y_pred) ** 2) / np.sum((np.average(y_true) - y_true) ** 2)

def my_r2_score_var(y_true, y_pred):
return 1 - np.var(y_true - y_pred) / np.var(y_true)

print(my_r2_score(y_true, y_pred))
print(my_r2_score_var(y_true, y_pred))

>>>-1.6546391752577323
>>>-0.7835051546391754

任何人都可以解释这种差异吗?

最佳答案

my_r2_score_var 是错误的,因为 np.sum((y_true - y_pred) ** 2)/5 不等于 np.var(y_true - y_pred).

>>> np.sum((y_true - y_pred) ** 2)/5
5.15
>>> np.var(y_true - y_pred)
3.46

你用 np.var(y_true - y_pred) 做的是:

>>> np.sum(((y_true - y_pred) - np.average(y_true - y_pred))**2)/5
3.46

np.sum((y_true - y_pred) ** 2) 是正确的 RSS。

您假设 np.var(y_true - y_pred) 是平均 RSS(此处为 RSS/5),但事实并非如此。

但是,np.var(y_true) 恰好是平均 TSS。所以你把 1 - RSS/TSS 公式的 RSS 部分弄错了。

关于python - 使用 numpy 和 sklearn 的 R^2(决定系数)计算给出了不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70110996/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com