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

如何获取sklearn的MultiOutputRegressor每个目标的R2而非整体R2

多输出回归单维度R2计算方案

完全可以实现,你可以通过以下两种方式计算每个因变量对应的单独R2值:

注意:你现有代码存在逻辑疏漏:已实例化MultiOutputRegressor包装器wrapper,但后续训练、评分调用的仍是原始单输出LGBMRegressor对象model,不符合多输出训练逻辑,需要先修正为调用wrapper执行训练流程。

方法1:手动逐维度调用R2评估函数计算

引入sklearn.metrics下的r2_score接口,遍历每个因变量维度分别计算得分:

from sklearn.model_selection import train_test_split
from sklearn.multioutput import MultiOutputRegressor
import lightgbm as lgb
from sklearn.metrics import r2_score

# 数据切分
x_train, x_test, y_train, y_test = train_test_split(Xs, Ys, test_size=0.2, random_state=2)

# 多输出模型训练
base_model = lgb.LGBMRegressor()
wrapper = MultiOutputRegressor(base_model)
wrapper.fit(x_train, y_train)

# 测试集预测
y_pred = wrapper.predict(x_test)

# 逐维度计算R2
output_num = y_test.shape[1]
single_r2_scores = []
for i in range(output_num):
    score = r2_score(y_test[:, i], y_pred[:, i])
    single_r2_scores.append(score)
    print(f"第{i+1}个因变量R2:{score:.4f}")

方法2:调用子模型自带评分方法

MultiOutputRegressor会为每个输出维度单独训练一个基模型,存储在estimators_属性中,可直接遍历调用每个子模型的score方法得到对应维度的R2:

for idx, sub_model in enumerate(wrapper.estimators_):
    score = sub_model.score(x_test, y_test[:, idx])
    print(f"第{idx+1}个因变量R2:{score:.4f}")

两种方法计算得到的结果完全一致,可按需选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:18:03