如何在Python中通过学习曲线诊断模型的欠拟合状态?

冬杰君_8966

冬杰君_8966

2026-06-16

241人浏览

原创

训练集和验证集得分都低说明模型欠拟合:模型太简单,未能学习数据基本模式,常见于线性模型处理非线性关系、特征不足、正则过强或树深度受限;此时两线均低且贴近。

如何在python中通过学习曲线诊断模型的欠拟合状态?

学习曲线显示训练集和验证集得分都低,说明什么?

这基本就是欠拟合的典型信号:模型太简单,连训练数据都没学好。常见于线性模型处理非线性关系、特征太少、正则化过强(比如 alpha 在 Ridge 里设得太大)、或树模型的 max_depth 被限制为 1–2。

注意:不能只看最终得分,要观察曲线趋势——如果随着训练样本增加,训练得分始终上不去(比如卡在 0.6 左右),而验证得分也同步停滞,那不是数据不够,是模型容量不足。

用 learning_curve 绘制时关键参数怎么设?

learning_curve 默认用交叉验证计算验证得分,但容易掩盖欠拟合的真实表现。建议显式设置:

  • train_sizes=np.linspace(0.1, 1.0, 10):确保覆盖小样本阶段,欠拟合常在早期就暴露
  • cv=3 或 cv=ShuffleSplit(n_splits=3, test_size=0.2, random_state=42):避免 StratifiedKFold 对小样本分层失败
  • scoring='neg_mean_squared_error'(回归)或 'accuracy'(分类):保持与后续调参一致,别混用 'f1' 和 'roc_auc'

示例片段:

from sklearn.model_selection import learning_curve<br>train_sizes, train_scores, val_scores = learning_curve(<br>  model, X, y,<br>  train_sizes=np.linspace(0.1, 1.0, 8),<br>  cv=3,<br>  scoring='accuracy'<br>)

为什么验证得分有时比训练得分还高?这算欠拟合吗?

不算。这是典型的“验证集过于简单”或“数据泄露”迹象,比如时间序列数据没用 TimeSeriesSplit,或预处理(如 StandardScaler)在 cross_val_score 外 fitted。此时曲线失真,无法用于诊断。

提示词大师-python版
提示词大师-python版

图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍

下载

真正欠拟合时,两条线都低且接近——因为模型根本没能力区分样本,训练误差和泛化误差差别不大。若验证线明显高于训练线,优先检查:

  • 是否在 learning_curve 调用前对全量 X 做了 fit_transform
  • 是否用了 StratifiedKFold 但类别极度不均衡(导致某折验证集全是多数类)
  • 是否评估指标本身有偏差(如用准确率评估高度不平衡的二分类)

从学习曲线判断后,下一步该调什么?

直接加模型复杂度,别先调超参:

  • 线性模型 → 换 PolynomialFeatures(degree=2) + LinearRegression
  • 决策树 → 增大 max_depth 或删掉 min_samples_split
  • SVM → 改用 kernel='rbf',先不碰 C 和 gamma
  • 随机森林 → 增加 n_estimators(次要),重点调 max_depth 或关掉 max_features

改完重画曲线——如果训练得分明显上升、验证得分同步跟上,说明方向对了;如果训练得分升了但验证得分卡住甚至下降,才进入过拟合调优阶段。

最常被忽略的一点:学习曲线只能告诉你“模型太弱”,但不能告诉你“弱在哪”。务必配合特征重要性(树模型)或系数绝对值(线性模型)看,是不是关键特征被正则化压没了,或者某类特征完全没被模型感知到。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1651

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4084

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1649

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

23537

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2887

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2927

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1143

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2263

5

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程