吴恩达机器学习第七【Regularization】
The Problem of Overfitting【过拟合的问题】
在线性回归问题中
第一个模型是一个线性模型,欠拟合,不能很好地适应我们的训练集;第三个模型是一个四次方的模型,过于强调拟合原始数据,而丢失了算法的本质:预测新数据。我们可以看出,若给出一个新的值使之预测,它将表现的很差,是过拟合,虽然能非常好地适应我们的训练集但在新输入变量进行预测时可能会效果不好;而中间的模型似乎最合适。
在逻辑回归问题中
就以多项式理解,
x 的次数越高,拟合的越好,但相应的预测的能力就可能变差。
Cost Function 【代价函数】
在下图中易知至少有两种拟合方程
易知模型
hθ(x)=θ0+θ1x1+θ2x22+θ3x33+θ4x44出现过拟合现象,也可知正是因为高次项的出现导致致了过拟合,所以如果让其系数近似于0的话就很好的拟合了。所以我们要做的就是在一定程度上减小这些参数$\theta $ 的值,这就是正则化的基本方法。我们决定要减少
θ3和
θ4的大小,我们要做的便是修改代价函数,在其中
θ3和
θ4 设置一点惩罚。修改后的代价函数如下:
θmin2m1[i=1∑m(hθ(x(i))−y(i))2+1000θ32+10000θ42]
通过这样的代价函数选择出的
θ3和
θ4 对预测结果的影响就比之前要小许多。假如我们有非常多的特征,我们并不知道其中哪些特征我们要惩罚,我们将对所有的特征进行惩罚,并且让代价函数最优化的软件来选择这些惩罚的程度。这样的结果是得到了一个较为简单的能防止过拟合问题的假设:
J(θ)=2m1[i=1∑m(hθ(x(i))−y(i))2+λj=1∑nθj2]
其中$\lambda
又称为正则化参数(∗∗RegularizationParameter∗∗)。注:根据惯例,我们不对{\theta_{0}}$ 进行惩罚。经过正则化处理的模型与原模型的可能对比如下图所示:
因为如果我们令
λ 的值很大的话,为了使Cost Function 尽可能的小,所有的
θ 的值(不包括
θ0)都会在一定程度上减小。
但若
λ 的值太大了,那么$\theta
(不包括{\theta_{0}}
)都会趋近于0,这样我们所得到的只能是一条平行于x$轴的直线。
Regularized Linear Regression【正则化线性回归】
在线性回归问题中,我们对于代价函数提出了那个解决方案一个是梯度下降,一个是正规方程
我们已经知道了线性回归模型的代价函数:
J(θ)=2m1i=1∑m[((hθ(x(i))−y(i))2+λj=1∑nθj2)]
如果使用梯度下降法:
Repeat
until
convergence{
θ0:=θ0−am1i=1∑m((hθ(x(i))−y(i))x0(i))
θj:=θj−a[m1i=1∑m((hθ(x(i))−y(i))xj(i)+mλθj]
for
j=1,2,...n
}
对上面的算法中$ j=1,2,…,n$ 时的更新式子进行调整可得:
θj:=θj(1−amλ)−am1i=1∑m(hθ(x(i))−y(i))xj(i)
即
Repeat
until
convergence{
θ0:=θ0−am1i=1∑m((hθ(x(i))−y(i))x0(i))
θj:=θj(1−amλ)−am1i=1∑m(hθ(x(i))−y(i))xj(i)
for
j=1,2,...n
}
在正规方程中:
θ=(XTX+λ⎣⎢⎢⎢⎢⎡011⋱1⎦⎥⎥⎥⎥⎤−1XTy)
图中的矩阵尺寸为
(n+1)×(n+1)。
Regularized Logistic Regression【正则化的逻辑回归模型】
在逻辑回归中
易知代价函数为
J(θ)=m1i=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]
对于逻辑回归问题,我们也增加一个正则化的表达式,得到代价函数:
J(θ)=m1i=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2
Python代码:
import numpy as np
def costReg(theta, X, y, learningRate):
theta = np.matrix(theta)
X = np.matrix(X)
y = np.matrix(y)
first = np.multiply(-y, np.log(sigmoid(X*theta.T)))
second = np.multiply((1 - y), np.log(1 - sigmoid(X*theta.T)))
reg = (learningRate / (2 * len(X))* np.sum(np.power(theta[:,1:theta.shape[1]],2))
return np.sum(first - second) / (len(X)) + reg
要最小化该代价函数,通过求导,得出梯度下降算法为:
Repeat
until
convergence{
θ0:=θ0−am1i=1∑m((hθ(x(i))−y(i))x0(i))
θj:=θj−a[m1i=1∑m(hθ(x(i))−y(i))xj(i)+mλθj]
for
j=1,2,...n
}
注:看上去同线性回归一样,但是知道
hθ(x)=g(θTX),所以与线性回归不同。其中线性回归
hθ=θTX,逻辑回归
hθ=1+e−θTX1。