过拟合问题
不管是线性回归问题还是逻辑回归问题,解决问题的模型一旦构建出来,所存在的可能有过拟合和欠拟合的问题。
依旧拿房子大小预测房子价格的线性回归问题来举栗子
欠拟合(高偏差):
此时公式为y=w1x+by=w_1x+by=w1x+b,显然是一个一次多项式,对模型显然存在欠拟合的问题(数据大部分不能被很好的覆盖掉)
好的(泛化):
此时公式为y=w1x+w2x2+by=w_1x+w_2x^2+by=w1x+w2x2+b显然比第一种表达式更加复杂,此时例子表现出的状态刚好。假设模型可以在测试数据之外表现出良好的预测,我们称之为泛化,我们都希望自己的模型有良好的泛化功能。
过拟合(高方差):
此时公式为y=w1x+w2x2+w3x3+w4x4+by=w_1x+w_2x^2+w_3x^3+w_4x^4+by=w1x+w2x2+w3x3+w4x4+b,显然比第一次和第二次更加复杂了,此时虽然对于预测数据的拟合来说极好(有点太好了),但是我们并不认为这是个良好的预测模型,因为他在各点处表现出曲折的状态,这显然不像会对测试之外的数据表现出泛化的效果。
现在我们考虑判断一个是否为恶性肿瘤的分类在过拟合/欠拟合中的例子
三种如下:
从从左到右分别表现出,欠拟合,良好,过拟合的效果,与线性回归的特征一样,在分类里面,表现出了类似的效果。(需要注意公式的复杂度,可以看出太简单和太复杂的问题构建,都会影响模型的拟合效果)
解决过拟合的三种方法
一、收集更多的数据,更多的数据可以帮助解决过拟合,但是有时候这并不可能(收集更多),效果如下图:
二、尝试选择并仅使用特征的子集
假设我们有太多的特征,并且没有对这些特征进行足够的训练,那么也会导致过拟合,解决方法就是选择使用最有用的特征(原本特征的子集),最相关的会很好的解决过拟合的问题。
三、使用正则化来减少参数的大小
我们可以考虑去减少特征的值(即选取一个很小的 $ w$,是否改变bbb对结果影响不大),那样的话会得到一条很好的拟合训练数据的曲线。
实际上正则化的作用是为了让你保留所有特征,但只是防止特征产生过大的影响(过拟合)
带正则化的成本函数
这篇介绍一个修改后的代价函数,可以用它来实际应用正则化。
依旧举一个线性回归模型的卖房子的例子
左侧函数图像:
w1x+w2x2+bw_1x+w_2x^2+bw1x+w2x2+b
右侧函数图像:
w1x+w2x2+w3x3+w4x4+bw_1x+w_2x^2+w_3x^3+w_4x^4+bw1x+w2x2+w3x3+w4x4+b
对比两个函数图像,假设你的模型是通过非常高阶的多项式拟合来的,那么你会得到一个过拟合数据的曲线
假设你修改了代价函数,如上图的最下方的公式,那么你如果像最小化这个函数,只能尽可能的让w32,w42w_3^2,w_4^2w32,w42的值变小,此时就等同于消除了w3x3+w4x4w_3x^3+w_4x^4w3x3+w4x4这一项,这会使函数图像更好。
正则化通常的实现方式是让所有的特征变小(惩罚所有的wj参数),并且可以证明,这通常会导致拟合一个更平滑,更简单,不太弱的函数,不太容易过拟合。
高能来了!!(图片的公式应该去掉大括号)
认真分析:
我们考虑一种情况,当函数是个超级复杂的多项式,有多复杂呢?他有100个特征(n=100),此时我们不能确定哪个特征值需要我们变小,那我们索性让他们全部变小。
原始的代价函数为:
12m∑i=1m(fw⃗,b(x⃗(i))−(y(i)))2\frac{1}{2m}\sum_{i=1}^{m}(f_{\vec w,b}(\vec x^{(i)})-(y^{(i)}))^22m1i=1∑m(fw,b(x(i))−(y(i)))2
此时我们额外加上我们 “惩罚” 的那些特征(正则化项)
λ2m∑j=1nwj2\frac{\lambda}{2m}\sum_{j=1}^nw_j^22mλj=1∑nwj2
注意!!!此时的λ\lambdaλ为正则化参数,他的取值对代价函数的影响我们在后续还会讨论,现在知道即可,分母上的2m表示我们与前面项同时按照1/2m的比例缩放(选择一样的值会对λ\lambdaλ的选择变得更容易一些。此时训练数据集即便变大时,λ\lambdaλ也同样有效
顺便说下,我们通常不会改变参数bbb的值,没太大影响:
λ2m∑j=1nb2\frac{\lambda}{2m}\sum_{j=1}^nb^22mλj=1∑nb2
最后把他们合并在一起就可以了。
此时代价函数变为:
minw⃗,bJ(w⃗,b)=minw⃗,b[12m∑i=1m(fw⃗,b(x⃗(i))−(y(i)))2+λ2m∑j=1nwj2]\min_{\vec w,b}J(\vec w,b)=\min_{\vec w,b}[\frac{1}{2m}\sum_{i=1}^m(f_{\vec w,b}(\vec x^{(i)})-(y^{(i)}))^2+\frac{\lambda}{2m}\sum_{j=1}^nw_j^2]w,bminJ(w,b)=w,bmin[2m1i=1∑m(fw,b(x(i))−(y(i)))2+2mλj=1∑nwj2]
此时代价函数的目的是:
试图最小化第一项,鼓励算法通过最小化预测值与实际值之间的平方差来更好的拟合训练数据
试图最小化第二项,鼓励算法试图保持参数wjw_jwj较小,这将倾向于减少过拟合
此时说回λ\lambdaλ,让我们继续考虑两种情况:
- λ=0\lambda =0λ=0
此时相当于没有后面那个正则化项了,也就是依旧过拟合
2.λ=max\lambda = maxλ=max(超级大)
此时最小化这个代价函数的唯一方法就是确保所有的w的值都非常接近于0,即fx只剩b了.
从上面你可以看到,当λ\lambdaλ很小的时候,模型会过拟合,当λ\lambdaλ很大的时候,模型会欠拟合。所以选择一个合适的λ\lambdaλ是很重要的
正则化的线性回归模型
先看一下此时的梯度下降算法有了正则化后会怎么改变:
此时能看到,其实就是简单的求了个偏导,注意 b项是不变化的,因为我们不需要缩小 b,然后我们带回这些项,此时梯度下降算法变成了如下:
记得要对这些项进行同时更新
我们继续看一下正则化的梯度下降工作原理:
我们把上图的式子拆开,重新排列:
可以看出,前一项可以提公因式,此时后面的一项就是一个常规普通的梯度下降公式,我们在这里主要看前面的公式,他们是由学习率aaa,正则化参数λ\lambdaλ,测试数据量mmm来共同组成的。
看个下图的例子:
还记得之前讲过的内容吗?学习率aaa是个很小的值,同样的λ\lambdaλ也不大,我们分别取 0.01和1,样本量是50,可以看出这一定是个正数,并且很小,再通过1-0.0002 来得到wjw_jwj的变化值
正则化的逻辑回归模型
再重复一下,逻辑回归的意思就是分类,我们会用到一个sigmoid函数来去拟合测试数据,当用于其中的变量zzz就是我们含多项式的函数。
如图,当多项式很复杂的时候,也会导致过拟合
此时,我们的成本函数为:
也是常规逻辑回归模型的成本函数加上一个正则化项
我们如何更新?
其实和线性回归的没什么区别,一样的。(只是因为选择的f的定义不同,线性回归的f是线性,逻辑回归的f是应用于z的逻辑函数)。