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

学习曲线显示训练集和验证集得分都低,说明什么?
这基本就是欠拟合的典型信号:模型太简单,连训练数据都没学好。常见于线性模型处理非线性关系、特征太少、正则化过强(比如 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。此时曲线失真,无法用于诊断。
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成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 的核心概念和高级技巧!










