text.html 11.1 KB
Newer Older
ToTensor's avatar
ToTensor 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
 
<p class="content">在开始解决鸢尾花的多元分类之前,先插播<span class="bold">正则化</span>(regularization)这个重要的机器学习概念,因为后面除了实现多元分类之外,还将特别聚焦于正则化相关的参数调整。</p> 
<h3 class="thirdTitle" id="bw119"><a >4.6.1 正则化</a></h3> 
<p class="content_105">温故而知新,先复习一下旧的概念。</p> 
<p class="content_105">咖哥问:“小冰同学,数据的规范化和标准化,还记得吗?”</p> 
<p class="content_105">小冰一愣,说:“好像都是特征缩放相关的技术,具体差别说不准。”</p> 
<p class="content_105">咖哥说:“规范化一般是把数据限定在需要的范围,比如[0,1],从而消除了数据量纲对建模的影响。标准化一般是指将数据正态分布,使平均值为0,标准差为1。它们都是针对数据做手脚,消除过大的数值差异,以及离群数据所带来的偏见。经过规范化和标准化的数据,能加快训练速度,促进算法的收敛。”</p> 
<p class="content_105">小冰说:“那正则化也是一种对数据做手脚的方法吗?”</p> 
<p class="content_105">咖哥说:“不是。正则化不是对数据的操作。机器学习中的正则化是在损失函数里面加惩罚项,增加建模的模糊性,从而把捕捉到的趋势从局部细微趋势,调整到整体大概趋势。虽然一定程度上地放宽了建模要求,但是能有效防止过拟合的问题,增加模型准确性。它影响的是模型的权重。”</p> 
<p class="content_101"><img alt="" class="h-pic" src="http://csdn-ebook-resources.oss-cn-beijing.aliyuncs.com/images/b88b00f6ad14402ea66695d6809614da/figure-0153-0212.jpg">咖哥发言</p> 
<p class="content">regularization、和normalization和standardization这3个英文单词因为看起来相似,常常混淆。标准化、规范化,以及归一化,是调整数据,特征缩放;而正则化,是调整模型,约束权重。</p> 
<h3 class="thirdTitle" id="bw120"><a >4.6.2 欠拟合和过拟合</a></h3> 
<p class="content">正则化技术所要解决的过拟合问题,连同欠拟合(underfit)一起,都是机器学习模型调优(找最佳模型)、参数调试(找模型中的最佳参数)过程中的主要阻碍。</p> 
<p class="content">下面用图来描述欠拟合和过拟合。这是针对一个回归问题的3个机器学习模型,如下图所示。</p> 
<div class="pic"> 
 <img src="http://csdn-ebook-resources.oss-cn-beijing.aliyuncs.com/images/b88b00f6ad14402ea66695d6809614da/figure-0154-0213.jpg"> 
 <p class="imgtitle">3个机器学习模型对数据集的拟合</p> 
</div> 
<p class="content">同学们可以想一想,这3个机器学习模型,哪一个的误差最小?</p> 
<p class="content">正确答案是第3个。</p> 
<p class="content">在开展一个机器学习项目的初期,会倾向于用比较简单的函数模型去拟合训练数据集,比如线性函数(上图第1个)。后来发现简单的函数模型不如复杂一点的模型拟合效果好,所以调整模型之后,有可能会得到更小的均方误差(上图第2个)。但是,计算机专业的总会有点小强迫症,这是我们的职业病啊。如果继续追求更完美的效果,甚至接近于0的损失,可能会得到类似于上图第3个函数图形。</p> 
<p class="content">那么上图第3个函数好不好呢?</p> 
<p class="content">好不好,不能单看训练集上的损失。或者说,不能主要看训练集上的损失,更重要的是看测试集上的损失。让我们画出机器学习模型优化过程中的误差图像,如下图所示。</p> 
<div class="pic"> 
 <img src="http://csdn-ebook-resources.oss-cn-beijing.aliyuncs.com/images/b88b00f6ad14402ea66695d6809614da/figure-0154-0214.jpg"> 
 <p class="imgtitle">寻找模型优化和泛化的平衡点</p> 
</div> 
<p class="content">看得出来,一开始模型“很烂”的时候,训练集和测试集的误差都很大,这是<span class="bold">欠拟合</span>。随着模型的优化,训练集和测试集的误差都有所下降,其中训练集的误差值要比测试集的低。这很好理解,因为函数是根据训练集拟合的,泛化到测试集之后表现会稍弱一点。但是,如果此处继续增加模型对训练集的拟合程度,会发现测试集的误差将逐渐升高。这个过程就被称作<span class="bold">过拟合</span></p> 
<p class="content_101"><img alt="" class="h-pic" src="http://csdn-ebook-resources.oss-cn-beijing.aliyuncs.com/images/b88b00f6ad14402ea66695d6809614da/figure-0155-0215.jpg">咖哥发言</p> 
<p class="content">注意,这里的模型的复杂度可以代表迭代次数的增加(内部参数的优化),也可以代表模型的优化(特征数量的增多、函数复杂度的提高,比如从线性函数到二次、多次函数,或者说决策树的深度增加,等等)。</p> 
<p class="content">所以,过拟合就是机器学习的模型过于依附于训练集的特征,因而模型<span class="bold">泛化</span>能力降低的体现。泛化能力,就是模型从训练集移植到其他数据集仍然能够成功预测的能力。</p> 
<p class="content">分类问题也会出现过拟合,如下图所示,过于细致的分类边界也造成了过拟合。</p> 
<div class="pic"> 
 <img src="http://csdn-ebook-resources.oss-cn-beijing.aliyuncs.com/images/b88b00f6ad14402ea66695d6809614da/figure-0155-0216.jpg"> 
 <p class="imgtitle">3个分类器的分类边界</p> 
</div> 
<p class="content"><span class="bold">过拟合现象是机器学习过程中怎么甩都甩不掉的阴影</span>,影响着模型的泛化功能,因此我们几乎在每一次机器学习实战中都要和它作战!</p> 
<p class="content">刚才用逻辑回归模型进行心脏病预测的时候,我们也遇见了过拟合问题。那么,有什么方法解决吗?</p> 
<p class="content">降低过拟合现象通常有以下几种方法。</p> 
<p class="content">■增加数据集的数据个数。数据量太小时,非常容易过拟合,因为小数据集很容易精确拟合。</p> 
<p class="content">■找到模型优化时的平衡点,比如,选择迭代次数,或者选择相对简单的模型。</p> 
<p class="content"><span class="bold">正则化</span>。为可能出现过拟合现象的模型增加正则项,通过降低模型在训练集上的精度来提高其泛化能力,这是非常重要的机器学习思想之一。</p> 
<h3 class="thirdTitle" id="bw121"><a >4.6.3 正则化参数</a></h3> 
<p class="content">机器学习中的正则化通过引入模型参数<span class="italic">λ</span>(lambda)来实现。</p> 
<p class="content">加入了正则化参数之后的线性回归均方误差损失函数公式被更新成下面这样: </p> 
<div class="bodyPic_104"> 
 <img src="http://csdn-ebook-resources.oss-cn-beijing.aliyuncs.com/images/b88b00f6ad14402ea66695d6809614da/figure-0155-0217.jpg"> 
</div> 
<p class="content">加入了正则化参数之后的逻辑回归均方误差损失函数公式被更新成下面这样:</p> 
<div class="bodyPic_104"> 
 <img src="http://csdn-ebook-resources.oss-cn-beijing.aliyuncs.com/images/b88b00f6ad14402ea66695d6809614da/figure-0155-0218.jpg"> 
</div> 
<p class="content">现在的训练优化算法是一个由两项内容组成的函数:一个是<span class="bold">损失项</span>,用于衡量模型与数据的拟合度;另一个是<span class="bold">正则化项</span>,用于调解模型的复杂度。</p> 
<p class="content">公式看起来有点小复杂,但也不用特别介意,因为正则化参数已经被嵌入Python的库函数内部。从直观上不难看出,将正则化机制引入损失函数之后,当权重大的时候,损失被加大,<span class="italic">λ</span>值越大,惩罚越大。这个公式引导着机器在进行拟合的时候不会随便增加权重。</p> 
<p class="content">记住,正则化的目的是帮助我们减少过拟合的现象,而它的本质是约束(限制)要优化的参数。</p> 
<p class="content">其实,正则化的本质,就是<span class="bold">崇尚简单化</span>。同时以最小化损失和复杂度为目标,这称为<span class="bold">结构风险最小化</span></p> 
<p class="content_101"><img alt="" class="h-pic" src="http://csdn-ebook-resources.oss-cn-beijing.aliyuncs.com/images/b88b00f6ad14402ea66695d6809614da/figure-0156-0219.jpg">咖哥发言</p> 
<p class="content">奥卡姆的威廉是14世纪的修士和哲学家,是极简主义的早期代言人。他提出的<span class="bold">奥卡姆剃刀定律</span>认为科学家应该优先采用更简单的公式或理论。将该理论应用于机器学习,就意味着越简单的模型,有可能具有越强的泛化能力。</p> 
<p class="content">选择<span class="italic">λ</span>值的目标是在简单化和训练集数据拟合之间达到适当的平衡。</p> 
<p class="content">■如果<span class="italic">λ</span>值过大,则模型会非常简单,将面临数据欠拟合的风险。此时模型无法从训练数据中获得足够的信息来做出有用的预测。而且<span class="italic">λ</span>值越大,机器收敛越慢。</p> 
<p class="content">■如果<span class="italic">λ</span>值过小,则模型会比较复杂,将面临数据过拟合的风险。此时模型由于获得了过多训练数据特点方面的信息而无法泛化到新数据。</p> 
<p class="content">■将<span class="italic">λ</span>设为0可彻底取消正则化。在这种情况下,训练的唯一目的是最小化损失,此时过拟合的风险较高。</p> 
<p class="content">正则化参数通常有L1正则化和L2正则化两种选择。</p> 
<p class="content">■L1正则化,根据权重的绝对值的总和来惩罚权重。在依赖稀疏特征(后面会讲什么是稀疏特征)的模型中,L1正则化有助于使不相关或几乎不相关的特征的权重正好为0,从而将这些特征从模型中移除。</p> 
<p class="content">■L2正则化,根据权重的平方和来惩罚权重。L2 正则化有助于使离群值(具有较大正值或较小负值)的权重接近于0,但又不会正好为0。在线性模型中,L2 正则化比较常用,而且在任何情况下都能够起到增强泛化能力的目的。</p> 
<p class="content">同学们可能注意到了,刚才给出的正则化公式实际上是L2正则化,因为权重<span class="italic">w</span>正则化时做了平方。</p> 
<p class="content_101"><img alt="" class="h-pic" src="http://csdn-ebook-resources.oss-cn-beijing.aliyuncs.com/images/b88b00f6ad14402ea66695d6809614da/figure-0156-0220.jpg">咖哥发言</p> 
<p class="content">正则化不仅可以应用于逻辑回归模型,也可以应用于线性回归和其他机器学习模型。应用L1正则化的回归又叫Lasso Regression(套索回归),应用L2正则化的回归又叫Ridge Regression(岭回归)。</p> 
<p class="content">而最佳<span class="italic">λ</span>值则取决于具体数据集,需要手动或自动进行调整。下面就通过多元分类的一个案例来解释正则化参数的调整。</p>