【机器学习】过拟合与正则化

news2025/1/17 13:50:50

上一章——逻辑回归

文章目录

  • 三种拟合状态
  • 解决过拟合的三种方法
  • 什么是正则化
  • 正则化的数学原理
    • 线性回归
  • 恭喜


三种拟合状态

在之前的课程中,我们说过机器学习的中极为重要的一步,就是给训练集找到一条合适的拟合曲线。
还是以房价问题这个回归问题为例,我们可以把拟合状态分为以下三种:
在这里插入图片描述

在我们刚刚接触的时候,用的就是线性回归的方式来拟合,如上图所示,显然线性回归并不是很拟合上图的数据,我们把这种状态称为欠拟合,欠拟合代表当前的假设函数对于数据的拟合状态欠佳,并不太适合,专业术语称为高偏差(high bias),偏差(bias)指的是算法的期望预测与真实结果的偏离程度
在这里插入图片描述

后来我们学习了更好的拟合方法:用多项式函数来拟合。在上面这个例子中显然多项式函数拟合更为适当,它的偏差较小,并且我们希望对于还未加入训练集的其他样本,也能和我们当前的模型相符。我们把这种能力称为:泛化,指的是当前的算法对于其他未加入的样本依然具有适用性。虽然函数并没有完美拟合所有的数据点,但是依然很够用了。
在这里插入图片描述

是不是函数能够完美拟合所有数据点就是最好的呢?让我们看看上图的例子,我们在粉色点处添加一个数据,并且拓展到了四次项,最后得到了一个完美经过所有数据点的函数。但是我们却认为这样的函数是不适合的,称为过拟合,意思就是它对数据的拟合程度已经过头了,不具有泛化性。我们可以称其为具有高方差(high variance),方差(variance)指同样大小训练集的变动而导致的学习性能的变化

在这里插入图片描述另一个例子就是分类问题,还是以肿瘤问题为例,我们可以看到过拟合和欠拟合都不适合这个模型,我们允许出现偏差和方差,但是不应该为了拟合某几个数据而导致全局误差变大,过拟合和欠拟合的问题就在于此。

最后让我们来总结一下三种拟合状态:
我们要清楚,尽管我们要尽可能拟合数据,但并不是拟合程度越高越好,走向极端往往会导致覆灭。我们既不需要拟合欠佳的欠拟合,也不需要拟合过度的过拟合,我们需要的是对数据具有泛化能力的拟合,达到刚刚好的程度。

  • 欠拟合的特点是:低拟合,高偏差
  • 过拟合的特点是:过拟合,高方差
  • 恰当的拟合拥有的特点是:高拟合,泛化性

机器学习的目的就是找到一个既不欠拟合,又不过拟合的模型,换句话说就是找到一个既没有高偏差,又没有高方差的模型。


解决过拟合的三种方法

在这里插入图片描述
假设你拟合出了上面这种模型,不难发现这样是过拟合的,不过我们当然有方法来解决它。
在这里插入图片描述
如果说我们要预测的数据的确存在着某种关系,那么其中的一个解决方法就是尽可能地收集更多训练样本。如上图所示,在上面这个例子中,当我们收集了足够多的训练样本之后,发现整体样本的确存在着类似二次函数的关系,那么随着样本的增加,拟合程度也越来越正确。
从理论上来讲,足够多的训练样本是可以解决过拟合问题的。但是这种方法的缺点在于实际上可能并没有这么多的训练样本。
在这里插入图片描述
从函数构造的角度出发,我们最终得到的过拟合函数往往是由于多项式的项数过多导致的,准确来说是由于“特征很多,但是对应的数据却很缺乏”,而项数是由特征数量决定的。因此,如果能够减少项数,也就是减少特征的数量,就能解决过拟合问题。因此减少特征数量也是一种解决方法。我们可以通过选择特征子集构建假设函数解决过拟合的问题。但是这种方法的缺点在于如果所包含的特征都是有用的特征,我们不得不舍弃掉一些特征来解决过拟合问题,同样会导致最后预测的结果可能出现问题,这是我们不愿意看到的。

在这里插入图片描述
假如我们并不想舍弃特征,也没有那么多的样本,那么正则化将是一种良好的解决过拟合的方法,而在实际中也常常是使用正则化。
假设你想要舍弃特征 x 4 x_4 x4来达到解决过拟合的效果,然而实际并不允许你舍弃它,我们可以转换思路,通过限制这个特征来减少对函数的影响,例如上图,原本 x 4 x_4 x4的系数参数 w 4 w_4 w4 174 174 174,我们将其系数参数改为 0.0001 0.0001 0.0001,正则化通过减小了系数参数来减小了该特征对于假设公式整体的权重,从而达到解决过拟合的目的,我们并不是暴力消除这个特征,而是调整了其权重。

总结一下三种方法:

  • 增加样本数量
  • 减少特征选取
  • 使用正则化

接下来我们将解析正则化的数学原理。


什么是正则化

在这里插入图片描述

让我们看看上图的例子,左边是二次项拟合,右边是四次项拟合,对比两种拟合方式显然二次项是更加适合的。但是如果要求选取四个特征,我们的做法就是用正则化来处理。
假设当x取1000,让我们求出参数系数 w 1 . . . w n 和 b w_1...w_n和b w1...wnb,你应该没有忘记需要用到最小二乘法构造的代价函数来求(在前几章中参数系数被称为 θ i θ_i θi)。注意我们在图中框出的公式,红色部分是二次项拟合的代价函数,而红框+蓝框是右边四次项拟合的代价函数,蓝框是对比之下多出来的部分。
我们的目的是使得四次项拟合接近二次项拟合的效果,我们也讲了方法就是使得高次项参数系数取得足够小,来减少它们对函数的影响。
以上图为例,当 x = 1000 x=1000 x=1000,取 w 3 = 0.001 , w 4 = 0.002 w_3=0.001,w_4=0.002 w3=0.001,w4=0.002,当参数足够小,就能抵消这些特征对函数的影响,最后我们得到的拟合曲线如紫色曲线所示,和二次项十分接近。

在这里插入图片描述

假设你有很多的特征,但是你不知道哪些特征是应该正则化的,哪些特征是不用处理的。我们通常的解决方法是全部正则化,通过惩罚所有的参数系数,我们将拟合出一个更为平滑,更为简单,更不容易过拟合的函数,尽管会牺牲一点准确性,但能有效解决过拟合的问题。
以上图为例,假设你有100个特征,共101个参数,但是我们并不知道哪个特征更重要。最好的解决方法就是对所有特征进行正则化。
正则化公式如下:
J ( w ⃗ , b ) = 1 2 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) 2 + λ 2 m ∑ i = 1 n w j 2 J(\vec w,b)=\cfrac{1}{2m}\displaystyle\sum_{i=1}^m \bigg(f_{\vec w,b}(\vec x^{(i)})-y^{(i)}\bigg)^{2}+\cfrac{λ}{2m}\displaystyle\sum_{i=1}^nw_j^2 J(w ,b)=2m1i=1m(fw ,b(x (i))y(i))2+2mλi=1nwj2
在代价函数后面加上的那部分就是正则化公式,其中乘以 1 2 m \cfrac{1}{2m} 2m1是为了数据缩放一致
λ λ λ是正则化参数,和学习率相似,需要自主选择适合的数字。
如果考虑常数系数b的话也可以加入这项:
J ( w ⃗ , b ) = 1 2 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) 2 + λ 2 m ∑ i = 1 n w j 2 + λ 2 m b J(\vec w,b)=\cfrac{1}{2m}\displaystyle\sum_{i=1}^m \bigg(f_{\vec w,b}(\vec x^{(i)})-y^{(i)}\bigg)^{2}+\cfrac{λ}{2m}\displaystyle\sum_{i=1}^nw_j^2+\cfrac{λ}{2m}b J(w ,b)=2m1i=1m(fw ,b(x (i))y(i))2+2mλi=1nwj2+2mλb

正则化通常只处理特征的参数系数 w 1 . . . w n w_1...w_n w1...wn,对于常数系数 b b b不用处理,当然处理也可。

在这里插入图片描述
再来看这个式子,红色框代表代价函数部分,紫色代表正则化项。
当我们取 λ = 0 λ=0 λ=0时,相当于不进行正则化处理,则函数会回到过拟合状态。
在这里插入图片描述
当我们取 λ = 1 0 10 λ=10^{10} λ=1010时,由于取值λ实在太大了,因此所有的参数系数 w j w_j wj的取值会接近0,因此导致未知数项都接近于0,最后得到的假设函数就接近于y=b这条直线,最后的结果是函数变成欠拟合状态。
因此正则化的取值会影响假设函数的拟合状态,当正则化参数λ过小会导致过拟合,当正则化参数λ过大会导致欠拟合,因此取值适当的λ是必要的。


正则化的数学原理

在这里插入图片描述依旧是梯度回归公式,我们只需求出代价函数的偏导即可,如上图所示。

线性回归

让我们试图带入线性回归的假设方程 f f f看看

在这里插入图片描述
梯度下降带入线性回归的假设方程后展开就变成了这个式子
w j = 1 w j − α λ m w j − α 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) x j ( i ) w_j=1w_j-α\cfrac{λ}{m}w_j-α\cfrac{1}{m}\displaystyle\sum_{i=1}^m \bigg(f_{\vec w,b}(\vec x^{(i)})-y^{(i)}\bigg)x_j^{(i)} wj=1wjαmλwjαm1i=1m(fw ,b(x (i))y(i))xj(i)
我们将其整理一下可以分成两个部分
w j ( 1 − α λ m ) w_j(1-α\cfrac{λ}{m}) wj(1αmλ)
− α 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) x j ( i ) -α\cfrac{1}{m}\displaystyle\sum_{i=1}^m \bigg(f_{\vec w,b}(\vec x^{(i)})-y^{(i)}\bigg)x_j^{(i)} αm1i=1m(fw ,b(x (i))y(i))xj(i)
在学习率α确定的情况下,②部分的值是一个常量,那么只需看①部分的变化
①部分值随着λ变化,而由于 1 − α λ m < 1 1-α\cfrac{λ}{m}<1 1αmλ<1,因此 w j ( 1 − α λ m ) < w j w_j(1-α\cfrac{λ}{m})<w_j wj(1αmλ)<wj
我们也知道导数其实代表了函数的变化趋势,在梯度下降算法中证明了当 a ! = 0 , λ ! = 0 a!=0,λ!=0 a!=0,λ!=0时, w j w_j wj一定会随着迭代次数的增加而逐渐变小,而这正是正则化的原理所在。

在这里插入图片描述
逻辑回归中也同理,只需替换为对应的假设函数 f f f和代价函数 J J J即可


恭喜

恭喜你,到此你已经完成了机器学习相关的理论内容,不要忘记复习巩固。在下一章节中我们将学习深度学习的知识内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/335324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【微服务】微服务架构超强讲解,通俗易懂

微服务架构目录一、微服务架构介绍二、出现和发展三、传统开发模式和微服务的区别四、微服务的具体特征五、面向服务的架构SOA&#xff08;service oriented architecture&#xff09;和微服务的区别1、SOA喜欢重用&#xff0c;微服务喜欢重写2、SOA喜欢水平服务&#xff0c;微…

Linux教程:MQTT入门基础概念与学习介绍及服务部署搭建并使用桌面工具进行测试开发

前言&#xff1a; ----在2023年的今天&#xff0c;智能家居与智能家电的兴起犹如滚滚长江迅速袭来&#xff0c;智能终端设备也不断出现在人们的视野当中&#xff0c;实现远程控制&#xff0c;其中必然不能缺少终端与终端&#xff0c;终端与服务之间的交互&#xff0c;如何来解…

ag-Grid Enterprise

ag-Grid Enterprise Ag-Grid被描述为一种商业产品&#xff0c;已在EULA下分发&#xff0c;它非常先进&#xff0c;性能就像Row分组一样&#xff0c;还有范围选择、master和case、行的服务器端模型等等。 ag Grid Enterprise的巨大特点&#xff1a; 它具有以下功能和属性&#x…

Docker调用Intel集显实现FFmpeg硬解码

文章目录Docker调用Intel集显实现FFmpeg硬解码参考FFmpeg 集成qsv方式一 容器完成所有步骤方式二 容器完成部分步骤方式三 dockerfile部署Docker调用Intel集显实现FFmpeg硬解码 参考 ffmpeg_qsv_docker拉取该镜像可以实现FFmpeg集成vaapi的硬加速&#xff0c;通过dockerfile文…

什么是特权访问管理(PAM)

特权访问管理 &#xff08;PAM&#xff09; 是指一组 IT 安全管理原则&#xff0c;可帮助企业隔离和管理特权访问、管理特权帐户和凭据、控制谁可以获得对哪些端点的管理访问权限级别&#xff0c;并监视用户对该访问权限执行的操作。 什么是特权访问 特权访问是一种 IT 系统访…

2023.2.10学习记录Docker容器

Docker 必须跑在Linux内核上 镜像是一个轻量级可执行的独立软件包 新建一个docker容器只需要几秒钟 Docker常用命令 启动类命令 镜像命令 容器命令 docker images docker search --limit 5 redis docker pull redis:6.0.8 docker system df 查看镜像/容器/…

使用QT中的绘画工具与定时器工具实现简易时钟

需求&#xff1a;使用QT中的绘画工具与定时器工具实现简易时钟代码实现过程&#xff1a;widget.h#ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QPainter> //引入画家类 #include<QPaintEvent> //引入绘制事件类 #include&l…

vue-router 源码解析(三)-实现路由守卫

文章目录基本使用导语初始化路由守卫useCallbacks 发布订阅模式管理路由守卫push 开始导航resolve返回路由记录匹配结果navigate 开始守卫抽取路由记录guardToPromiseFn 用Promise包装守卫方法extractComponentsGuards 从组件中抽取守卫beforeRouteLeave 守卫收集composition 守…

error: failed to push some refs to ... 就这篇,一定帮你解决

目录 一、问题产生原因 二、解决办法 三、如果还是出问题&#xff0c;怎么办&#xff1f;&#xff08;必杀&#xff09; 一、问题产生原因 当你直接在github上在线修改了代码&#xff0c;或者是直接向某个库中添加文件&#xff0c;但是没有对本地库同步&#xff0c;接着你想…

【数据结构初阶】第三节.顺序表详讲

文章目录 前言 一、顺序表的概念 二、顺序表功能接口概览 三、顺序表基本功能的实现 四、四大功能 1、增加数据 1.1 头插法&#xff1a; 1.2 尾插法 1.3 指定下标插入 2、删除数据 2.1 头删 2.2 尾删 2.3 指定下标删除 2.4 删除首次出现的指定元素 3、查找数据…

JAVA-线程池技术

目录 概念 什么是线程&#xff1f; 什么是线程池&#xff1f; 线程池出现背景 线程池原理图 JAVA提供线程池 线程池参数 如果本篇博客对您有一定的帮助&#xff0c;大家记得留言点赞收藏哦。 概念 什么是线程&#xff1f; 是操作系统能够进行运算调度的最小单位。&am…

ChatGPT的解释

概念 ChatGPT&#xff0c;美国OpenAI研发的聊天机器人程序,于2022年11月30日发布。ChatGPT是人工智能技术驱动的自然 语言处理工具&#xff0c;它能够通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&#xff0c;真正像人 类一样来聊天交流&am…

干货 | PCB拼板,那几条很讲究的规则!

拼板指的是将一张张小的PCB板让厂家直接给拼做成一整块。一、为什么要拼板呢&#xff0c;也就是说拼板的好处是什么&#xff1f;1.为了满足生产的需求。有些PCB板太小&#xff0c;不满足做夹具的要求&#xff0c;所以需要拼在一起进行生产。2.提高SMT贴片的焊接效率。只需要过一…

如何使用python画一个爱心

1 问题 如何使用python画一个爱心。 2 方法 桌面新建一个文本文档&#xff0c;文件后缀改为.py&#xff0c;输入相关代码ctrls保存&#xff0c;关闭&#xff0c;最后双击运行。 代码清单 1 from turtle import * def curvemove(): for i in range(200): right(1) …

Vue2笔记03 脚手架(项目结构),常用属性配置,ToDoList(本地存储,组件通信)

Vue脚手架 vue-cli 向下兼容可以选择较高版本 初始化 全局安装脚手架 npm install -g vue/cli 创建项目&#xff1a;切换到项目所在目录 vue create xxx 按照指引选择vue版本 创建成功 根据指引依次输入上面指令即可运行项目 也可使用vue ui在界面上完成创建&…

Python学习-----无序序列2.0(集合的创建、添加、删除以及运算)

目录 前言&#xff1a; 什么是集合 集合的三大特性 1.集合的创建 &#xff08;1&#xff09;直接创建 &#xff08;2&#xff09;强制转换 2.集合的添加 &#xff08;1&#xff09;add&#xff08;&#xff09;函数 &#xff08;2&#xff09;update() 函数 3.集合元…

澳大利亚访问学者申请流程总结

澳大利亚访问学者申请需要注意些什么&#xff1f;下面知识人网小编整理澳大利亚访问学者申请流程总结。1、取得wsk英语成绩&#xff0c;现在都是先买票再上车了。2、联系外导&#xff0c;申请意向接收函(email)。3、向留学基金委CSC提出申请。4、获批后&#xff0c;申请正式邀请…

Python 循环语句

Python的循环语句&#xff0c;程序在一般情况下是按顺序执行的。编程语言提供了各种控制结构&#xff0c;允许更复杂的执行路径。循环语句允许我们执行一个语句或语句组多次&#xff0c;下面是在大多数编程语言中的循环语句的一般形式&#xff1a;Python 提供了 for 循环和 whi…

【C++】类与对象理解和学习(上)

专栏放在【C知识总结】&#xff0c;会持续更新&#xff0c;期待支持&#x1f339;类是什么&#xff1f;类是对对象进行描述的&#xff0c;是一个模型一样的东西&#xff0c;限定了类有哪些成员&#xff0c;定义出一个类并没有分配实际的内存空间来存储它&#xff08;实例化后才…

视觉感知(二):车位线检测

1. 简介 本期为大家带来车位线检测相关知识点,以及算法工程落地的全流程演示。车位线检测是自动泊车领域必不可缺的一环,顾名思义就是采用环视鱼眼相机对路面上的车位线进行检测,从而识别出车位进行泊车。 较为常规的做法是使用四颗鱼眼相机环视拼接然后在鸟瞰图上做停车位…