最清楚的过拟合(Overfitting)、欠拟合讲解

问题的产生

当我们构建模型时,总会希望假设空间参数尽可能多,系统越复杂,拟合得越好嘛!我们还希望我们的优化算法能使我们的模型产生的损失函数的值尽可能小(即我们的假设空间能够贴合每一个训练样本点)。但这样真的好吗?奥卡姆剃刀貌似又胜利了。然而假设我们的模型达成了上述的情况,有很大概率产生一个ML界非常令人头疼的一件事:过拟合(Overfitting)

欠拟合与过拟合

我们以“波士顿房价预测”为例,来从图像的角度直观感受一下什么叫过拟合,顺便也介绍一下欠拟合:

例子1:线性回归(房价预测)

最清楚的过拟合(Overfitting)、欠拟合讲解

Fig.1 Linear regression(截屏自吴恩达机器学习)

我们看到第一张图的模型过于简单,而且损失函数的收敛速度很慢。这就使得优化算法做得再好,我们的模型的泛化性能也会很差,因为这条直线在训练集上的cost就很大,我们把这种训练集上的偏差很大的情况叫做欠拟合(Underfitting),也有一种历史叫法:高偏差(High bias)

第二张图是我们合理假设的一个模型。可以看到,选取了合理的模型后,图像大致穿过了样本点。像极了做物理实验时,最后用一条曲线大致地穿过既定的样本点;和第一张图比起来,至少损失值大大下降了。

第三张图引入了高次项,就题论题来说,这太复杂了。虽然事实上对于是任意n个点,总能找到n+1次曲线方程将这n个点全部穿过,但是从模型的角度来讲,这显然不是好模型(姑且不说要用一个高次模型去拟合离散点要迭代多少次,学习率要调到多低)。即使它一板一眼地穿过了所有样本点,但谁能保证这种奇形怪状的曲线能穿过下一个随机给出的样本点呢?我们把这种和预测值和样本标签值几乎完全一致的情况叫做过拟合(Overfitting),历史上也称为高方差(High variance)

我们再看看分类问题中的过拟合。

例子2:Logistic回归

最清楚的过拟合(Overfitting)、欠拟合讲解

Fig2.Logistic regression(截屏自吴恩达机器学习)

三幅图哪个更好呢?不多说,第二张图应该是合理的划分方式,而不是像第三张图那样一板一眼。

定义

我们给出过拟合的定义:

Overfitting : If we have too many features, the learned hypothesis may fit the training set vey well, but fail to generalize to new examples.

其中的’fit the training set very well’的数学语言是:

12N∑i=1N(hθ(x(i))−y(i))2≈0(or=0)

所以过拟合就是损失函数极小但泛化性能差的情况。落实在分类问题上就是训练集的损失函数值很小,但是验证集/测试集上的损失函数值很大。

这也说明了我们在训练模型时,损失函数关于迭代次数的图像一直下降到很小的数值并不是什么好事,这恰恰暗示了我们的模型存在过拟合的风险。

解决过拟合

我们一般有两种方法来减小过拟合的影响:

1.减少属性值(特征值)的数量。

  • 人工选择哪些特征需要保留。
  • 使用模型选择算法。

2.实行正则化

  • 保留所有特征值,但是减小参数θ_j的值或数量级。
  • 当我们有许多特征时,效果较好。其中每一个特征值都会对y造成影响。

125jz网原创文章。发布者:江山如画,转载请注明出处:http://www.125jz.com/11112.html

(2)
江山如画的头像江山如画管理团队
轻量级目标检测SSD算法、学习率、sigmoid函数详解
上一篇 2022年9月20日 下午9:01
Vim编辑器常用命令大全
下一篇 2022年9月22日 上午9:44

99%的人还看了以下文章

  • 在servlet中输出JS中文乱码,servlet中alert对话框出现中文乱码的解决方法

    在servlet中输出JS中文乱码,servlet中alert对话框出现中文乱码的解决方法在servlet中输出JS中文乱码,servlet中alert对话框出现中文乱码的解决方法在servlet中输出JS中文乱码,servlet中alert对话框出现中文乱码的解决方法在servlet中输出JS中文乱码,servlet中alert对话框出现中文乱码的解决方法

    一、在servlet中输出JS中文乱码 解决方法 在servlet中添加以下代码:   request.setCharacterEncoding(“UTF-8”);   response.setContentType(“text/html”);   response.setCharacterEncoding(“UTF-8”); 二、servlet中alert…

    2019年11月29日 编程开发
    12.6K0
  • python 集合的使用,案例详解

    集合的定义: 1.不同元素组成 2.无序 3.集合中的元素必须是不可变类型 创建集合 s = {1,2,3,4,5,6,7,8} >>> set_test = set(‘hello’) >>> set_test {‘h’, ‘l’, ‘e’, ‘o’}  # 由此可见集合中的元素不可重复,都是不同的 集合运算 集合之间也可…

    2020年1月22日
    16.0K0
  • 第二课:Maven的下载安装及环境变量配置

    第二课:Maven的下载安装及环境变量配置第二课:Maven的下载安装及环境变量配置第二课:Maven的下载安装及环境变量配置第二课:Maven的下载安装及环境变量配置

    一、Maven的下载 下载地址:http://maven.apache.org/download.cgi 下载完成后,得到一个压缩包apache-maven-***-bin.zip,解压,可以看到maven的组成目录 Maven目录分析 bin:含有mvn运行的脚本 boot:含有plexus-classworlds类加载器框架 conf:含有setting…

    2023年1月27日 编程开发
    6.9K0
  • MySQL存储过程快速入门

    什么是存储过程 创建一个简单的存储过程 存储过程中的参数 存储过程的优势和不足 一、什么是存储过程 存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。 一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。 存储过程就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能 MySQL…

    2018年12月20日
    3.5K0
  • ADODB.Connection ���� ‘800a0e7a’ win7 IIS运行ASP常见问题及解决方法

    在win7系统通过 IIS运行ASP出现以下错误提示: ADODB.Connection 错误 ‘800a0e7a’ 很多人根据错误提示,去查数据库连接代码,其实数据库的连接代码没有错误。 出现ADODB.Connection 错误 ‘800a0e7a’的 原因 是64位Windows7操作系统中,IIS7应用程序池默认没有启用32位应用程序,而我们连接AC…

    2018年6月1日
    6.1K0
  • 如何设置mysql自动更新创建时间和更新时间

    做项目时,希望:新增记录时,mysql自动将系统的当前时间set到创建时间和更新时间这两个字段中。更新记录时,mysql只update更新时间字段的时间。 设置mysql自动更新创建时间和更新时间的方法: 找到表中创建时间和更新时间的字段,将其修改为下列代码。创建时间字段 ‘creat_time’ timestamp NULL DEFAULT CURRENT…

    2018年12月24日
    9.7K0

发表回复

登录后才能评论