深度学习(10)模型评估、训练与选择

一、模型评估(Model Evaluation)

在训练神经网络或机器学习模型时,我们的目标不仅是让模型在训练数据上表现好,更重要的是在未见过的数据上也有良好的表现。这就涉及到模型的评估与验证。

1. 训练集与测试集的划分

通常,我们会将全部数据集划分为两部分:

数据集类型 用途
训练集(Training Set) 用于模型学习参数(如权重、偏置)
测试集(Test Set) 用于检验模型在新数据上的表现

划分比例常见为:

  • 80% 训练集 + 20% 测试集

  • 70% 训练集 + 30% 测试集

目的:通过将数据分开,可以有效检测模型是否过拟合(Overfitting)或 欠拟合(Underfitting)。

2. 分类问题的训练与测试流程

以二分类问题(Binary Classification)为例,整体流程如下:

(1)准备数据集

将数据随机划分为训练集与测试集。

(2)训练模型

在训练集上进行学习,最小化损失函数(例如交叉熵损失 Cross Entropy Loss)。

(3)评估模型

在测试集上计算准确率(Accuracy)、精确率(Precision)、召回率(Recall)或 F1-score。

(4)分析表现

  • 如果训练集准确率高、测试集准确率低 → 过拟合

  • 如果两者都低 → 欠拟合

(5)图示理解:

数据集 → 划分 → [训练集] + [测试集]

模型训练

测试集评估性能


二、模型选择与训练(Model Selection & Training)

1. 模型的选择

在机器学习或深度学习中,我们常会有多种模型可供选择,例如:

  • 逻辑回归(Logistic Regression)

  • 支持向量机(SVM)

  • 神经网络(Neural Network)

  • 决策树、随机森林(Decision Tree / Random Forest)

每种模型的表现取决于任务类型、数据规模与特征复杂度。因此我们需要一个系统的方法来选择最优模型。

2. 三种常见数据集划分方式

在真实训练流程中,我们一般将数据分为三部分:

数据集 作用
训练集(Training Set) 用于拟合模型参数
验证集(Validation Set) 用于调整模型结构或超参数(Hyperparameters)
测试集(Test Set) 用于最终模型性能评估
举例:模型选择的完整流程

假设我们在调节神经网络的结构(隐藏层数量、学习率等):

  1. 用训练集训练多个不同结构的模型;
  2. 在验证集上评估每个模型的性能;
  3. 选择在验证集上表现最好的模型;
  4. 用训练集 + 验证集重新训练该模型;
  5. 最后在测试集上评估其最终性能。

3. 为什么使用验证集而不是测试集来调参?

不应该使用测试集来选择模型。测试集只能在"模型定型后"用于最终评估。

原因:

如果我们在模型选择阶段多次查看测试集性能,就相当于"间接让模型学习了测试集的特征",会导致信息泄漏(Data Leakage),使得测试结果不再客观反映泛化能力。

4. 交叉验证(Cross Validation)

当数据量较小时,可以使用 K 折交叉验证(K-Fold Cross Validation) 进行更稳定的评估。

原理:
  1. 将数据集分成 K 份;
  2. 每次取其中 1 份做验证集,剩下 K-1 份做训练集;
  3. 轮流进行 K 次训练与评估,最后取平均性能。
优点:
  • 最大化利用数据;

  • 减少由于随机划分带来的偏差;

  • 评估更稳定可靠。

常用的 K 值:K = 5 或 10。

5. 最终模型由哪个集合确定?

最终模型应基于"验证集"选择,在"训练集 + 验证集"上重新训练后,用"测试集"评估。

集合 用于
训练集 拟合参数
验证集 选择最优模型
测试集 最终性能评估

总结

概念 作用
训练集 (Training Set) 用于学习模型参数
验证集 (Validation Set) 用于调节模型结构或超参数
测试集 (Test Set) 用于最终评估模型性能
交叉验证 (Cross Validation) 提高小样本评估稳定性
避免过拟合 不在测试集上反复调参
相关推荐
董董灿是个攻城狮5 分钟前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者33 分钟前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考40 分钟前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
冬奇Lab1 小时前
OpenClaw 源码精读(2):Channel & Routing——一条消息如何找到它的 Agent?
人工智能·开源·源码阅读
冬奇Lab1 小时前
一天一个开源项目(第38篇):Claude Code Telegram - 用 Telegram 远程用 Claude Code,随时随地聊项目
人工智能·开源·资讯
格砸3 小时前
从入门到辞职|从ChatGPT到OpenClaw,跟上智能时代的进化
前端·人工智能·后端
可观测性用观测云3 小时前
可观测性 4.0:教系统如何思考
人工智能
sunny8653 小时前
Claude Code 跨会话上下文恢复:从 8 次纠正到 0 次的工程实践
人工智能·开源·github
小笼包包仔3 小时前
OpenClaw 多Agent软件开发最佳实践指南
人工智能
smallyoung4 小时前
AgenticRAG:智能体驱动的检索增强生成
人工智能