0.概述

利用正则化(regularization)技术解决过拟合(over-fitting)问题。

1.过拟合的问题

模型的分类:欠拟合完全符合过拟合

目前已经学习的线性回归逻辑回归可以解决很多问题,在实际应用中可能会产生过度拟合(over-fitting)的问题,可能导致它们的效果很差。

这里利用正则化(regularization,有译者翻译为:规范化)技术减少过度拟合的问题。

减少过拟合的方法:
1. 丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征, 或者使用一些模型选择的算法来帮忙(例如 PCA)
2. 正则化。 保留所有的特征,但是减少参数的大小(magnitude)。

2.代价函数

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

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

所以我们要做的就是在一定程度上减小这些参数 θ 的值,这就是正则化的基本思想

回顾一下线性回归的代价函数公式:

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

我们通过在代价函数后面添加正则化项以防止过拟合的现象。

正则化的代价函数如下所示:

其中lambda又称为正则化参数( Regularization Parameter)。

由于这里的规范化项的最高次为2次项,因而也叫L2规范化

规范化可以理解为寻找小的权重和最小化原始的代价函数之间的折中。

在其他资料里用theata用w表示。

3.正则化线性回归

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

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

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

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

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

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

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

4.正则化的逻辑回归模型

逻辑函数正则化的表达式为:

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

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

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

5.规范化的其他技术

L1规范化是在未规范化的代价函数上加一个权重绝对值的和:

比较:L1和L2规范化都是惩罚大的权重,但是权重缩小的方式不同。在L1规范化中,权重通过一个常量向0进行缩小,在L2规范化中,权重通过一个和w成正比的量进行缩小的。

6.总结

目前大家对机器学习算法可能还只是略懂,但是一旦你精通了线性回归、高级优化算法和正则化技术,坦率地说,你对机器学习的理解可能已经比许多工程师深入了。因此,可以通过大量实验已巩固深化已学的线性回归、逻辑逻辑回归以及正则化的方法。

7.参考资料

[1] Ng的机器学习 [2] 深度学习与神经网络

机器学习教程之4-正则化(Regularization)的更多相关文章

  1. 如何在IOS中的UIStackView中设置权重

    UIStackView类似于AndroidLinearLayout,但我无法弄清楚如何为子视图设置权重.假设我有一个垂直的UIStackView和3个UIImageViews.我想为UIImageViews连续设置权重3,6,1.我怎么做?解决方法UIStackView没有相同的权重概念.它可以使用子视图的intrinsicContentSize作为权重,但设置特定的intrinsicConten

  2. 具有多列的Android ListView正确对齐

    我的平板电脑应用程序在每个订单项中显示一个包含多个TextView的ListView.我有大约6-7列,给所有列提供相等空格的最佳方法是什么?

  3. Android中的自然语言处理API

    我正在尝试制作类似于thiswebsite的Android应用程序.问题是我对自然语言处理领域很陌生.我不希望实现太多,只是提供用户与应用程序的一些交互,给他一种感觉,他确实在与某人聊天.基本上,我只是捕获用户输入的文本并将其发送到API并显示从API检索的结果.我遇到了http://opennlp.apache.org/和http://gate.ac.uk/,但不知道如何在我的Android应用

  4. python机器学习GCN图卷积神经网络原理解析

    这篇文章主要为大家介绍了GCN图卷积神经网络原理及代码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  5. Python反向传播实现线性回归步骤详细讲解

    回归是监督学习的一个重要问题,回归用于预测输入变量和输出变量之间的关系,特别是当输入变量的值发生变化时,输出变量的值也随之发生变化。回归模型正是表示从输入变量到输出变量之间映射的函数

  6. 正则化DropPath/drop_path用法示例(Python实现)

    DropPath 类似于Dropout,不同的是 Drop将深度学习模型中的多分支结构随机"失效",而Dropout是对神经元随机"失效"这篇文章主要给大家介绍了关于正则化DropPath/drop_path用法的相关资料,需要的朋友可以参考下

  7. Python实现多元线性回归的梯度下降法

    梯度下降法的机器学习的重要思想之一,梯度下降法的目标,是使得代价函数最小。本文主要和大家分享的是python实现多元线性回归的梯度下降法,感兴趣的可以了解一下

  8. Tensorflow 实现线性回归模型的示例代码

    这篇文章主要介绍了Tensorflow 实现线性回归模型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  9. PHP机器学习库php-ml的简单测试和使用方法

    下面小编就为大家带来一篇PHP机器学习库php-ml的简单测试和使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. PHP实现机器学习之朴素贝叶斯算法详解

    这篇文章主要介绍了PHP实现机器学习之朴素贝叶斯算法,结合实例形式详细分析了朴素贝叶斯算法的概念、原理及php实现技巧,需要的朋友可以参考下

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部