R² 与调整后 R² 实战对比:Python 代码解析 3 种模型复杂度下的指标变化
📅 2026/7/9 23:51:39
👁️ 次浏览
R² 与调整后 R² 实战对比Python 代码解析 3 种模型复杂度下的指标变化在数据分析和机器学习领域评估回归模型性能是至关重要的一环。R²R平方和调整后R²Adjusted R-squared作为两个核心指标经常被用来衡量模型的解释力和预测能力。但很多从业者对这两个指标的理解停留在表面不清楚它们在不同场景下的表现差异。本文将带你通过Python代码实战深入剖析这两个指标随模型复杂度变化的规律。1. 理解R²与调整后R²的核心差异R²衡量的是模型解释目标变量方差的比例计算公式为R2 1 - (SS_res / SS_tot)其中SS_res是残差平方和预测值与实际值之差的平方和SS_tot是总平方和实际值与均值之差的平方和调整后R²则引入了模型复杂度的惩罚项Adj_R2 1 - [(1-R2)*(n-1)/(n-p-1)]关键区别在于R²会随着预测变量增加而单调上升即使新增变量没有实际解释力调整后R²通过自由度调整只有当新增变量真正提升模型性能时才会增加典型场景对比场景R²表现调整后R²表现增加无关变量轻微上升可能下降增加相关变量显著上升显著上升过拟合模型虚高反映真实性能2. 构建模拟实验环境我们将使用Python的statsmodels和sklearn库创建三个复杂度不同的线性回归模型import numpy as np import pandas as pd from sklearn.linear_model import LinearRegression import statsmodels.api as sm from matplotlib import pyplot as plt # 生成模拟数据 np.random.seed(42) n_samples 1000 X1 np.random.normal(0, 1, n_samples) X2 np.random.normal(0, 1, n_samples) X3 X1 * 0.5 np.random.normal(0, 0.5, n_samples) # 与X1相关 X4 np.random.normal(0, 1, n_samples) # 纯噪声 y 2*X1 3*X2 np.random.normal(0, 1, n_samples) data pd.DataFrame({X1:X1, X2:X2, X3:X3, X4:X4, y:y})3. 三种模型复杂度下的指标对比3.1 简单模型2个有效特征# 模型1只使用X1和X2 X data[[X1, X2]] model1 sm.OLS(y, sm.add_constant(X)).fit() print(f模型1 R²: {model1.rsquared:.4f}) print(f模型1 调整后R²: {model1.rsquared_adj:.4f})输出结果示例模型1 R²: 0.8723 模型1 调整后R²: 0.8720注意当模型包含的特征都是有效特征时R²和调整后R²数值接近说明模型没有引入无关变量。3.2 中等复杂度模型加入相关特征# 模型2加入与X1相关的X3 X data[[X1, X2, X3]] model2 sm.OLS(y, sm.add_constant(X)).fit() print(f模型2 R²: {model2.rsquared:.4f}) print(f模型2 调整后R²: {model2.rsquared_adj:.4f})典型输出模型2 R²: 0.8735 模型2 调整后R²: 0.8730此时观察到R²有小幅提升因为X3与y有微弱关系调整后R²提升幅度小于R²反映了X3的边际贡献有限3.3 复杂模型加入噪声特征# 模型3加入纯噪声特征X4 X data[[X1, X2, X3, X4]] model3 sm.OLS(y, sm.add_constant(X)).fit() print(f模型3 R²: {model3.rsquared:.4f}) print(f模型3 调整后R²: {model3.rsquared_adj:.4f})典型输出模型3 R²: 0.8737 模型3 调整后R²: 0.8729关键发现R²仍然有微弱上升即使X4是纯噪声调整后R²反而下降正确反映了X4的无用性4. 可视化指标变化趋势将三个模型的结果可视化models [简单模型, 中等模型, 复杂模型] r2 [model1.rsquared, model2.rsquared, model3.rsquared] adj_r2 [model1.rsquared_adj, model2.rsquared_adj, model3.rsquared_adj] plt.figure(figsize(10,6)) plt.plot(models, r2, o-, labelR²) plt.plot(models, adj_r2, s-, label调整后R²) plt.title(模型复杂度对R²指标的影响) plt.ylabel(指标值) plt.legend() plt.grid(True) plt.show()从图中可以清晰看到R²随模型复杂度单调上升调整后R²在加入无关特征后开始下降最优模型复杂度出现在调整后R²峰值处5. 实际应用建议基于实验结果我们总结出以下实践指南特征选择策略优先选择使调整后R²最大化的特征组合当新增特征导致调整后R²下降时应舍弃该特征对于高维数据建议结合交叉验证结果判断典型误区和避免方法误区问题解决方案只关注R²可能选择过复杂模型同时监控调整后R²忽视样本量小样本下指标波动大确保n/p 10忽略线性假设非线性关系下指标失效先检查变量间关系代码示例自动化特征选择from sklearn.feature_selection import SequentialFeatureSelector estimator LinearRegression() sfs SequentialFeatureSelector(estimator, n_features_to_selectauto, scoringr2, cv5) sfs.fit(data[[X1,X2,X3,X4]], data[y]) print(最优特征组合:, sfs.get_feature_names_out())在实际项目中我发现结合调整后R²和交叉验证的MSE指标能更可靠地选择模型。特别是在金融风控场景中过度追求R²提升反而可能导致模型在实际应用中表现不佳。
DPS310与BMP280气压传感器深度评测:嵌入式项目选型指南在无人机、气象监测和室内导航等嵌入式系统中,气压传感器的选择往往成为硬件工程师面临的关键决策。面对市场上主流的DPS310和BMP280两款传感器,开发者需要从精度、功耗、通信稳定性等多…
📅 2026/7/9 23:51:39
Linux 串口通信深度实战:从 termios 结构体到多线程数据收发在嵌入式开发和工业控制领域,串口通信作为最基础的设备交互方式之一,其稳定性和效率直接影响整个系统的可靠性。本文将深入探讨Linux环境下串口通信的核心技术,从底层配…
📅 2026/7/9 23:51:39
1. 项目背景与核心需求解析在工业测量、医疗设备和精密仪器等领域,高精度模拟信号采集一直是关键挑战。传统8位或12位ADC在动态范围和信噪比上难以满足高端应用需求,而24位Δ-Σ ADC的出现彻底改变了这一局面。ADS127L11作为TI的明星产品,以其…
📅 2026/7/9 23:50:39
安全测试是一种类型的软件测试,专注于评估和检测计算机系统、网络或应用程序中的安全漏洞和弱点。其主要目的是预防意外或恶意的攻击,确保系统的机密性、完整性和可用性。安全测试通常包括多种类型,如安全功能测试和安全渗透测试。安全功能测…
📅 2026/7/10 0:52:14
如何用思绪思维导图解决你的思维整理难题:从混乱到清晰的终极指南 【免费下载链接】mind-map SimpleMindMap(思绪思维导图):一个强大的思维导图。A powerful mind map. 项目地址: https://gitcode.com/GitHub_Trending/mi/mind-…
📅 2026/7/10 0:52:14
MobileNetV3与ShuffleNetV2边缘部署实战:RK3588平台30FPS性能深度解析当嵌入式AI遇上轻量化模型,一场关于效率与性能的博弈正在RK3588这样的边缘计算平台上演。本文将带您深入MobileNetV3和ShuffleNetV2在瑞芯微旗舰芯片上的部署细节,通过实测…
📅 2026/7/10 0:52:14
1. 项目背景与核心需求在现代电子设备中,警报和通知系统无处不在。从智能家居的烟雾报警到工业设备的故障提示,再到医疗设备的紧急状态提醒,这些系统都需要可靠、灵活且可定制的音频通知方案。传统的简单蜂鸣器方案虽然成本低廉,但…
📅 2026/7/10 0:52:14
以下是 LeetCode 3530 有向无环图中合法拓扑排序的最大利润 的 Rust 实现。思路概述- n ≤ 22,使用状压 DP(Bitmask DP)。
- need[i]:节点 i 的所有直接前驱的位掩码。
- dp[mask]:已经选了 mask 中这些节点࿰…
📅 2026/7/10 0:52:14
SQL Server UPDATE FROM 子句深度解析:3种高效跨表更新方案与实战测评1. 理解UPDATE FROM的核心价值在SQL Server数据库操作中,数据更新是最常见的需求之一。当我们需要基于其他表的数据来更新目标表时,UPDATE FROM子句展现出无可替代的优势。…
📅 2026/7/10 0:51:14
一、为什么接口自动化测试,适合用AI赋能?
大家可自行先思考一个问题:
AI赋能测试全流程,为什么优先推荐从接口自动化切入?
有三个典型原因:
接口输入结构化,AI最擅长"吃"
接口有OpenA…
📅 2026/7/10 0:00:53
终极原神FPS解锁器完整指南:轻松突破60帧限制 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock
原神FPS解锁器是一款专为《原神》玩家设计的开源工具,通过先进的Wri…
📅 2026/7/10 0:00:53
YesPlayMusic:如何用高颜值播放器重塑你的网易云音乐体验?🎵 【免费下载链接】YesPlayMusic 高颜值的第三方网易云播放器,支持 Windows / macOS / Linux :electron: 项目地址: https://gitcode.com/gh_mirrors/ye/YesPlayMusic…
📅 2026/7/10 0:00:53
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/9 15:10:35
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/9 14:14:01
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/9 15:10:36
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/9 15:10:36
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/9 15:10:36
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/9 15:10:36