You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

scikit-learn中r2_score的variance_weighted参数计算逻辑咨询

scikit-learn r2_score中variance_weighted选项的计算逻辑

首先明确:variance_weighted的加权逻辑里,权重是每个输出维度真实标签(y_true)的方差,和预测值(y_pred)无关,最终得分是各维度单独计算的R²值,以对应维度y_true的方差为权重的加权平均值。

针对你给出的例子:

y_true = [[0.5, 1], [-1, 1], [7, -6]]
y_pred = [[0, 2], [-1, 2], [8, -5]]

这里有两个独立输出维度:

  • 第一个维度的真实标签是[0.5, -1, 7],它的方差才是该维度的权重计算依据,不是你说的[0.5, 1, 0, 2](这个是把真实值和预测值混在一起了,完全错误)
  • 第二个维度的真实标签是[1, 1, -6],它的方差是第二个维度的权重

手动验证步骤(近似值):

  1. 计算各维度单独的R²
    • 第一个维度:
      残差平方和(SS_res)= (0.5-0)² + (-1+1)² + (7-8)² = 0.25 + 0 + 1 = 1.25
      总平方和(SS_tot)= (0.5-2.1667)² + (-1-2.1667)² + (7-2.1667)² ≈ 36.1667
      R²₁ = 1 - 1.25/36.1667 ≈ 0.9654
    • 第二个维度:
      残差平方和(SS_res)= (1-2)² + (1-2)² + (-6+5)² = 1 + 1 + 1 = 3
      总平方和(SS_tot)= (1+1.3333)² + (1+1.3333)² + (-6+1.3333)² ≈ 32.6666
      R²₂ = 1 - 3/32.6666 ≈ 0.9081
  2. 计算各维度y_true的方差
    • 第一个维度方差 = SS_tot/(n-1) = 36.1667/(3-1) = 18.0833
    • 第二个维度方差 = 32.6666/(3-1) = 16.3333
  3. 加权平均得到最终得分
    最终得分 = (0.9654×18.0833 + 0.9081×16.3333) / (18.0833+16.3333) ≈ 0.9382

你直接调用r2_score(y_true, y_pred, multioutput='variance_weighted')得到的结果会和这个近似值一致。

内容的提问来源于stack exchange,提问作者LearningAlgorithm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:10:20