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

如何用scikit-learn计算调整R平方得分?已用r2_score函数仍存疑问

关于scikit-learn中r2_score与调整R平方的说明

嘿,我来给你理清楚这个问题~首先明确:scikit-learn的r2_score()函数默认返回的不是调整R平方(Adjusted R-squared),它输出的是标准的R平方值。

为什么需要调整R平方?

普通R平方有个明显的局限:只要你给模型添加更多特征——哪怕这些特征和目标变量完全无关——它的数值都会上升。调整R平方会对额外的特征进行惩罚,更精准地衡量模型的实际拟合效果,尤其在对比不同特征数量的模型时,这个指标的参考价值更高。

手动计算调整R平方的方法

调整R平方的计算公式是:

Adjusted R² = 1 - [(1 - R²) * (n - 1) / (n - k - 1)]

其中:

  • R²:r2_score()返回的标准R平方值
  • n:数据集的样本数量
  • k:模型中用到的特征数量(注意:如果你的模型包含截距项——这是scikit-learn大部分模型的默认设置——就用这个参数;如果模型没有截距,分母要改成n - k)

代码示例

下面是结合scikit-learn的完整计算示例:

from sklearn.metrics import r2_score
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression

# 生成示例回归数据
X, y_true = make_regression(n_samples=100, n_features=5, noise=10, random_state=42)

# 训练模型并得到预测值
model = LinearRegression()
model.fit(X, y_true)
y_pred = model.predict(X)

# 计算标准R平方
r2 = r2_score(y_true, y_pred)

# 计算调整R平方
n_samples = X.shape[0]
n_features = X.shape[1]
adjusted_r2 = 1 - (1 - r2) * (n_samples - 1) / (n_samples - n_features - 1)

print(f"标准R平方值: {r2:.4f}")
print(f"调整R平方值: {adjusted_r2:.4f}")

补充说明

scikit-learn没有内置的调整R平方计算函数,因为这个指标需要额外的样本数量、特征数量信息,而r2_score()本身只依赖真实值和预测值。所以你只能通过上述公式手动计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:56:59