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,简单可靠。

  1. 计算协方差 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 大神!

回到顶部