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

