(五)用正则化(Regularization)来解决过拟合

1 过拟合

过拟合就是训练模型的过程中,模型过度拟合训练数据,而不能很好的泛化到测试数据集上。出现over-fitting的原因是多方面的:

1 训练数据过少,数据量与数据噪声是成反比的,少量数据导致噪声很大

2 特征数目过多导致模型过于复杂,如下面的图所示:

看上图中的多项式回归(Polynomial regression),左边为模型复杂度很低,右边的模型复杂度就过高,而中间的模型为比较合适的模型,对于Logistic有同样的情况

如何避免过拟合

1. 控制特征的数目,可以通过特征组合,或者模型选择算法

2.Regularization,保持所有特征,但是减小每个特征的参数向量θ的大小,使其对分类y所做的共享很小

下面来详细分析正则化

来看多项式拟合的问题,对于右图复杂的模型,只需控制θ3与θ4的大小,即可使得模型达到与作图类似的结果,下面引入线性回归的L2正则的公式

如上过程就是正则化的过程,注意正则化是不带θ0的,其实带不带在实际运用中只会有很小的差异,所以不必在意,现在只需要控制λ的大小,当λ很大时,θ1到θn就会很小,即达到了约束数量庞大的特征的目的。

若选择过大的λ,会使得参数向量θ非常小,从而只剩下θ0,使得模型看起来像一条直线

而且,模型会欠拟合,梯度下降也不会收敛,而λ的选择将在特征选择中讲到

带有正则化项的梯度下降算法,首先要特殊处理θ0,

关于Normal Equation 的正则化

并且有一个不错的消息就是括号中的矩阵必定为可逆的

Logistic的正则化

首先看L2正则

其正则化的Gradient Descent形式:

时间: 2024-11-12 10:42:47

(五)用正则化(Regularization)来解决过拟合的相关文章

正则化——解决过拟合问题

线性回归例子 如果 \[{h_\theta }\left( x \right) = {\theta _0} + {\theta _1}x\] 通过线性回归得到的曲线可能如下图 这种情况下,曲线对数据的拟合程度不好.这种情况称为"Underfit",这种情况属于"High bias"(高偏差). 如果 \[{h_\theta }\left( x \right) = {\theta _0} + {\theta _1}x + {\theta _2}{x^2}\] 通过线性

正则化为什么能防止过拟合(重点地方标红了)

正则化方法:防止过拟合,提高泛化能力 在训练数据不够多时,或者overtraining时,常常会导致overfitting(过拟合).其直观的表现如下图所示,随着训练过程的进行,模型复杂度增加,在training data上的error渐渐减小,但是在验证集上的error却反而渐渐增大--因为训练出来的网络过拟合了训练集,对训练集外的数据却不work. 为了防止overfitting,可以用的方法有很多,下文就将以此展开.有一个概念需要先说明,在机器学习算法中,我们常常将原始数据集分为三部分:t

MLCC - 10简化正则化 (Regularization for Simplicity)

原文链接:https://developers.google.com/machine-learning/crash-course/regularization-for-simplicity 1- L? 正则化 泛化曲线:显示的是训练集和验证集相对于训练迭代次数的损失. 如果说某个模型的泛化曲线显示:训练损失逐渐减少,但验证损失最终增加.那么就可以说,该模型与训练集中的数据过拟合.根据奥卡姆剃刀定律,或许可以通过降低复杂模型的复杂度来防止过拟合,这种原则称为正则化. 也就是说,并非只是以最小化损失

tensorflow学习之路---解决过拟合

''' 思路:1.调用数据集 2.定义用来实现神经元功能的函数(包括解决过拟合) 3.定义输入和输出的数据4.定义隐藏层(函数)和输出层(函数) 5.分析误差和优化数据(改变权重)6.执行神经网络 '''import tensorflow as tffrom sklearn.datasets import load_digitsfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import

机器学习中使用「正则化来防止过拟合」到底是一个什么原理?为什么正则化项就可以防止过拟合?

原文:http://www.zhihu.com/question/20700829 27 个回答 46赞同反对,不会显示你的姓名 ALAN Huang,什么都会一点点 欣然.王志.马克 等人赞同 Orangeprince 的回答非常学院派,也非常系统. 过拟合表现在训练数据上的误差非常小,而在测试数据上误差反而增大.其原因一般是模型过于复杂,过分得去拟合数据的噪声和outliers. 正则化则是对模型参数添加先验,使得模型复杂度较小,对于噪声以及outliers的输入扰动相对较小. 以正则化项和

安卓飞机大战(五) 飞机瞬移的解决方法

在游戏开发时,角色可以随手指移动,但是当手指移动到屏幕另一个位置时,角色可以瞬移 解决方法如下: 在手指触摸屏幕时进行判定,如果手指点到了角色并且在屏幕上进行滑动,角色才移动 具体代码如下: 定义一个值a 当手指点到了角色并且在屏幕上进行滑动,a的值变为1,当手指离开屏幕,a的值变为0,当a=1时角色才进行移动. if(event.getAction()==MotionEvent.ACTION_DOWN&&event.getX()>=myplane.x&&event.

深度学习中 --- 解决过拟合问题(dropout, batchnormalization)

过拟合,在Tom M.Mitchell的<Machine Learning>中是如何定义的:给定一个假设空间H,一个假设h属于H,如果存在其他的假设h’属于H,使得在训练样例上h的错误率比h’小,但在整个实例分布上h’比h的错误率小,那么就说假设h过度拟合训练数据. 也就是说,某一假设过度的拟合了训练数据,对于和训练数据的分布稍有不同的数据,错误率就会加大.这一般会出现在训练数据集比较小的情况. 深度学习中避免过拟合的方法: Dropout      2012年ImageNet比赛的获胜模型A

UCloud 的安全秘钥 (计蒜客初赛第五场)(待解决)

20.7% 1200ms 262144K 每个 UCloud 用户会构造一个由数字序列组成的秘钥,用于对服务器进行各种操作.作为一家安全可信的云计算平台,秘钥的安全性至关重要.因此,UCloud 每年会对用户的秘钥进行安全性评估,具体的评估方法如下: 首先,定义两个由数字序列组成的秘钥 aa 和 bb 近似匹配(\approx≈) 的关系.aa 和 bb 近似匹配当且仅当同时满足以下两个条件: |a|=|b|∣a∣=∣b∣,即 aa 串和 bb 串长度相等. 对于每种数字 cc,cc 在 aa 

开玩笑Web它servlet(五岁以下儿童)---- 如何解决servlet线程安全问题

servlet默认值是安全线的存在,但说白,servlet安全线实际上是一个多线程线程安全问题.因为servlet它正好是一个多线程的安全问题出现. 每次通过浏览器http同意提交请求,将一个实例servlet对象.这产生一个线程,是同一个对象.应该把该变量定义成实例变量,但这就可能发生线程不安全的问题.以下举个简单的样例: 张三看到仓库里有3件物品,他要去拿两件,但这时李四也来了.抢先他一步拿了两件物品,当张三拿的时候.仓库根本无法提供给他两件物品.这就是线程不安全. 这样的情况下应该使用sy