- 在线时间
- 479 小时
- 最后登录
- 2026-4-17
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7793 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2924
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
评估一个模型很简单:用测试集就行了。现在假设你在两个模型(一个线性模型和一个多项式模型)之间犹豫不决,如何做出判断呢?做法是训练两个模型,然后对比它们对测试数据的泛化能力。& s) Y" H3 F+ t6 ^6 }" d0 u
现在假设线性模型的泛化能力更强,但是你想要应用一些正则化来避免过拟合。问题又来了,要如何选择正则化超参数的值呢?做法之一是使用100个不同的超参数值来训练100个不同的模型。然后假设你山此找到了最佳的超参数值,它生成的模型泛化误差最 ?5 `- ]0 m5 k) i& Y8 n
,比如仅仅5%。然后在生产环境中运行这个模型,可是很不幸,它并没有如预期那样工作,反而产生15%的误差。到底发生了什么?
7 C; U, E4 @2 V6 d 问题出在你对测试集的泛化误差进行了多次度量,并且调整模型和超参数来得到拟合那个测试集的最佳模型。这意味着该模型对于新的数据不太可能有良好的表现。
( U2 j1 b; y* c+ A4 P; P& j; M- f+ F' {' V
解决此问题的常见方法称为保持验证:你只需保持训练集的一部分,以评估几种候选模型并选择最佳模型。新的保留集称为验证集,有时也称为开发集(devset)。更具体地说,你可以在简化的训练集上(即完整训练集减去验证集)训练具有各种超参数的多个模型,并且选择在验证集上表现最佳的模型。在此保持验证之后,你在完整的训练集(包括验证集)上训练最佳模型,这就是你的最终模型。最后,你在测试集上评估这个模型以获得泛化误差的估计值。
6 |# a2 _& }8 t, m; _/ Y9 y 这个解决方案通常效果很好。但是,如果验证集太小,则模型评估将不精确:你可能最终错误地选择一个次优模型。相反,如果验证集太大,则剩余训练集将比完整的训练集小得多。为什么这样不好?好吧,既然最终模型将在完整的训练集上训练,比较在更小的训练集上训练出来的候选模型不是一个好办法。就像选择最快的短跑运动员参加马拉松比赛。解决此问题的一种方法是执行使用许多小验证集重复进行的交叉验证。每个模型都在对其余数据进行训练后,在每个验证集上评估一次。通过对模型的所有评估求平均值,可以更准确地衡量模型的性能。但是有一个缺点:训练时间是验证集个数的倍数。
6 E w' o4 X: f2 D5 p2 j4 F: n( z
2 i' I- @2 l0 ?
1 [9 h* m; f8 j( k3 L( i8 p |
zan
|