机器学习(九)- Regularization

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=1nθ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=1m(hθ(x(i))y(i))2+λj=1nθ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=1m(hθ(x(i))y(i))x0(i):=θjα(m1i=1m(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=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i))))+2mλj=1nθ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θ)+(1yT)log(1g(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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值