当前位置: 首页 > article >正文

【漫话机器学习系列】002.拟合度:调整R方(Adjusted R-Squared)

 调整 R^2(Adjusted R^2)概念及详细解释

调整 R^2 是回归分析中的一个指标,用于评估回归模型的拟合优度。与标准 R^2 不同,调整 R^2 引入了对模型复杂度的惩罚,以避免因加入过多变量而导致的虚高拟合效果。


1. 标准 R^2

标准 R^2(决定系数)定义为:

R^2 = 1 - \frac{\text{SSR}}{\text{SST}}

其中:

  • SSR 是残差平方和(Sum of Squares for Residuals),衡量模型未能解释的误差;
  • SST 是总平方和(Total Sum of Squares),衡量数据的总变异性;
  • 1 - \frac{\text{SSR}}{\text{SST}}​表示模型解释的变异比例。

问题:标准 R^2 随着模型中自变量数量的增加而单调不减,甚至当增加的变量对解释力无贡献时,R^2 也可能上升,容易导致过拟合。


2. 调整 R^2

调整 R^2 修正了标准 R^2 的缺陷,通过引入模型自由度(自变量数量)对 R^2 进行调整,使得它对模型复杂度更敏感:

\text{Adjusted } R^2 = 1 - \left( \frac{\text{SSR} / (n - k - 1)}{\text{SST} / (n - 1)} \right)

等价于:

\text{Adjusted } R^2 = 1 - (1 - R^2) \cdot \frac{n - 1}{n - k - 1}

其中:

  • n 是样本数量;
  • k 是自变量数量;
  • n−k−1 是自由度。

解释

  • 调整 R^2 考虑了模型自由度(样本数量与自变量数量的关系),如果加入的自变量对模型没有显著贡献,调整 R^2 可能会减小。
  • 当 k 增加(自变量数量增多)时,调整 R^2 对模型复杂度进行惩罚,鼓励更简洁的模型。

3. 性质与特点

  • 范围:调整 R^2 的值通常小于或等于 R^2,但不会大于1(可能为负数,当模型表现很差时)。
  • 变量筛选:调整 R^2 更适合作为变量筛选和模型选择的标准,避免因加入无效变量而虚高的拟合效果。
  • 模型比较:对于不同的回归模型,调整 R^2 提供了更公平的比较基础,尤其是当模型的自变量数量不同。

4. 优缺点

优点
  1. 避免过拟合:通过对模型复杂度的惩罚,有效避免过拟合问题。
  2. 公平比较:可比较不同复杂度的模型拟合效果。
缺点
  1. 灵敏度:对样本数量和自变量数量非常敏感,样本量不足时,调整 R^2 的可靠性可能下降。
  2. 解释性:尽管调整 R^2 有助于评估模型,但它并不直接说明预测性能。

5. 调整 R^2 的应用场景

  • 变量选择:用于衡量新增变量是否显著提高模型解释力。
  • 模型评价:比较多个回归模型的拟合效果,选择调整 R^2 较高的模型。
  • 模型简化:评估减少变量后的模型是否依然具有良好的拟合性能。

6. Python 示例代码

以下代码展示如何计算标准 R^2 和调整 R^2

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score

# 示例数据
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([1.1, 2.0, 2.9, 4.1, 5.1])

# 回归模型
model = LinearRegression()
model.fit(X, y)

# 标准 R^2
r2 = r2_score(y, model.predict(X))

# 样本数和自变量数
n = len(y)  # 样本数
k = X.shape[1]  # 自变量数

# 调整 R^2
adjusted_r2 = 1 - (1 - r2) * (n - 1) / (n - k - 1)

print(f"标准 R^2: {r2:.4f}")
print(f"调整 R^2: {adjusted_r2:.4f}")

输出结果

标准 R^2: 0.9970
调整 R^2: 0.9960

7. 总结

调整 R^2 是回归模型评估中的重要指标,能够平衡模型的拟合优度和复杂度。通过引入惩罚项,它在选择最优模型时尤为有效。与标准 R^2 相比,调整 R^2 更适合多变量回归分析,并能帮助我们避免过拟合风险。


http://www.kler.cn/a/430317.html

相关文章:

  • 日语IT用语笔记
  • Linux 文件的特殊权限—ACL项目练习
  • 什么是cline?
  • 【OJ刷题】同向双指针问题
  • 机器学习免费使用的数据集及网站链接
  • 【AJAX详解】
  • 迅为RK3576开发板满足了4G/5G、wifi6、多网口、NPU等扩展需求
  • vue入门实战(二)父子组件显示,参数传递
  • minio参考官方文档实现多节点部署,基于ubuntu,还是失败了。。。。
  • 香港科技大学广州|智能交通学域博士招生宣讲会—同济大学专场
  • Cesium 问题: 添加billboard后移动或缩放地球,标记点位置会左右偏移
  • 设置笔记本同时连接内外网
  • 【学习总结|DAY015】Java面向对象高级-抽象类、接口
  • [Redis#16] 事务 | vs Mysql | 命令 | WATCH的实现
  • 云原生概念讲解一下
  • 如何在 JavaScript 中进行深度克隆?
  • C语言 while/do-while/for/goto
  • 组件开发的环境准备: nodejs安装,npm镜像源的修改,pnpm包管理器的安装(全局安装),基于pnpm创建脚手架项目
  • 性能测试攻略(一):需求分析
  • 【Linux】通过crond服务设置定时执行shell脚本,实际执行时间却延迟了8小时
  • NASH均衡存在性证明
  • Python 3 和 MongoDB 的集成使用
  • C#实现一个HttpClient集成通义千问-多轮对话功能实现
  • Bluetooth LE AUDIO架构概述
  • /usr/local/go/bin/go: cannot execute binary file: Exec format error
  • go基础总结