7 正则化
7.1 过拟合的问题
过拟合的含义
欠拟合是指拟合算法具有高偏差,数据拟合效果很差。
过拟合是指拟合算法具有高方差,能拟合所有数据,但函数变量太多,没有足够的数据来约束,从而无法泛化到新的样本中。
如果有非常多的特征,而只有非常少的训练数据,通过学习得到的模型可能能够非常好地适应训练集(代
价函数可能几乎为 0),但是可能会不能推广到新的数据。
解决过拟合的方法
- 减少特征的数量:可以手工选择保留更为重要的特征,或者用之后要讲的模型选择算法自动选择需要保留的特征。但这种方法的缺点是在舍弃一些特征的同时也舍弃掉了一些信息。
- 正则化:保留所有的特征,但是减少参数的大小。
- 通过绘制假设函数的图像,根据曲线是否扭曲来选择合适的多项式的次数。但是大多数时候,研究的问题都是有很多特征的,则无法可视化,从而导致这种方法失效。
总结
过拟合是指拟合算法具有高方差,能拟合所有数据,但泛化能力差。
一般可以用减少特征的数量或正则化来解决过拟合的问题。
7.2 代价函数
正则化
正是假设函数中多项式的次数过高导致了过拟合的产生,因此如果让这些高次项的系数接近于0的话,相等于假设函数仍然是次数较低的函数、更加平滑,则可以解决过拟合的问题。
假如有非常多的特征,预先并不知道其中哪些特征是高次项,因此需要修改代价函数对所有的特征进行惩罚。具体的修改方法为在原本代价函数的基础上加一个正则化项 J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ] J(\theta)=\frac{1}{2 m}\left[\sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda \sum_{j=1}^{n} \theta_{j}^{2}\right] J(θ)=2m1[∑i=1m(hθ(x(i))−y(i))2+λ∑j=1nθj2]。需要注意的是没有对 θ 0 \theta_0 θ0进行惩罚,这是约定俗成的,但是否有这一项在实际中对结果影响不大。
λ ∑ j = 1 n θ j 2 \lambda \sum_{j=1}^{n} \theta_{j}^{2} λ∑j=1nθj2是正则化项, λ \lambda λ是正则化参数,用于在拟合训练集和保持参数尽可能小(从而避免出现过拟合)的两个目标之间进行权衡。
并且让代价函数最优化的软件来选择这些惩罚的程度。这样的结果是得到了一个较为简单的 能防止过拟合问题的假设。
正则化参数的讨论
如果 λ \lambda λ过大,为了使得代价函数尽可能小,所有的 θ i \theta_i θi(不包括 θ 0 \theta_0 θ0)都会趋于0,最终得到的是一条平行于 x x x轴的直线,就造成了欠拟合。
所以对于正则化,需要取一个合理的 λ \lambda λ的值,这样才能更好的应用正则化。
总结
正则化项能使得参数尽可能小,从而解决过拟合的问题。
7.3 正则化线性回归
正则化线性回归的梯度下降法
正则化线性回归的代价函数为 J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ] J(\theta)=\frac{1}{2 m}\left[\sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda \sum_{j=1}^{n} \theta_{j}^{2}\right] J(θ)=2m1[∑i=1m(hθ(x(i))−y(i))2+λ∑j=1nθj2]。
进行梯度下降的过程为 θ 0 : = θ 0 − a 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) θ j : = θ j − a [ 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m θ j ] \begin{aligned} \theta_{0}: &=\theta_{0}-a \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{0}^{(i)} \\ \theta_{j} &:=\theta_{j}-a\left[\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}\right] \end{aligned} θ0:θj=θ0−am1i=1∑m(hθ(x(i))−y(i))x0(i):=θj−a[m1i=1∑m(hθ(x(i))−y(i))xj(i)+mλθj]
对第二个式子进行一些变换可得 θ j : = θ j ( 1 − a λ m ) − a 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_{j}:=\theta_{j}\left(1-a \frac{\lambda}{m}\right)-a \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)} θj:=θj(1−amλ)−am1∑i=1m(hθ(x(i))−y(i))xj(i),其中 1 − a λ m 1-a \frac{\lambda}{m} 1−amλ是一个比1略小的值。也就是说,正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的基础上令 θ \theta θ值减少了一个额外的值。
正则化线性回归的正规方程法
一般线性回归模型的正规方程法的求解方法为 θ = ( X T X ) − 1 X T y \theta=\left(X^{T} X\right)^{-1} X^{T} y θ=(XTX)−1XTy 。
正则化线性回归模型的正规方程法的求解方法为 θ = ( X T X + λ [ 0 1 1 ⋱ 1 ] ) − 1 X T y \theta=\left(X^{T} X+\lambda\left[\begin{array}{lllll}0 & & & & \\ & 1 & & & \\ & & 1 & & \\ & & & \ddots & \\ & & & & 1\end{array}\right]\right)^{-1} X^{T} y θ=⎝ ⎛XTX+λ⎣ ⎡011⋱1⎦ ⎤⎠ ⎞−1XTy。
总结
本节将梯度下降法和正规方程法推广到了正则化线性回归中。
7.4 正则化的逻辑回归模型
类似正则化线性回归模型的处理方式,对于逻辑回归,也给代价函数增加一个正则化的表达式,得到代价函数 J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) log ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J(\theta)=\frac{1}{m} \sum_{i=1}^{m}\left[-y^{(i)} \log \left(h_{\theta}\left(x^{(i)}\right)\right)-\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right]+\frac{\lambda}{2 m} \sum_{j=1}^{n} \theta_{j}^{2} J(θ)=m1∑i=1m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]+2mλ∑j=1nθj2。
得到梯度下降法的过程为:
θ
0
:
=
θ
0
−
a
1
m
∑
i
=
1
m
(
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
0
(
i
)
)
\theta_{0}:=\theta_{0}-a \frac{1}{m} \sum_{i=1}^{m}\left(\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{0}^{(i)}\right)
θ0:=θ0−am1∑i=1m((hθ(x(i))−y(i))x0(i))
θ
j
:
=
θ
j
−
a
[
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
+
λ
m
θ
j
]
\theta_{j}:=\theta_{j}-a\left[\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}\right]
θj:=θj−a[m1∑i=1m(hθ(x(i))−y(i))xj(i)+mλθj]
总结
本节将梯度下降法和正规方程法推广到了正则化逻辑回归中。