ML 05 - Regulization

177 阅读4分钟

正则化

一、过拟合问题

定义:在统计学中,过拟合(英语:overfitting,或称拟合过度)是指过于紧密或精确地匹配特定数据集,以致于无法良好地拟合其他数据或预测未来的观察结果的现象

  • 过拟合模型指的是相较有限的数据而言,参数过多或者结构过于复杂的统计模型

  • 发生过拟合时,模型的偏差小而方差大。过拟合的本质是训练算法从统计噪声中不自觉获取了信息并表达在了模型结构的参数当中。

  • 相较用于训练的数据总量来说,一个模型只要结构足够复杂或参数足够多,就总是可以完美地适应数据的。过拟合一般可以视为违反奥卡姆剃刀原则。

1. 房价问题(线性回归)

  1. 各种假设函数

    image-20220427110340309.png

    1. 第一种直线拟合:预先认为问题是线性的。导致了欠拟合和高误差。
    2. 第二种适中:拟合效果较好。
    3. 第三种过拟合:太过依赖于输入样本的分布,不利于预测新样本的分布(没有普适性)
  2. 过拟合:

    如果问题有太多的特征,那么假设函数就会过于追求贴合训练集(就是使代价函数最小化:J(θ)=12mi=1m(hθ(x(i))y(i))20J(\theta)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} \approx 0),这也就导致了训练出来的模型不能推广至新样本(也就是不能准确的预测房价)

2. logistic 回归

  1. 各种决策边界

    image-20220427111123784.png

    1. 第一种情况:欠拟合
    2. 第二种情况:适中
    3. 第三种情况:过拟合

3. 解决办法

  1. 减少特征数量

    1. 手动选择应该留下的特征
    2. 利用模型选择特征的算法
  2. 正则化

    • 保留所有参数,但是要减少参数θj\theta_j的量级(次方)或大小。

    • 当我们拥有大量的特征时正则化的效率就很高,每一个特征都能起到预测 y 值的作用。

二、代价函数

1. 过拟合的原因分析

  1. 示例

    image-20220427111600383.png

    就是高量级的x过大,导致系数θj\theta_{j}会更贴近输入的训练样本。

  2. 处理办法:

    使高量级的x系数θj\theta_{j}变小,也就是直接在代价函数后面加上高量级的两个系数,并在其前乘上一个正则化项:

    image-20220427111920506.png 这样就能使最后的高量级系数变的很小,最终的假设函数就贴近低量级了。

2. 正则化的作用

  • 将较大量级 xnx_n的系数θj\theta_j变小,使整个模型贴近低量级
    1. 简化假设函数
    2. 减少过拟合的倾向

3. 房价示例

  1. 特征:x1x2x3...xnx_{1}、x_{2}、x_{3}、...、x_{n}

  2. 参数:θ0θ1θ2θ3...θn\theta_{0}、\theta_{1}、\theta_{2}、\theta_{3}、...、\theta_{n}

    1. 注意:我们事先并不知道哪些系数是高量级的,所以我们要在代价函数后面添上对应的各个系数
  3. 代价函数

    1. J(θ)=12m[i=1m(hθ(x(i))y(i))2+λ(j=1nθj2)]J(\theta)=\frac{1}{2 m}\left[\sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda{\left(\sum_{j=1}^{n} \theta_{j}^{2}\right)}\right]
    2. 注意:若是正则系数λ\lambda设置过大,则会导致x的所有系数都达到一个非常小的值,此时对应的假设函数就相当于一个常数函数了,造成欠拟合
  4. λ\lambda设置的非常非常大(例如为 101010^{10}),则会发生什么?

    1. 算法健壮性强,λ\lambda的大小不会影响整个流程
    2. 算法会陷入过拟合
    3. 算法最终欠拟合,最后甚至不能贴合训练集
    4. 梯度下降不收敛

三、线性回归中的正则化

1. 梯度下降

  1. 正则化代价函数

    J(θ)=12m[i=1m(hθ(x(i))y(i))2+λ(j=1nθj2)]J(\theta)=\frac{1}{2 m}\left[\sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda{\left(\sum_{j=1}^{n} \theta_{j}^{2}\right)}\right]

  2. 流程

    θ0:=θ0α1mi=1m(hθ(x(i))y(i))x0(i)θj:=θjα1m[i=1m(hθ(x(i))y(i))xj(i)+λmθj](j=1,2,3,,n)\begin{array}{c} \theta_{0}:=\theta_{0}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{0}^{(i)} \\ \theta_{j}:=\theta_{j}-\alpha \quad \frac{1}{m} [\sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)} + \frac{\lambda }{m}\theta_{j} ]\\ (j=1,2,3, \ldots, n) \\ \end{array}

    也可将下面的θj\theta_{j}式子简化为:θj:=θj(1αλm)α1mi=1m(hθ(x(i))y(i))xj(i)\theta_{j}:=\theta_{j}\left(1-\alpha \frac{\lambda}{m}\right)-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}

  3. 一般会将正则系数λ\lambda设置得比较小,要使1αλm1-\alpha \frac{\lambda}{m}贴近0.99。

2. 正规方程

  1. 一般流程

    1. 不用使用繁琐求导来迭代θi{\theta_{i}},只要求出θ=(XTX)1XTy\theta=\left(X^{T} X\right)^{-1} X^{T} y就可以得出最佳结果。

    2. 推广:

      1. m 个样本, n 个特征:m examples (x(1),y(1)),,(x(m),y(m));n features. m \text { examples }\left(x^{(1)}, y^{(1)}\right), \ldots,\left(x^{(m)}, y^{(m)}\right) ; n \text { features. }

        x(i)=[x0(i)x1(i)x2(i)xn(i)]Rn+1\underline{x^{(i)}}=\left[\begin{array}{c} x_{0}^{(i)} \\ x_{1}^{(i)} \\ x_{2}^{(i)} \\ \vdots \\ x_{n}^{(i)} \end{array}\right] \in \mathbb{R}^{n+1}x0(i)=1x_{0}^{(i)} = 1便于向量乘法。y=[y(1)y(2)y(3)y(m)]Rm\underline{y}=\left[\begin{array}{c} y^{(1)} \\ y^{(2)} \\ y^{(3)} \\ \vdots \\ y^{(m)} \end{array}\right] \in \mathbb{R}^{m}

  2. 加入正则化

    X=[(x(1))T(x(m))T]y=[y(1)y(m)]X=\left[\begin{array}{c} \left(x^{(1)}\right)^{T} \\ \vdots \\ \left(x^{(m)}\right)^{T} \end{array}\right] \quad y=\left[\begin{array}{c} y^{(1)} \\ \vdots \\ y^{(m)} \end{array}\right]

    θ=(xTx+λ[011])1xTy\theta=\left(x^{T} x+\lambda\left[\begin{array}{llll} 0 & & & \\ & 1 & & \\ & & 1 & \\ \end{array}\right]\right)^{-1} x^{T} y,其中的矩阵是 n + 1 阶方阵,n 是特征个数。

  3. λ\lambda​ > 0,则(xTx+λ[011])\left(x^{T} x+\lambda\left[\begin{array}{llll} 0 & & & \\ & 1 & & \\ & & 1 & \\ \end{array}\right]\right) 一定可逆,所以正则化还解决了矩阵不可逆的问题。

四、逻辑回归中的正则化

  1. 存在问题:逻辑回归中也会出现过拟合

    image-20220427112957943.png

  2. 解决办法

    1. 在代价函数中加入"惩罚"

      J(θ)=[1mi=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))+λ2mj=1nθj2]\begin{array}{c} J(\theta)=-\left[\frac{1}{m} \sum_{i=1}^{m} y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right) +\frac{\lambda}{2 m} \sum_{j=1}^{n} \theta_{j}^{2} \right] \end{array}.

  3. 高级优化

    image-20220427115453878.png