机器学习重要概念

机器学习本身的缺陷

''All models are wrong, some useful.'' 我们在训练的时候是不可能看到全局的,就像是盲人摸象一样,但是我们又想要自己的模型能尽可能准确的描述出数据背后的真实规律,所以我们会需要:

  1. 更多的模型去展示全局的不同侧面,最终中和起来形成一个较为真实的模型。
  2. 大量的数据,数据越大其所展示的细节也就越复杂。当然我们也就需要更复杂的模型去解决。反过来对于复杂的模型我们又不得不用更大的数据去喂给他。

    总之我们训练的模型永远不是真的模型。

误差

  • ϵ为随机误差,是由数据本身的噪音带来的,是不可避免的。假定所要学习的模型是函数f,在X条件下观察到的样本值为Y=f(X)+ϵ
  • 假定训练出来的模型是f^
  • 观测数据是XY,通过训练的模型可以得到预测值f^(X)
    由于训练模型的数据来自抽样X或者模型学习算法借助随机等因素,通常情况下得到的模型是不确定的。准是偏差小或者没有偏差,确是变化小或者没有变化。所以想到了几个值来描述模型的误差:
  1. 模型的偏差:模型的偏差指的是众多学习模型和真实模型之间的偏差。是通过学习拟合出来的结果的期望与真实值之间的差距。Bias(X)=E[f^(X)]f(X)
  2. 模型的方差:指的是模型与模型之间的差异。表现的是通过学习拟合出来的结果自身的不稳定性。Var(X)=E[(f^(X)E[f^(X)])2]
  3. 一般来说模型预测的错误来源于偏差、方差和随机误差。Err(x)=E[(Yf^(X))2]=(E[f^(X)]f(X))2+E[(f^(X)E[f^(X)])2]+δϵ2换句话说模型预测的错误平方期望为偏差的平方加上方差再加上随机误差。在这三项里边,随机误差是无法消除的,其他两项都可以通过模型的选择与调参来适当控制的。

过拟合与欠拟合

  • 过拟合:模型的复杂度太高,导致模型的学习能力太强,泛化能力不足,即模型过于灵活。往往是由于模型把个别极端的噪音数据也当成正确数据学习并且纳入学习模型成为标准在以后的识别中被使用,或者是模型在数据没有覆盖的地方随意发挥的结果。在过拟合的情况下往往训练准确度远高于测试准确度。
  • 欠拟合:模型的复杂度太低,模型的学习和表达能力不足,无法学习表述数据相对复杂关系。泛化能力相对较高。
    根据奥卡姆剃刀原则我们不应该在一开始选择复杂的模型,我们应该首先选择简单的模型,在简单模型无法解释的地方再去纳入新的元素,创造更加复杂的模型。

过拟合与欠拟合的处理措施

对于过拟合的模型,需要降低其复杂度

  • 增加训练集
  • 减少训练使用的特征的数量
  • 提高正则化水平
    对于欠拟合的模型,需要增加其复杂度
  • 增加模型的迭代次数
  • 更换为描述能力更强的模型
  • 生成更多的特征供训练使用
  • 降低正则化水平

偏差、方差与过拟合、欠拟合的关系

  • 随着模型复杂度增加,模型描述能力也增加,偏差倾向于减小,方差倾向于增大,若模型复杂度大于平衡点,模型过拟合。
  • 随着模型复杂度的降低,模型描述能力减小,偏差倾向于增大,方差倾向于减小,若模型复杂度小于平衡点,模型欠拟合。

判断模型的欠拟合、过拟合、高方差和高偏差

偏差的计算需要真实值,所以在现实中很难计算机模型的偏差与方差。所以只能通过训练数据和测试数据的表现来综合判断模型的状态。

  • 从训练数据来讲,随着模型复杂度的增加,误差会越来越小。
  • 从测试数据来讲,随着模型复杂度的增加,误差首先会减少,但是增加到一定程度就会出现噪音数据被学习了或者模型开始自我发挥了导致的过拟合,这样的话,误差又会继续增大。
    所以可以得出下边的四条规律:
  1. 当模型处于欠拟合状态时,训练集和测试集的误差都很高,对应高偏差区。
  2. 当模型处于过拟合状态时,训练集上的误差低,测试集上的误差会很高,对应高方差区。
posted @   Emi-lia  阅读(56)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示