过拟合与欠拟合

通AI之路 2024-09-05 15:31:03 阅读 97

一,什么是过拟合和欠拟合

打个比方,一个小学生学习数学,刚开始可能什么也不会,慢慢开始学。对于学习较慢的同学,练习题都还没学懂就考试了,结果当然没考好。对于学习能力非常强的同学,才刚开始,所有的题都做会了,之后没事干,天天重复看以前做过的题,最后导致看到原题不用算就能背出答案,由于天天看原来的题,导致思维固化,原题稍微一改就想不出解决方法了。

上面这个例子就深度阐述了过拟合和欠拟合的关系,即

欠拟合:该学的没学会,要做的没做对。(训练集和测试集表现都不好)

过拟合:学的太猛,思维固化,只会做过的。(训练集表现很好,测试集表现不好)

两者的共同点是: 要做的做不对,即在测试集上表现不佳(如果表现好就不是问题了,就变成方法了)

二,过拟合出现的原因以及解决方法

1. 训练时间太久 -> 减少训练时间

2. 数据质量很差。

一个是数据噪声大,一个有错误数据,一个是数据类型单一。 需要进行数据清洗或增加数据。

可能会过度捕捉数据的细节,导致过拟合。

3. 模型太大太复杂。

比如用GPT-3.5来学习论语,那就太小题大作了。数据集的大小应该与模型的大小相匹配。

方法:

4. Dropout。

随机丢弃一些参数不用去训练,这可以理解成一种特殊的集成学习,即每批数据都对应不同的一组参数,这组参数可以认为是一个子网络,每批数据都有一个子网络来进行学习,这样可以让不同的神经元不是很依赖其他的神经元,能够去学到更加鲁棒的特征表示。

5. 集成学习方法bagging。

通过用多个模型去学习数据,从而学习到不同方面的特征,来提高泛化能力,减小方差,降低过拟合的风险。

6. 交叉验证,如K折交叉验证。

通过循环学习,能够防止对特定的数据集过度拟合。

三,欠拟合出现的原因及解决方法

1. 训练时间太短 -> 加长训练时间

2. 模型太简单学不会 -> 模型变大,变深

E[f] = f\\ E[\varepsilon ] = 0 \ \ \ \ \ \ Var[\varepsilon ] = \sigma ^2

3. 数据质量。

数据噪声过多,有错误。

可能会因噪声多无法捕捉数据的潜在特征,包括被噪声覆盖的特征。

4. 集成学习方法boosting。

通过顺序学习,能够尽可能的降低偏差,从而降低欠拟合的风险。

四,误差的推导,方差,偏差

Sample\ data: D = \{(x_1,y_1),...,(x_n,y_n)\} \ from \ y = f(x) + \varepsilon \\ E_D[(y- \hat f(x))] = E[((f-E[\hat f]) + \varepsilon - (\hat f - E[\hat f))^2]\\ \hspace*{2.65cm} = E[(f-E[\hat f])^2 + \varepsilon ^2 + (\hat f -E[\hat f])^2]\\ \hspace*{2.65cm} = (f-E[\hat f])^2 + E[\varepsilon ^2 ] + E[(\hat f - E[\hat f])^2]\\ \hspace*{2.65cm} = Bias[\hat f]^2 + Var[\hat f] + \sigma ^2

其中消去的交叉项, 交叉项三项之间认为是独立的,那么E[XY] = E[X]E[Y], 其中

E[f] = f\\ E[\varepsilon ] = 0 \ \ \ \ \ \ \ \ Var[\varepsilon ] = \sigma ^2\\ Var[\varepsilon ] = \frac{1}{n-1}\sum (\varepsilon_i - E[\varepsilon ])^2 = \frac{1}{n-1}\sum \varepsilon _i ^2 = \sigma ^2 = E[\varepsilon ^2]\\ E[\hat f - E[\hat f]] = 0

可得到最后三个交叉项消除

参考链接

欠拟合的原因以及解决办法(深度学习)_欠拟合的原因及解决办法-CSDN博客

dwnlpinterview/BasicAlgorithm/过拟合和欠拟合.md at main · hrwleo/dwnlpinterview (github.com)



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。