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

为何Random Forest的score与r2_score结果存在差异?

问题解答

Random Forest回归器的score方法和你直接调用r2_score结果不同的核心原因是你搞反了r2_score的参数顺序。

关键细节

在sklearn中:

  • 回归模型的score(X, y)方法默认计算R²评分,等价于r2_score(y_true=y, y_pred=model.predict(X)),参数顺序是真实标签在前,预测值在后。
  • 你代码里写的r2_score(y_pred, y_test)把预测值放在了第一个参数位置,真实值放在第二个,完全不符合R²的计算逻辑,导致结果错误。

修正后的代码验证

from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import r2_score

# 假设X_train, y_train, X_test, y_test已定义
rf = RandomForestRegressor(n_estimators=100, max_depth=10, max_features='sqrt')
rf.fit(X_train, y_train)
y_pred = rf.predict(X_test)

# 两种正确调用方式,结果完全一致
print(rf.score(X_test, y_test))
print(r2_score(y_test, y_pred))  # 真实值y_test放在第一个参数位置

为什么参数顺序会影响结果?

R²的计算公式是:
$$R^2 = 1 - \frac{\sum_{i=1}^{n}(y_{true,i} - y_{pred,i})2}{\sum_{i=1}{n}(y_{true,i} - \bar{y}{true})^2}$$
如果交换y_pred和y_true的位置,分母会变成$\sum
{i=1}^{n}(y_{pred,i} - \bar{y}_{pred})^2$,这不再是衡量模型拟合真实数据的指标,自然结果会和模型score方法的输出差异巨大。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:41:29