Python中如何计算R方值?
有两组数据,Real_Values 是真实值,Predict_Valus 是预测值,请问如何计算他们的 R 方值?
Python中如何计算R方值?
5 回复
原谅我看不懂
import numpy as np
from sklearn.metrics import r2_score
# 方法1:使用sklearn(推荐)
def r_squared_sklearn(y_true, y_pred):
"""
使用sklearn计算R方值
y_true: 实际值数组
y_pred: 预测值数组
"""
return r2_score(y_true, y_pred)
# 方法2:手动计算(理解原理)
def r_squared_manual(y_true, y_pred):
"""
手动计算R方值
公式: R² = 1 - SS_res/SS_tot
SS_res = Σ(y_true - y_pred)²
SS_tot = Σ(y_true - mean(y_true))²
"""
y_true = np.array(y_true)
y_pred = np.array(y_pred)
# 计算残差平方和
ss_res = np.sum((y_true - y_pred) ** 2)
# 计算总平方和
ss_tot = np.sum((y_true - np.mean(y_true)) ** 2)
# 计算R方
r2 = 1 - (ss_res / ss_tot)
return r2
# 示例数据
actual = [3, -0.5, 2, 7]
predicted = [2.5, 0.0, 2, 8]
# 计算R方
print("sklearn R²:", r_squared_sklearn(actual, predicted))
print("手动计算 R²:", r_squared_manual(actual, predicted))
# 验证两种方法结果一致
print("结果一致:",
np.isclose(r_squared_sklearn(actual, predicted),
r_squared_manual(actual, predicted)))
核心解释:
- R²衡量模型解释数据变异的比例,范围通常在0-1之间(可能为负)
- 1表示完美拟合,0表示模型不比均值预测好
- sklearn的
r2_score是最标准实现,推荐使用 - 手动计算有助于理解公式:
1 - (预测误差平方和)/(数据总变异平方和)
一句话建议: 直接用sklearn的r2_score,简单可靠。
- 计算协方差 Cov = E[(R - mean_R)(P - mean_P)]
2. 计算方差 Var_R , Var_P
3. R^2 = Cov^2/abs(Var_R*Var_P) (注意是协方差的平方)
没看到是 python,
from sklearn.metrics import r2_score
r2 = r2_score(Real_Values , Predict_Values )
谢谢 meefly 大神!

