文章目录
过拟合的问题
举例1:用线性回归来预测房价,通过建立以住房面积为自变量的函数来预测房价;
① 模型一:线性模型,算法有非常大的偏差,欠拟合,不能很好地适应我们的训练集
→
\rightarrow
→ 欠拟合或者算法具有高偏差;
② 模型二:使用二次函数来拟合数据集
→
\rightarrow
→ 模型似乎最合适;
③ 模型三:是一个四次方的模型,过于强调拟合原始数据,而丢失了算法的本质:预测新数据。可以看出,若给出一个新的值使之预测,它将表现的很差,是过拟合,虽然能非常好地适应我们的训练集但在新输入变量进行预测时可能会效果不好
→
\rightarrow
→ 过度拟合或者算法具有高方差;
- 过度拟合的问题将会在变量过多的时候出现,这时训练出的假设能很好地拟合训练集,此时代价函数非常接近于 0 或者恰好等于 0;
- “泛化” 指的是一个假设模型应用到新样本的能力,新样本数据在这个例子中是指没有出现在训练集的房子;
举例 2:逻辑回归
- g 代表 S 型函数
① 模型一:一条直线分开正样本和负样本,不能很好拟合数据 → \rightarrow → 欠拟合或者算法具有高偏差;
② 模型二:加入变量,使用二次项拟合数据集,得到判定边界 → \rightarrow → 得到训练集最好的拟合结果;
③ 模型三:使用高阶项拟合数据集,逻辑回归可能会变得扭曲,无法做到很好地泛化到新样本 → \rightarrow → 过度拟合或者算法具有高方差; - 绘制假设模型曲线,可以作为决定多项式阶次的一种方法; 次数越高,拟合的越好,但相应的预测的能力就可能变差。如果我们有过多的变量,而只有非常少的训练数据,就会出现过度拟合的问题。
解决办法
- 欠拟合
- 增加特征,如增加多项式。
- 过拟合
① 尽量减少选取变量的数量。人工检查变量清单,丢弃一些不能帮助我们正确预测的特征,可以是手工选择保留哪些特征,或者使用一些模型选择的算法来帮忙(例如 PCA)。
② 正则化,保留所有的特征变量,但是减少量级或减少参数 θ j \theta_j θj 的大小(magnitude)。
正则化的代价函数
- 回归问题中的模型是: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 + θ 3 x 3 3 + θ 4 x 4 4 h_\theta(x) = \theta_0+ \theta_1{x_1} + \theta_2{x^2_2}+ \theta_3{x^3_3} + \theta_4{x^4_4} hθ(x)=θ0+θ1x1+θ2x22+θ3x33+θ4x44, 这些高次项导致了过拟合的产生,所以如果我们能让这些高次项的系数接近于 0 的话,我们就能很好的拟合了。
- 我们要做的就是在一定程度上减小这些参数 θ 的值,这就是正则化的基本方法。
(1) 我们决定要减少 θ 3 \theta_3 θ3 和 θ 4 \theta_4 θ4 的大小,我们要做的便是修改代价函数, 在 θ 3 \theta_3 θ3 和 θ 4 \theta_4 θ4 中设置一点惩罚。通过这样的代价函数选择出的 θ 3 \theta_3 θ3 和 θ 4 \theta_4 θ4 对预测结果的影响就比之前要小许多。
(2) 修改后的代价函数如下:
m i n θ 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + 1000 θ 3 2 + 1000 θ 4 2 ] \underset{\theta}{min}\frac{1}{2m}[\sum_{i=1}^{m}{(h_\theta(x^{(i)}) -y^{(i)})^2+1000\theta_3^2+1000\theta_4^2}] θmin2m1[i=1∑m(hθ(x(i))−y(i))2+1000θ32+1000θ42]- 这些参数的数值越小,我们得到的函数就会越平滑,也越简单,也更不容易出现过拟合的问题。
- 假如我们有非常多的特征,我们并不知道该选出哪些参数来缩小它们的值,因此在正则化中,我们要做的就是修改代价函数,在后面添加一个额外的正则化项,来缩小每一个参数的值。正则化的优化目标,也就是正则化代价函数如下:
J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ] 其 中 , λ ∑ j = 1 n θ j 2 : 叫 作 正 则 化 项 ; J(\theta)=\frac{1}{2m}[\sum_{i=1}^{m}(h_\theta({x^{(i)}}) - y^{(i)})^2+\lambda\sum_{j=1}^{n}{\theta_j^2}]\ \ \ \ \ \ \ 其中,\lambda\sum_{j=1}^{n}{\theta_j^2}:叫作正则化项; J(θ)=2m1[i=1∑m(hθ(x(i))−y(i))2+λj=1∑nθj2] 其中,λj=1∑nθj2:叫作正则化项;-
λ
\lambda
λ 又称为正则化参数(Regularization Parameter),可以控制两个不同目标之间的取舍与平衡,即更好地去拟合训练集的目标和将参数控制得更小的目标,从而保持假设模型的相对简单,避免出现过拟合的情况。
① 第一个目标与目标函数的第一项有关,更好地拟合训练集;
② 第二个目标与目标函数的第二项有关,要保持参数尽量地小,与正则化目标相关; - 注:根据惯例,我们不对 θ 0 \theta_0 θ0 进行惩罚,只对 1 到 n 进行求和。在实践中,即使包括 θ 0 \theta_0 θ0,对结果影响也不大。
-
λ
\lambda
λ 又称为正则化参数(Regularization Parameter),可以控制两个不同目标之间的取舍与平衡,即更好地去拟合训练集的目标和将参数控制得更小的目标,从而保持假设模型的相对简单,避免出现过拟合的情况。
- 经过正则化处理的模型与原模型的可能对比如下图所示:
- 如果选择的正则化参数 λ 过大,对所有参数的惩罚程度太大,那么最后这些参数都会接近与 0,导致模型变成 h θ ( x ) = θ 0 h_\theta(x)=\theta_0 hθ(x)=θ0,这差不多相当于用一条直线去拟合数据,也就是上图中红色直线所示的情况,造成欠拟合。
- 为什么新增加的一项可以使 θ 的值减小呢?
(1) 因为如果我们令 λ 的值很大的话,为了使 Cost Function 尽可能的小,所有的 θ 的值(不包括 θ 0 \theta_0 θ0)都会在一定程度上减小。
(2) 但若 λ 的值太大了,那么 θ(不包括 θ 0 \theta_0 θ0)都会趋近于 0,这样我们所得到的只能是一条平行于 x 轴的直线。
(3) 所以对于正则化,我们要取一个合理的 λ 的值,这样才能更好的应用正则化。- 代价函数使用正则化,并应用到到线性回归和逻辑回归中去,就可以避免过度拟合。
线性回归的正则化
- 对于线性回归的求解,有两种学习算法:一种基于梯度下降,一种基于正规方程。正则化线性回归的代价函数为:
J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ] J(\theta)=\frac{1}{2m}[\sum_{i=1}^{m}(h_\theta({x^{(i)}}) - y^{(i)})^2+\lambda\sum_{j=1}^{n}{\theta_j^2}] J(θ)=2m1[i=1∑m(hθ(x(i))−y(i))2+λj=1∑nθj2]
梯度下降法
- 如果我们要使用梯度下降法令这个代价函数最小化,因为我们未对θ_0 进行正则化,所以梯度下降算法将分为两步:
- Gradient descent
W a n t m i n θ J ( θ ) : Want\ \ \ \underset {\theta}{min}J(\theta): Want θminJ(θ):
R e p e a t { Repeat\{ Repeat{
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) ) \theta_0:=\theta_0- \alpha\frac{1}{m}\sum_{i=1}^{m}((h_\theta({x^{(i)}}) - y^{(i)})x_0^{(i)}) θ0:=θ0−αm1i=1∑m((hθ(x(i))−y(i))x0(i))
θ j : = θ j − α [ 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) ) + λ m θ j ] ( j = 1 , 2 , 3 , . . . , n ) \theta_j:=\theta_j- \alpha[\frac{1}{m}\sum_{i=1}^{m}((h_\theta({x^{(i)}}) - y^{(i)})x_j^{(i)})+\frac{\lambda}{m}{\theta_j}]\ \ \ \ \ (j=1,2,3,...,n) θj:=θj−α[m1i=1∑m((hθ(x(i))−y(i))xj(i))+mλθj] (j=1,2,3,...,n)
} \} }
- Gradient descent
- 对上面的算法中 j = 1,2,…,n 时的更新式子进行调整可得:
θ j : = θ j ( 1 − α λ m ) − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) ) ( j = 1 , 2 , 3 , . . . , n ) \theta_j:=\theta_j(1-\alpha\frac{\lambda}{m})- \alpha\frac{1}{m}\sum_{i=1}^{m}((h_\theta({x^{(i)}}) - y^{(i)})x_j^{(i)})\ \ \ \ \ (j=1,2,3,...,n) θj:=θj(1−αmλ)−αm1i=1∑m((hθ(x(i))−y(i))xj(i)) (j=1,2,3,...,n)- 1 − α λ m 1-\alpha\frac{\lambda}{m} 1−αmλ 通常是一个比 1 略小的数。
- 可以看出,正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的基础上令 θ 值减小了一个额外的值。
正规方程法
- 可以利用正规方程来求解正则化线性回归模型,方法如下所示:
其中:图中的矩阵尺寸为 ( n + 1 ) ∗ ( n + 1 ) (n+1)\ast (n+1) (n+1)∗(n+1),X,y如下:
X = [ ( x ( 1 ) ) T ⋮ ( x ( m ) ) T ] X=\left[ \begin{matrix} (x^{(1)})^T\\ \vdots\\ (x^{(m)})^T\\ \end{matrix} \right] X=⎣⎢⎡(x(1))T⋮(x(m))T⎦⎥⎤
y = [ y ( 1 ) ⋮ y ( m ) ] y=\left[ \begin{matrix} y^{(1)}\\ \vdots\\ y^{(m)}\\ \end{matrix} \right] y=⎣⎢⎡y(1)⋮y(m)⎦⎥⎤ - 正则化考虑到矩阵不可逆的问题,具体来说,只要正则化参数 λ 是严格大于 0 的,我们就可以确信 X 的转置乘 X 加上 λ 乘这个有趣的矩阵,这个矩阵一定不是奇异矩阵,它是可逆的。
Logistic 回归的正则化
- 针对逻辑回归问题,学习过两种优化算法:
- 使用梯度下降法来优化代价函数J(θ);
- 使用更高级的优化算法,这些高级优化算法需要你自己设计代价函数 J(θ)。
- 逻辑回归出现过拟合的情况:
- 同样对于逻辑回归,为了使用正则化,我们需要将它作一些修改,我们需要做的是,在后面增加一个正则化的表达式,得到代价函数:
J ( θ ) = 1 m [ ∑ i = 1 m − y ( i ) l o g ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) l o g ( 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^{(i)})log(1-h_\theta(x^{(i)}))]+\frac{\lambda}{2m}\sum_{j=1}^{n}{\theta_j^2} J(θ)=m1[i=1∑m−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2 - 要最小化该代价函数,通过求导,得出梯度下降算法为:
W a n t m i n θ J ( θ ) : Want\ \ \ \underset {\theta}{min}J(\theta): Want θminJ(θ):
R e p e a t { Repeat\{ Repeat{
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) ) \theta_0:=\theta_0- \alpha\frac{1}{m}\sum_{i=1}^{m}((h_\theta({x^{(i)}}) - y^{(i)})x_0^{(i)}) θ0:=θ0−αm1i=1∑m((hθ(x(i))−y(i))x0(i))
θ j : = θ j ( 1 − α λ m ) − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) ) ( j = 1 , 2 , 3 , . . . , n ) \theta_j:=\theta_j(1-\alpha\frac{\lambda}{m})- \alpha\frac{1}{m}\sum_{i=1}^{m}((h_\theta({x^{(i)}}) - y^{(i)})x_j^{(i)})\ \ \ \ \ (j=1,2,3,...,n) θj:=θj(1−αmλ)−αm1i=1∑m((hθ(x(i))−y(i))xj(i)) (j=1,2,3,...,n)
} \} }- 注:看上去同线性回归一样,但是知道
h
θ
(
x
)
=
g
(
θ
T
X
)
h_\theta(x) = g(\theta^TX)
hθ(x)=g(θTX),所以与线性回归不同。 Octave 中,我们依旧可以用 fminuc 函数来求解代价函数最小化的参数,值得注意的是参数 θ 的更新规则与其他情况不同。 即:
- 虽然正则化的逻辑回归中的梯度下降和正则化的线性回归中的表达式看起来一样,但由于两者的 h θ ( x ) h_\theta(x) hθ(x) 不同,所以还是有很大差别。
- θ 0 \theta_0 θ0 不参与其中的任何一个正则化。
- 注:看上去同线性回归一样,但是知道
h
θ
(
x
)
=
g
(
θ
T
X
)
h_\theta(x) = g(\theta^TX)
hθ(x)=g(θTX),所以与线性回归不同。 Octave 中,我们依旧可以用 fminuc 函数来求解代价函数最小化的参数,值得注意的是参数 θ 的更新规则与其他情况不同。 即: