7.正则化

7.1 过拟合问题

7.1.1 什么是过拟合问题?

什么是过拟合问题?

首先,什么是过拟合问题?
引用学术上的话来说,就是:

过拟合是指为了得到一致假设而使假设变得过度严格。

用更为抽象一些的话来进行评价,如下图所示,左边,中间和右边三者分别展示了什么是欠拟合,理想的拟合状态和过拟合。
在这里插入图片描述
同时这里需要引入几个概念,通常来说,欠拟合带来的是高偏倚度,也叫高偏差;过拟合带来的则是高方差。
过拟合除了上述这些问题,从模型的角度来讲也不是一个好的结果。引用吴恩达的话来说就是

如果我们的拟合函数是一个高阶多项式,虽然理论上它可以模拟任何数值,但是该模型对数据的要求量也很大。这使得我们很难去约束或者求解它。

另外,从应用的角度来讲,其定义大抵如下:

在这里插入图片描述

尽管我们的模型千方百计地去拟合已有的数据,甚至于达到了损失函数近似为0的程度。但是其泛化效果并不好,没有应用价值。

泛化是指将假设模型应用到实际中预测新数据的能力。

用我们先前讲过的逻辑回归举例说明的话,就是下图:
在这里插入图片描述

7.1.2 过拟合问题的解决方法

那么,如何解决过拟合的问题呢?
大致有两种理论思想

  1. 减少特征数量
    1.1 手动剔除
    1.2 模型选择算法(model selection algorithm)
  2. 正则化(regularization)
    在这里插入图片描述
    适用于各个特征重要性相似且较多的情况。在这种情况下,我们保留所有的特征,但是降低 θ j \theta_j θj的值。

7.2 损失(代价)函数

7.2.1 一个小例子

首先仍然对比以下过拟合与正常拟合的情况,如下图所示:
在这里插入图片描述
如图所示,右边的过拟合情况尽管拟合效果更好,但是可以遇见的是其泛化性能不够理想。在此例中,对比正常拟合与过拟合的两种现象我们可以看出,两者的预测函数有着本质不同。后者相较于前者多了两个高阶项,这直接导致了两个模型的预测差异。
那么如何来解决这一问题呢?

从损失函数上下功夫

仍以上面的例子进行阐述。若想将上例中过拟合的情况调整为正常拟合而又不减少模型参数,可以从损失函数上下功夫。
我们原有的,力图使其最小化的损失函数为:
1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 \frac{1}{2m} \sum_{i=1}^m (h_{\theta}(x^{(i)}) - y^{(i)})^2 2m1i=1m(hθ(x(i))y(i))2
现在,我们将其做一些变更:
1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + 1000 θ 3 2 + 1000 θ 4 2 \frac{1}{2m} \sum_{i=1}^m (h_{\theta}(x^{(i)}) - y^{(i)})^2 + 1000 \theta_3^2 + 1000\theta_4^2 2m1i=1m(hθ(x(i))y(i))2+1000θ32+1000θ42
变更后的损失函数仍然遵循最小化原则。但是通过令高次项特征的系数前面带上1000这样的大数,可以将 θ 3 \theta_3 θ3 θ 4 \theta_4 θ4化为最小,这样使得整个模型受高次项影响较小,大大降低过拟合程度。

7.2.2 推广化

但是,我们日常处理的数据对我们来说是一个”黑箱子“,只有特征 x ( i ) x^{(i)} x(i)以及其对应的特征系数 θ ( i ) \theta^{(i)} θ(i),根本难以判断哪个系数会是所谓的高次项。为了解决这一问题,我们采用以下修改损失函数的办法:
J ( θ ) = 1 2 m ( ∑ i = 1 m ( h θ ( x ( i ) ) − y ) 2 + λ ∑ j = 1 m θ j 2 ) J(\theta) = \frac{1}{2m} ( \sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y)^2+\lambda \sum_{j=1}^m \theta_j^2 ) J(θ)=2m1(i=1m(hθ(x(i))y)2+λj=1mθj2)
其中 λ \lambda λ被称为正则化参数,它不能太大,过大的正则化参数会使得各个 θ \theta θ很小;它也不能过小,这样难以起到正则化效果,区分并降低高次项权重。
同时,我们只是惩罚 θ j ( j = 1 , 2 , , , n ) \theta_j(j=1,2,,,n) θj(j=1,2,,,n)而没有惩罚 θ 0 \theta_0 θ0,这是一个约定俗成的习惯。

7.3 线性回归的正则化

根据推广化的正则表达式,我们可以将梯度下降应用于线性回归中。根据上文,修改后的损失函数表达式为:
J ( θ ) = 1 2 m ( ∑ i = 1 m ( h θ ( x ( i ) ) − y ) 2 + λ ∑ j = 1 m θ j 2 ) J(\theta) = \frac{1}{2m} ( \sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y)^2+\lambda \sum_{j=1}^m \theta_j^2 ) J(θ)=2m1(i=1m(hθ(x(i))y)2+λj=1mθj2)
对其应用梯度下降可得(注意,我们在正则化时只是惩罚 θ 1 \theta_1 θ1 θ j \theta_j θj,没有改变 θ 0 \theta_0 θ0,所以在下面进行区分)
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ) x 0 ( i ) \theta_0 :=\theta_0- \alpha \frac{1}{m} \sum_{i=1}^m(h_{\theta}(x^{(i)})-y)x_0^{(i)} θ0:=θ0αm1i=1m(hθ(x(i))y)x0(i)
θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ) x j ( i ) + λ m θ j \theta_j :=\theta_j- \alpha \frac{1}{m} \sum_{i=1}^m(h_{\theta}(x^{(i)})-y)x_j^{(i)} + \frac{\lambda}{m} \theta_j θj:=θjαm1i=1m(hθ(x(i))y)xj(i)+mλθj
将下式改写为:
θ j : = ( 1 − λ m ) θ j − 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ) x j ( i ) \theta_j := (1-\frac{\lambda}{m}) \theta_j- \frac{1}{m} \sum_{i=1}^m(h_{\theta}(x^{(i)})-y)x_j^{(i)} θj:=(1mλ)θjm1i=1m(hθ(x(i))y)xj(i)
通常来说 1 − λ m 1-\frac{\lambda}{m} 1mλ由于 λ \lambda λ较小,m较大,因此其该式子趋近于1,但是仍比1要小。因此相当于每次迭代,参数都会缩小一些。

7.4 Logistic回归的正则化

根据我们将线性回归的正则化过程我们可以得出,Logistic回归修改后的损失函数表达式为:
J ( θ ) = − 1 m ∑ i = 1 m y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ) log ⁡ ( 1 − h θ ( x ( i ) ) ) + λ 2 m ∑ j = 1 n θ j 2 J(\theta) = -\frac{1}{m} \sum_{i=1}^m y^{(i)} \log h_{\theta}(x^{(i)}) +(1-y) \log (1-h_{\theta}(x^{(i)})) + \frac{\lambda}{2m} \sum_{j=1}^n \theta_j^2 J(θ)=m1i=1my(i)loghθ(x(i))+(1y)log(1hθ(x(i)))+2mλj=1nθj2
和线性回归一样,修改后的损失函数旨在惩罚 θ 1 , θ 2 . . . θ n \theta_1,\theta_2...\theta_n θ1,θ2...θn
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ) x 0 ( i ) \theta_0 :=\theta_0- \alpha \frac{1}{m} \sum_{i=1}^m(h_{\theta}(x^{(i)})-y)x_0^{(i)} θ0:=θ0αm1i=1m(hθ(x(i))y)x0(i)
接下来更新各参数的过程和线性回归表达式一样,唯一的区别在于此时模型不一样,对应的 h θ ( x ) 也不尽相同 h_{\theta}(x)也不尽相同 hθ(x)也不尽相同
θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ) x j ( i ) + λ m θ j \theta_j :=\theta_j- \alpha \frac{1}{m} \sum_{i=1}^m(h_{\theta}(x^{(i)})-y)x_j^{(i)} + \frac{\lambda}{m} \theta_j θj:=θjαm1i=1m(hθ(x(i))y)xj(i)+mλθj

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值