首页 > 解决方案 > 线性回归的 Python sklearn r2_score 混淆

问题描述

对不起,如果这是一个微不足道的问题。使用 sklearn 库,可以计算以下列表的决定系数 r 平方:

y_true = [200,280,320,346.47]

y_pred = [228.6,307.8,414.4,376.5]

print(r_score(y_true,y_pred))

[输出:0.07]

使用线性回归工具时,Microsoft Excel 对 R 平方进行了不同的定义:R² 的返回值约为 0.86

sklearn 或其他地方是否有任何资源可以让我使用 Excel 对 R² 的定义?提前致谢。

标签: pythonscikit-learn

解决方案


来自wiki R2 是因变量中的方差比例可以从自变量中预测。

如果你y_pred的确实是预测值,那么我们可以根据这个公式计算:

在此处输入图像描述

import numpy as np

ss_total = np.var(np.array(y_true))*len(y_true)
ss_res = ((np.array(y_pred) - np.array(y_true))**2).sum()
print(1 - ss_res/ss_total)

0.06853942803971502

这正是 sklearn 返回的内容:

from sklearn.metrics import r2_score
print(r2_score(y_true,y_pred))
0.06853942803971502

当您将其放入excel时,您正在将您的预测与您的真实值进行回归,然后提供的r2当然非常高,但是是错误的。

下面我计算你的预测和真实之间的系数相关性,取平方给我们 r^2 ,我得到与你相同的值:

from scipy import stats
slope, intercept, r, p, se = stats.linregress(y_pred, y_true)
r2 = r**2
print(r2)

0.8602435256742592

推荐阅读