为何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
相关产品推荐
相关产品推荐

