0

0

如何正确理解并计算非线性回归模型中的 R² 分数

霞舞

霞舞

发布时间:2026-01-18 11:33:17

|

843人浏览过

|

来源于php中文网

原创

如何正确理解并计算非线性回归模型中的 R² 分数

r² 分数并非恒为正值,当模型拟合效果比简单均值预测更差时,其值可为负数;本文详解 sklearn 中 `r2_score` 的计算逻辑、负值成因,并提供规范的非线性拟合与评估实践指南。

在使用 sklearn.metrics.r2_score 评估非线性回归模型(如您对 kc_house_data 构建的指数型函数 y = β₁·β₂ᵃ + β₃)时,出现负值(如 -59.51)并不表示代码错误,而是模型性能的客观反映。R² 的数学定义为:

[ R^2 = 1 - \frac{\sum_i (y_i - \hat{y}_i)^2}{\sum_i (y_i - \bar{y})^2} ]

其中分子是残差平方和(RSS),分母是总平方和(TSS),以目标变量均值 (\bar{y}) 为基准。关键在于:当 RSS > TSS 时,R² ——这意味着您的模型预测结果,整体上比直接用 y_data_norm 的均值进行“常数预测”还要糟糕。

在您的代码中,问题主要出现在以下环节:

  1. 训练与预测范围不一致:您用 curve_fit 在归一化后的 x_data_norm 上拟合参数,但绘图时却用 x = np.linspace(4, 12, 21613) / max(x) 生成全新横坐标——该区间(4–12)远超 x_data_norm 实际范围([0, 1]),导致外推严重失真,y 预测值剧烈偏离真实分布;
  2. 评估对象错位:r2_score(y_data_norm, y) 中 y 是在错误 x 网格上计算的预测值(长度 21613),而 y_data_norm 长度为原始样本数(如 21613 可能巧合匹配,但逻辑错误),且未对应真实输入点;
  3. 未使用拟合后的最优参数进行 内插预测:应基于原始 x_data_norm 计算拟合值 y_pred = log(x_data_norm, *popt),再与 y_data_norm 对齐评估。

✅ 正确做法如下:

AI at Meta
AI at Meta

Facebook 旗下的AI研究平台

下载
# 正确:在原始归一化输入上生成预测值
y_pred_norm = log(x_data_norm, *popt)  # 注意:x_data_norm 是训练输入

# 确保维度一致、一一对应
assert len(y_pred_norm) == len(y_data_norm)

# 计算 R² —— 此时若仍为负,说明模型结构或初始化严重不适配数据
r2 = r2_score(y_data_norm, y_pred_norm)
print(f"R²-score (on training points): {r2:.4f}")

⚠️ 补充注意事项:

  • 对非线性回归,建议优先使用交叉验证下的 mean_squared_error 或 mean_absolute_error 辅助诊断;
  • 若追求解释性 R²,可考虑对数变换后线性化(如 log(price) ~ combined),再用线性 R² 评估;
  • 永远避免在未经对齐的 x 网格上评估指标——它衡量的是“绘图美观度”,而非模型泛化能力。

总结:R² 为负不是 bug,而是 red flag。它敦促我们回归建模本质——检查函数假设是否合理、数据预处理是否引入偏差、以及优化过程是否收敛到有意义解。在非线性场景中,可视化残差、检验 Jacobian 条件数、尝试不同初值或换用鲁棒优化器(如 method='trf'),往往比执着于 R² 数值更有价值。

相关专题

更多
高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

84

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

24

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

35

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

16

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

56

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

16

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

9

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

26

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号