机器学习(八) ——过拟合与正则化

机器学习(八)——过拟合与正则化

(原创内容,转载请注明来源,谢谢)

一、过拟合和欠拟合

1、概念

当针对样本集和特征值,进行预测的时候,推导θ、梯度下降等,都在一个前提,原值假设函数(hypnosis function)h(x)的表达式,例如是一阶、二阶还是更高阶等。

当阶数不足导致无法正确预测时,称为欠拟合(underfit)或高偏差(high bias);当阶数太高,虽然能满足样本集,代价函数也接近0,但是仍不是一个好的预测函数,称为过拟合(overfitting)或高方差(high variance)。

例如根据房子的面积预测房价,欠拟合、正常情况、过拟合分别如下面三个图所示:

过拟合的情况比较明显,在只有一个影响因素的情况下,因为面积增到导致价格减少是不现实的,虽然满足了所有的样本集,但是这个模型是不正确的。

logistic回归同样有类似问题:

2、过拟合存在问题

过拟合主要是因为特征值太多、阶数太高引起,如果样本集数量不够,没法有效的进行训练,会导致预测的结果存在较大偏差,模型无法使用。

二、解决过拟合方案

1、画图,并根据图像判断是否正确,如上面的例子。这个只有在影响因素很少的情况下可行,因素多时,维度高,不容易图形表示,也不容易通过图形判断是否正确。

2、减少不必要的特征值,特别是重复的特征(如用平方米和平方尺两个特征计算面积)。可以通过人工选择或模型选择算法(model selection algorithm,后面会学到)来实现。但是,这样可能会导致损失一些特征信息。

3、通过正则化(regularization)的方式实现。这种方式,不需要损失任何特征值。

三、正则化

1、基本思路

当一个式子有四个特征值,且明显后两个特征值并不重要,则可以如下设代价函数:

这样,后面两个特征值由于被加了平方项,导致值需要非常小,才可以让整个代价函数很小。

2、正则化思路

当无法确认哪些特征值是不重要的时候,则应该使用正则化,其主要思想是通过减小所有的θ,这样可以获得更简单的h(x),阶数更低;另外,也更不容易出现过度拟合的现象。

3、步骤

1)列出原先线性回归情况下的代价函数

2)改成以下公式

分析上面的公式,可以看出,代价函数加入了θ的平方项,这样使得要让代价函数值尽量小,就应该要每个θ都尽量小。

另外,上面的式子中,对θ的处理从1~n,而θ0并没有参与正则化处理。

其中,带λ的项,称为正则化项;λ称为正则化参数。该参数目的在于平衡训练集更好参与训练同时让θ都尽量小,最终达到获得更简单的h(x),阶数更低。

需要注意的是,如果λ太大,例如10的10次方,则由于每个θ都太小,接近于0,导致h(x)约等于θ0,会出现欠拟合。

四、线性回归正则化

线性回归可以使用梯度下降和标准方程法,分别讨论如下:

1、梯度下降算法

根据上面的代价函数的公式,易得梯度下降算法需要迭代的方程如下:

其中,θ0由于不参与正则化,单独列出来。

化简上面的θj的式子,把θj提取出来,公式变换如下:

从上式与正则化之前的梯度下降算法对比,实际上就是θj多乘了一个(1-α*λ/m),这个值略小于1,因此达到减小θj的目的。

2、标准方程法

对于标准方程法,正则化则需要加入下面括号带λ的这一项,这样从θ1~θm都被λ进行调整了。

之前讨论过XTX有可能不可逆的情况,但是已经经过数学论证,正则化后,只要λ>0,整个括号内的项必然可逆。

因此,正则化是解决标准方程法XTX有可能存在不可逆的方法之一。

五、logistic回归正则化

logistic回归的算法,实际上基本公式和线性回归的梯度下降法是一样的,只不过其h(x)不同,带入对应的h(x),得到logistic回归的代价函数如下公式;

——written by linhxx 2018.01.05

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2018-01-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏拭心的安卓进阶之路

Java 集合深入理解(12):古老的 Vector

今天刮台风,躲屋里看看 Vector ! 都说 Vector 是线程安全的 ArrayList,今天来根据源码看看是不是这么相...

2547
来自专栏ml

朴素贝叶斯分类器(离散型)算法实现(一)

1. 贝叶斯定理:        (1)   P(A^B) = P(A|B)P(B) = P(B|A)P(A)   由(1)得    P(A|B) = P(B|...

3667
来自专栏赵俊的Java专栏

从源码上分析 ArrayList

1211
来自专栏开发与安全

算法:AOV网(Activity on Vextex Network)与拓扑排序

在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称之为AOV网(Activity on Vextex ...

4087
来自专栏聊聊技术

原 初学图论-Kahn拓扑排序算法(Kah

3018
来自专栏刘君君

JDK8的HashMap源码学习笔记

3318
来自专栏学海无涯

Android开发之奇怪的Fragment

说起Android中的Fragment,在使用的时候稍加注意,就会发现存在以下两种: v4包中的兼容Fragment,android.support.v4.ap...

3225
来自专栏MelonTeam专栏

ArrayList源码完全分析

导语: 这里分析的ArrayList是使用的JDK1.8里面的类,AndroidSDK里面的ArrayList基本和这个一样。 分析的方式是逐个API进行解析 ...

4809
来自专栏xingoo, 一个梦想做发明家的程序员

Spark踩坑——java.lang.AbstractMethodError

百度了一下说是版本不一致导致的。于是重新检查各个jar包,发现spark-sql-kafka的版本是2.2,而spark的版本是2.3,修改spark-sql-...

1300
来自专栏xingoo, 一个梦想做发明家的程序员

AOE关键路径

这个算法来求关键路径,其实就是利用拓扑排序,首先求出,每个节点最晚开始时间,再倒退求每个最早开始的时间。 从而算出活动最早开始的时间和最晚开始的时间,如果这两个...

2657

扫码关注云+社区