过拟合问题(the problem of overfitting)
在理解过拟合之前,我们可以先从简单的欠拟合入手。后者顾名思义,就是数据与假设函数存在一定的偏差,以线性回归的房价问题举例,欠拟合就是不顾数据特征,先入为主地拟合一条直线并认为数据的分布特性符合这条直线。那么反过来,过拟合其实就是虽然拟合的曲线经过了每一个点,看起来是很好地拟合了数据,但是实际上曲线的波动并不符合实际,我们也并不认为这种曲线能作为预测房价的好模型。
通常过拟合问题较多发生在变量较多的问题,按照过拟合得出的假设函数可以很好地拟合训练集,而且这样得出的代价函数可能会非常接近0或者就恰好等于0,这样的曲线只想着拟合当前这个数据集,导致其无法泛化到新的样本中,泛化指的是一个假设模型应用到新样本的能力,通俗的讲,新样本就是在房价的预测模型中没有在训练集中出现的房子的面积。下面给出两张图来直观地反应在线性回归和逻辑回归中,欠拟合、正常以及过拟合的曲线的样子,如下:
线性回归中欠拟合、正常以及过拟合曲线
逻辑回归中欠拟合、正常以及过拟合曲线
从图中我们能发现,过拟合的曲线波动,确实是像在“千方百计”地去拟合训练集,尤其是在逻辑回归中更为明显,曲线甚至绕了很多圈来分开两类样本,这更加说明其不能泛化到新样本,毕竟也许新样本里也有这样的怪数据,但分布很可能与其大不相同。
在前面遇到的学习问题中,我们能通过画出散点图后来判断假设曲线可能的函数形式,从而决定多项式的次数,但很多时候,要解决的问题中总是有很多变量。不仅如此,决定了多项式的次数还不足以能决定函数的形式,在这之前还需要判断保留哪些有用的特征变量从而使数据可视化是有效的。一般来说,当特征变量很多,但训练数据很少的时候,就很容易出现过拟合问题。那么,当过拟合问题出现时,我们该怎样去解决呢?
有两个方法来解决这个问题,第一个是尽可能地减少选取的特征变量。具体来说,就是通过人为地检查所有变量来筛选出哪些是有用的变量从而保留,尽管这确实减少了复杂度,但只要是特征变量,就代表它蕴含了这个模型的某种信息,人为地筛选可能会导致错过关键信息从而使模型的建立更加困难。接下来,我们来谈谈第二种方法。
正则化(regularization)
既要保证保留所有特征变量,又想要减少一些可能无关的特征变量对模型的作用,我们可以让这些特征变量前的参数值尽可能地小。试想一下,在上图线性回归的例子中,如果参数很小,小到几乎等于0,那么其假设函数的曲线还是跟正常情况下一样呈现出二次函数的特性,在此基础上还保留了特征量
,这种把其参数变得很小的做法,其实就是对这些特征变量做了惩罚,让模型更简单。
但是,我们该如何知道给哪些特征变量加惩罚项呢,我们事先并不知道哪些变量的相关度更低。很简单,既然我们不知道哪个相关度更低,我们可以通过修改代价函数的方式来给每个参数都加一个惩罚,即,这种做惩罚的过程就叫做正则化,其中
就叫做正则化参数。
合适地选取正则化参数,才能做到简化模型,若参数过大,会把所有参数都优化掉只留下一个 ;若参数过小,则会保留很多不必要的参数。
正则化线性回归与逻辑回归(regularized linear regression and logistics regression)
由于我们并没有对进行惩罚,所以在梯度下降的更新公式里把它和其它参数分开来写。对于其余参数,我们要做的修改其实只是像之前一样把正则化也一起求偏导然后加到一起,即
,在此基础上作一定的变形,得到
,注意
,由于学习率很小,且训练样本通常是很大的,这说明
是接近于1但小于1的,也就是说在每次更新中,除了正常更新参数之外,还会把
每次都变小一点点,也就是慢慢减小它对模型的影响。
对于正规方程来说,则是在其求参数的式子中加入一个左上角为0的(n+1)维的单位矩阵,如下:
正则化正规方程
当然了,这里加入矩阵后也是可逆的,感兴趣的可以去算一下其行列式,它的行列式不为0,说明了其行向量和列向量不存在线性相关的关系,可以通过矩阵乘法得到逆矩阵。
类似的,对应用在逻辑回归的梯度下降做正则化,即,当然,由于假设函数不一样,这里的表达式表达的意义是不一样的。
而对于应用在逻辑回归上的高级算法来说,我们只需要用代码实现时对代驾函数做改写,即加入正则项即可。
学习内容来自于b站吴恩达大佬课程:https://www.bilibili.com/video/BV1By4y1J7A5?spm_id_from=333.788.player.switch&vd_source=867b8ecbd62561f6cb9b4a83a368f691&p=1