[机器学习-3]过拟合(Overfit)

本文探讨了过拟合的概念及其产生的原因,包括随机噪音与确定性噪音的影响,并讨论了高维度数据可能带来的问题。

What’s overfitting

The subjects performs an action which leads to a good
outcome and thereby generalizes it as cause and effect: the
action will always give good results. Having overfit the data, the
subject compulsively engages in that activity
通常会在噪音过多与参数过多或者维度过多(模型复杂)时发生
数值上的表现就是in-sample error 越来越小而out-of-sample error越来越大
在一些情况下简单的H甚至要优于复杂的H
在这里插入图片描述
给大家一个趋势
在这里插入图片描述

随机噪音(Stochastic Noise)

实际上我们测量的是两个量,一个是f还有一个就是噪音,我们想要测量f但是不可避免地测量了噪音,而噪音通常是波动与测量错误这些我们没办法建立模型的东西

确定性噪音(Deterministic Noise)

在这里插入图片描述
如果说随机噪音会使图像模糊,那么确定性噪音可能会导致我们测出一个很奇怪的东西
在这里插入图片描述
图像上
在这里插入图片描述

高维会带来的问题

在这里插入图片描述
在这里插入图片描述
高维以后数据的结构可能会被破坏掉,或者说复杂难以分明
在这里插入图片描述
可能会变成海胆一样
在这里插入图片描述
所以我们就需要正则化来克服这些问题,留到下章讲

### 深度学习中过拟合和欠拟合的概念 在机器学习领域,尤其是深度学习中,模型的表现可以分为三类:过拟合、欠拟合以及适度拟合。这些概念对于理解模型性能至关重要。 #### 欠拟合 (Underfitting) 当一个模型既无法很好地捕捉到训练数据中的模式,在训练集上的误差较大,也无法泛化到新的未见过的数据时,则认为该模型发生了欠拟合现象[^1]。这种情况通常表现为: - **偏差高**:即预测值与实际目标之间的差异大; - **方差低**:不同样本间的变化影响较小; 这表明模型过于简单,未能充分表达输入特征与输出标签间的映射关系。因此,即使是在已知的训练集中也难以取得较好的成绩。 #### 过拟合 (Overfitting) 相反地,如果一个模型能够完美甚至超常地记忆住训练集里的每一个细节以至于它不仅学会了有用的信息还记住了噪声部分,那么就出现了过拟合的情况[^2]。具体特点如下: - **偏差低**:因为几乎完全匹配了训练数据; - **方差高**:对新数据非常敏感,容易受到微小扰动的影响而产生巨大波动; 这意味着虽然模型可以在训练集上获得极高的准确性,但在面对未知测试集或其他真实世界场景下的表现却很差劲。 #### 适度拟合 (Good Fit) 理想的状况是找到两者之间的一个平衡点——既能较好地适应现有数据又具备一定的泛化能力去应对未来可能出现的新情况。此时模型具有适中的偏差和方差水平,能够在保持一定灵活性的同时有效地概括出潜在规律。 ### 图像表示区别解释 为了更直观地区分上述三种状态,可以通过绘制损失函数随迭代次数变化曲线来展示它们各自的特点: - 对于**欠拟合**而言,无论是训练还是验证阶段,其损失都会维持在一个较高的位置不变,显示出明显的收敛失败迹象。 - 而到了**过拟合**这边,可以看到随着轮次增多,尽管训练错误率持续下降直至趋近零点附近,但是交叉验证/测试集合上的得分反而会逐渐恶化上升形成剪刀差形态。 - 至于**适度拟合**的理想情形下,两条线应该趋于平稳并尽可能靠近彼此但不相交,代表着稳定且良好的学习效果。 ```python import matplotlib.pyplot as plt import numpy as np # 假设数据 epochs = range(1, 101) train_loss_underfit = [np.random.uniform(0.8, 1.2) for _ in epochs] val_loss_underfit = train_loss_underfit.copy() train_loss_overfit = [-0.05 * i + 1.5 for i in epochs] val_loss_overfit = [min(train_loss_overfit[i], val_loss_underfit[i]) + 0.7 for i in range(len(epochs))] good_fit_train = [max(-0.01*i+1, 0.3) for i in epochs] good_fit_val = good_fit_train[:] plt.figure(figsize=(14, 4)) plt.subplot(131) plt.plot(epochs, train_loss_underfit, label='Training Loss') plt.plot(epochs, val_loss_underfit, '--', label='Validation Loss') plt.title('Underfitting') plt.legend() plt.ylim([0, 2]) plt.subplot(132) plt.plot(epochs, train_loss_overfit, label='Training Loss') plt.plot(epochs, val_loss_overfit, '--', label='Validation Loss') plt.title('Overfitting') plt.legend() plt.ylim([0, 2]) plt.subplot(133) plt.plot(epochs, good_fit_train, label='Training Loss') plt.plot(epochs, good_fit_val, '--', label='Validation Loss') plt.title('Good Fit') plt.legend() plt.ylim([0, 2]); plt.tight_layout() plt.show() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值