Regularization
承接上一篇overfitting,我们来讲一讲关于Regularization正则化。
正则化本质上就是保留所有的特征的同时,简化我们的模型,使得我们的模型经过学习之后不会过拟合。所谓的简化模型呢,就是让特征参数变得很小,越小说明这个特征占的比重就小,对模型的影响就小,模型就相对简单。
我们以线性回归为例,直观看来,就是让复杂的曲线变得平滑,就相当于下图中的
θ
3
\theta_3
θ3和
θ
4
\theta_4
θ4约等于0,当然不等于0,因为没有舍弃。
正则化的实现
正则化的实现方式是在我们的代价函数后面加入一个正则项(惩罚项)
J
(
θ
)
=
c
o
s
t
(
h
θ
(
x
)
,
y
)
+
λ
2
m
∑
j
=
1
n
θ
j
2
J(\theta) = cost(h_\theta(x),y)+\frac{\lambda}{2m}\sum_{j=1}^n\theta_j^2
J(θ)=cost(hθ(x),y)+2mλj=1∑nθj2
其中
λ
2
m
∑
j
=
1
n
θ
j
2
\frac{\lambda}{2m}\sum_{j=1}^n\theta_j^2
2mλ∑j=1nθj2 就是正则项,
λ
\lambda
λ 是正则系数,正则系数的作用就在于调整前后两项的大小去达到一种平衡,第一项是我们原来的代价函数,它的作用在于让我们能够很好的fit我们的训练集,第二项是我们的正则项,它的作用在于惩罚我们的特征参数简化我们的模型防止过拟合。那么
λ
\lambda
λ 如果太大,就会导致所有的特征参数都被惩罚的很小,正则项占据了主导,导致underfit欠拟合,如果太小,惩罚作用几乎没有,导致overfit过拟合。所以适当的对
λ
\lambda
λ取值,才能达到效果。
那么我们进一步看一下参数更新方程:
KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲ \theta :&= \t…
习惯上,我们是不惩罚
θ
0
\theta_0
θ0的。
正则化的线性回归
上面已经给出了方程,我们只需要把我们的代价函数带进去即可:
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)
R
e
p
e
a
t
{
θ
0
:
=
θ
0
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
0
(
i
)
θ
j
:
=
θ
j
−
α
(
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
+
λ
m
θ
j
)
(
j
=
1
,
2
,
.
.
.
,
n
)
}
\begin{aligned} Repeat &\{ \\ \theta_0 &:=\theta_0-\alpha\frac{1}{m}\sum_{i=1}^m (h_\theta(x^{(i)})-y^{(i)})x_0^{(i)}\\ \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,...,n)\\ \} \end{aligned}
Repeatθ0θj}{:=θ0−αm1i=1∑m(hθ(x(i))−y(i))x0(i):=θj−α(m1i=1∑m(hθ(x(i))−y(i))xj(i)+mλθj) (j=1,2,...,n)
对于正规方程:
θ
=
(
X
T
X
+
λ
L
)
−
1
X
T
y
w
h
e
r
e
L
=
[
0
1
1
.
.
.
1
]
\begin{aligned} \theta & = (X^TX+\lambda L)^{-1}X^Ty \\ where \ \ \ L&= \begin{bmatrix} 0&& \\ &1& \\ &&1 \\ &&&... \\ &&&&1 \\ \end{bmatrix} \end{aligned}
θwhere L=(XTX+λL)−1XTy=⎣⎢⎢⎢⎢⎡011...1⎦⎥⎥⎥⎥⎤
正则项的引入还带来一个好处,就算原来的
X
T
X
X^TX
XTX是不可逆的,加入了正则项之后
(
X
T
X
+
λ
L
)
(X^TX+\lambda L)
(XTX+λL)是一定可逆的。
正则化的逻辑回归
上面已经给出了方程,我们只需要把我们的代价函数带进去即可:
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}^my^{(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∑my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i))))+2mλj=1∑nθj2
参数更新方程就不列了,跟线性回归的相同,只不过
h
θ
(
x
)
h_\theta(x)
hθ(x)不同而已。
下面列举一个matlab实例来说明,先给出矩阵形式:
J
(
θ
)
=
−
1
m
(
y
T
log
g
(
X
θ
)
+
(
1
−
y
T
)
log
(
1
−
g
(
X
θ
)
)
)
+
λ
2
m
θ
1
,
2
,
.
.
.
,
n
T
θ
1
,
2
,
.
.
.
,
n
θ
0
:
=
θ
0
−
α
1
m
x
0
T
(
g
(
X
θ
)
−
y
)
θ
1
,
2
,
.
.
.
,
n
:
=
θ
1
,
2
,
.
.
.
,
n
−
α
1
m
X
1
,
2
,
.
.
.
,
n
T
(
g
(
X
θ
)
−
y
)
\begin{aligned} J(\theta) & = -\frac{1}{m}(y^T\log g(X\theta)+(1-y^T)\log (1-g(X\theta)))+\frac{\lambda}{2m}\theta_{1,2,...,n}^T\theta_{1,2,...,n}\\ \theta_0 :&= \theta_0-\alpha\frac{1}{m}x_0^T(g(X\theta)-y)\\ \theta_{1,2,...,n} :&= \theta_{1,2,...,n}-\alpha\frac{1}{m}X_{1,2,...,n}^T(g(X\theta)-y) \end{aligned}
J(θ)θ0:θ1,2,...,n:=−m1(yTlogg(Xθ)+(1−yT)log(1−g(Xθ)))+2mλθ1,2,...,nTθ1,2,...,n=θ0−αm1x0T(g(Xθ)−y)=θ1,2,...,n−αm1X1,2,...,nT(g(Xθ)−y)
% 说明一下这是stanford第三周作业,前面的数据处理部分就不交代了,下面的两个function应该独立成.m文件被调用
function g = sigmoid(z)
g = 1./(1+exp(-z));
end
function [J, grad] = costFunctionReg(theta, X, y, lambda)
m = length(y); % number of training examples
J = -1/m*(y'*log(sigmoid(X*theta))+ ...
(1-y')*log(1-sigmoid(X*theta)))+ ...
lambda/(2*m)*sum(theta(2:end).^2);
grad(1) = 1/m*(X(:,1)'*(sigmoid(X*theta)-y));
grad(2:end) = 1/m*(X(:,2:end)'*(sigmoid(X*theta)-y))+lambda/m*theta(2:end);
end
% Initialize fitting parameters
initial_theta = zeros(size(X, 2), 1);
% Set regularization parameter lambda to 1 (you should vary this)
lambda = 1;
% Set Options
options = optimset('GradObj', 'on', 'MaxIter', 400);
% Optimize
[theta, J, exit_flag] = ...
fminunc(@(t)(costFunctionReg(t, X, y, lambda)), initial_theta, options);