7、 正则化(Regularization)

7、 正则化(Regularization)7.1过拟合的问题到现在为止,我们已经学习了几种不同的学习算法,包括线性回归和逻辑回归,它们能够有效地解决许多问题,但是当将它们应用到某些特定的机器学习应用时,会遇到过拟合(over-fittin

大家好,又见面了,我是你们的朋友全栈君。

7.1 过拟合的问题

  到现在为止,我们已经学习了几种不同的学习算法,包括线性回归和逻辑回归,它们能够有效地解决许多问题,但是当将它们应用到某些特定的机器学习应用时,会遇到过拟合(over-fitting)的问题,可能会导致它们效果很差。

  在这段视频中,我将为你解释什么是过度拟合问题,并且在此之后接下来的几个视频中,我们将谈论一种称为正则化(regularization)的技术,它可以改善或者减少过度拟合问题

如果我们有非常多的特征,我们通过学习得到的假设可能能够非常好地适应训练集(代价函数可能几乎为0),但是可能会不能推广到新的数据。

下图是一个回归问题的例子:

 <span role="heading" aria-level="2">7、 正则化(Regularization)

第一个模型是一个线性模型,欠拟合,不能很好地适应我们的训练集;第三个模型是一个四次方的模型,过于强调拟合原始数据,而丢失了算法的本质:预测新数据。我们可以看出,若给出一个新的值使之预测,它将表现的很差,是过拟合,虽然能非常好地适应我们的训练集但在新输入变量进行预测时可能会效果不好;而中间的模型似乎最合适。

分类问题中也存在这样的问题:

<span role="heading" aria-level="2">7、 正则化(Regularization)

就以多项式理解,x$的次数越高,拟合的越好,但相应的预测的能力就可能变差。

问题是,如果我们发现了过拟合问题,应该如何处理?

  1. 丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择的算法来帮忙(例如PCA)

  2. 正则化。 保留所有的特征,但是减少参数的大小(magnitude)。

7.2 代价函数

上面的回归问题中如果我们的模型是: 

<span role="heading" aria-level="2">7、 正则化(Regularization)

  我们可以从之前的事例中看出,正是那些高次项导致了过拟合的产生,所以如果我们能让这些高次项的系数接近于0的话,我们就能很好的拟合了。

  所以我们要做的就是在一定程度上减小这些参数θ 的值,这就是正则化的基本方法。我们决定要减少θ3和θ4的大小,我们要做的便是修改代价函数,在其中θ3和θ4设置一点惩罚。这样做的话,我们在尝试最小化代价时也需要将这个惩罚纳入考虑中,并最终导致选择较小一些的θ3和θ4。 修改后的代价函数如下:

<span role="heading" aria-level="2">7、 正则化(Regularization)

通过这样的代价函数选择出的θ3和θ4 对预测结果的影响就比之前要小许多。假如我们有非常多的特征,我们并不知道其中哪些特征我们要惩罚,我们将对所有的特征进行惩罚,并且让代价函数最优化的软件来选择这些惩罚的程度。这样的结果是得到了一个较为简单的能防止过拟合问题的假设:

<span role="heading" aria-level="2">7、 正则化(Regularization)

其中?称为正则化参数(Regularization Parameter)。 注:根据惯例,我们不对?0   进行惩罚。经过正则化处理的模型与原模型的可能对比如下图所示:

<span role="heading" aria-level="2">7、 正则化(Regularization)

  如果选择的正则化参数λ大,则会把所有的参数都最小化了,导致模型变成 hθ(x)=θ0,也就是上图中红色直线所示的情况,造成欠拟合。

   那为什么增加的一项<span role="heading" aria-level="2">7、 正则化(Regularization)可以使θ的值减小呢?

   因为如果我们令  ?   的值很大的话,为了使Cost Function 尽可能的小,所有的θ 的值(不包括θ0)都会在一定程度上减小。 但若? 的值太大了,那么θ 的值(不包括θ0)都会趋近于0,这样我们所得到的只能是一条平行于x轴的直线。 所以对于正则化,我们要取一个合理的  ?  的值,这样才能更好的应用正则化。 回顾一下代价函数,为了使用正则化,让我们把这些概念应用到到线性回归和逻辑回归中去,那么我们就可以让他们避免过度拟合了。

 7.3 正则化线性回归

对于线性回归的求解,我们之前推导了两种学习算法:一种基于梯度下降,一种基于正规方程。

正则化线性回归的代价函数为:

<span role="heading" aria-level="2">7、 正则化(Regularization)

如果我们要使用梯度下降法令这个代价函数最小化,因为我们未对进行正则化,所以梯度下降算法将分两种情形:

<span role="heading" aria-level="2">7、 正则化(Regularization)

 

 

 对上面的算法中? = 1,2, . . . , ?  时的更新式子进行调整可得:

<span role="heading" aria-level="2">7、 正则化(Regularization)

 

 

 可以看出,正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的基础上令?值减少了一个额外的值。

我们同样也可以利用正规方程来求解正则化线性回归模型,方法如下所示:

<span role="heading" aria-level="2">7、 正则化(Regularization)

 

 

 图中的矩阵尺寸为 (n+1)*(n+1)。

7.4 正则化的逻辑回归模型

  针对逻辑回归问题,我们在之前的课程已经学习过两种优化算法:我们首先学习了使用梯度下降法来优化代价函数?(?),接下来学习了更高级的优化算法,这些高级优化算法需要你自己设计代价函数?(?)。

<span role="heading" aria-level="2">7、 正则化(Regularization)

 

 自己计算导数同样对于逻辑回归,我们也给代价函数增加一个正则化的表达式,得到代价函数:

<span role="heading" aria-level="2">7、 正则化(Regularization)

 

 python代码:

 1 import numpy as np 
 2 def costReg(theta, X, y, learningRate): 3 theta = np.matrix(theta) 4 X = np.matrix(X) 5 y = np.matrix(y) 6 first = np.multiply(-y, np.log(sigmoid(X*theta.T))) 7 second = np.multiply((1 - y), np.log(1 - sigmoid(X*theta.T))) 8 reg = (learningRate / (2 * len(X))* np.sum(np.power(theta[:,1:the 9 ta.shape[1]],2)) 10 return np.sum(first - second) / (len(X)) + reg 

要最小化该代价函数,通过求导,得出梯度下降算法为:

<span role="heading" aria-level="2">7、 正则化(Regularization)

注:看上去同线性回归一样,但是知道 hθ(x)=g(θTX),所以与线性回归不同。

 Octave 中,我们依旧可以用 fminuc 函数来求解代价函数最小化的参数,值得注意的是参数θ0的更新规则与其他情况不同。 注意:

  1. 虽然正则化的逻辑回归中的梯度下降和正则化的线性回归中的表达式看起来一样,但由于两者的hθ(x)不同所以还是有很大差别。

  2. θ0不参与其中的任何一个正则化。

  目前大家对机器学习算法可能还只是略懂,但是一旦你精通了线性回归、高级优化算法和正则化技术,坦率地说,你对机器学习的理解可能已经比许多工程师深入了。现在,你已经有了丰富的机器学习知识,目测比那些硅谷工程师还厉害,或者用机器学习算法来做产品。

  接下来的课程中,我们将学习一个非常强大的非线性分类器,无论是线性回归问题,还是逻辑回归问题,都可以构造多项式来解决。你将逐渐发现还有更强大的非线性分类器,可以用来解决多项式回归问题。我们接下来将将学会,比现在解决问题的方法强大N倍的学习算法。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154380.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 《算法图解》-9动态规划 背包问题,行程最优化

    《算法图解》-9动态规划 背包问题,行程最优化本文属于《算法图解》系列。学习动态规划,这是一种解决棘手问题的方法,它将问题分成小问题,并先着手解决这些小问题。一背包问题背包问题,在可装物品有限的前提下,尽量装价值最大的物品,如果物品数量足够大,简单的暴力穷举法是不可行的O(2ⁿ),前一章介绍了《贪婪算法》就是解决如何找到近似解,这接近最优解,但可能不是最优解。如何找到最优解呢?就是动态规划算法。动态规划先解决子问题,…

    2022年7月26日
    14
  • IDEA203版本激活码_通用破解码

    IDEA203版本激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    63
  • 数据分层之DWD

    数据分层之DWD1DWD是什么?明细粒度事实层以业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表。可以结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理.明细粒度事实层(DWD)通常分为三种:事务事实表周期快照事实表累积快照事实表。2DWD中的信息有什么?事实表中一条记录所表达的业务细节程度被称为粒度。通常粒度可以通过两种方式来表述:一种是维度属性组合所表示的细节程度,一种是所表示的具体业务含义。作为度量业务过程的事实,通常为整型或浮点型的十

    2022年6月26日
    38
  • 免备案cdn_cdn贝安装

    免备案cdn_cdn贝安装免备案CDN,符码CDN应该是使用CDN贝搭建,该CDN系统相对来说比较成熟,功能支持比较丰富。今天对符码免备案CDN进行简单的测试,仅供大家参考。首先,就是简单粗暴的多地区PING大法,简单看下CDN延迟效果:如果要是对比那么多免备案CDN延迟来说,符码CDN平均可以做到45ms的延迟,无疑是测试的所有免备案CDN中多地区PING平均延迟最小的一个,甚至一些国内CDN也达不到这个低延迟效果,延迟…

    2025年8月30日
    8
  • MJKDZ PS2手柄控制OskarBot小车(一):Arduino串口发送数据

    MJKDZ PS2手柄控制OskarBot小车(一):Arduino串口发送数据MJKDZPS2手柄控制OskarBot小车(一):Arduino串口发送数据【目录】    -1、无线通信模块设置        -1.1设置参数        -1.2调试步骤    -2、按键与通信格式        -2.1PS2按键定义        -2.2发送数据格式    -3、源代码        -3.1串口手…

    2022年5月18日
    41
  • docker项目经验_如何培育与指导部署

    docker项目经验_如何培育与指导部署每个人的前半生,都在不停地做加法。可到了后半生,我们就要学会不断地做减法。目录前置工作1、需要准备的东西2、连接云服务器安装Docker环境1、安装Docker的依赖库。2、添加DockerCE的软件源信息。3、安装DockerCE。4、启动Docker服务。准备Dockerfile并部署项目(构建新的业务镜像)1、准备nginx.conf.template、Dockerfile、dist(前端项目build后的包)2、部署项目知识点(需要…

    2022年10月19日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号