python - 线性回归的 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² 的定义?提前致谢。
解决方案
来自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
推荐阅读
- vue.js - 将数组提交到 Vuex 存储突变
- python - 按钮虽然清楚地加载,但对硒不可见
- git - 拉取请求成功后在 VS2019 中删除本地分支
- javascript - 如何在 fetch 中检索对象属性数组,然后将其传递给第二个 fetch 调用?
- python - 将图像转换为 numpy 数组时如何调整图像大小
- c# - 如何设置启用 CORS 的域身份验证 cookie .Net Core?
- c++ - 使用 stack.top() 时如何修复类型错误
c++中的库 - c# - Cassandra 读取性能问题
- apache-spark - 如何跨集群跟踪全局任务/作业失败率
- javascript - 倒比例