机器学习中的正则化处理

正则化处理

在之前的文章中介绍了线性回归和Logistic回归两种机器学习模型,对于回归模型而言(虽然Logistic是一种分类模型,但是其中的决策边界函数 z=θTX 是一个回归函数),经常会出现过拟合的问题,对于过拟合的问题,通常有两种处理方法,一种是减少特征的个数,也就是选取其中更加重要的特征。另外一种方法则是采取正则化处理,也就是将 (θ1,θ2,θ3...) 等作为惩罚因子加入代价函数中,并且引入正则化因子 λ 来控制过拟合或欠拟合的程度,当 λ 太大的时候,优化过程中 θ 会变得很小而趋近于0,从而会导致欠拟合的现象,相反,如果 λ 太小,从而趋近于0的情况下, θ 会变得较大而出现过拟合的现象,在实际应用中要多次调整 λ 从而获得较为理想的拟合效果。

对于线性回归,加入 θ 之后的代价函数为

J(θ)=12m(i=1m(hθ(x(i))y(i))2+λj=1nθ2j)
可以求出其梯度为
θJ(θ)=1mi=1m((hθ(x(i))y(i))x(i)+λmθ)
需要注意的是,正则化处理通常只将 θ1,θ2,θ3...θn 做为惩罚因子,而对 θ0 不做处理,也就是说要注意,在上面求得 J(θ) 的表达式中 j 是从1开始的。在上面求梯度的式子中的θ是将其第一个值 θ0 置0之后得到的向量。

之后便可以利用梯度下降的方法来求解或者将梯度传入更加高级的计算函数来进行计算。

对于Logistic回归,同样的我们可以得到其代价函数为

J(θ)=1mi=1m(y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))λ2mi=1nθ2j)
同样的,求得其梯度为
θJ(θ)=1mi=1m((hθ(x(i))y(i))x(i)+λmθ)

下面给出关键几个部分的Matlab代码实现

//变量的定义和上一篇文章一样,这里不再多说
J=-1/m*(y'*log(sigmoid(X*theta))+(1-y')*log(1-sigmoid(X*theta)))+lambda/2/m*(theta'*theta-theta(1)^2);  %求出正则化的Logistic回归的代价函数
grad=((sigmoid(X*theta)-y)'*X)'/m;  %正则化之前的梯度
temp=theta;
temp(1)=0;
grad=grad+lambda*temp/m;    %正则化之后的梯度
--------------------
这里的代码都是我在上Coursera上面的机器学习课程的时候所写的,都已经通过了多个Demo的测试,完整代码在我的Github上:
https://github.com/Lannyy/MachineLearning

在最后多说一句,对于Logistic回归中的多分类问题,可以将其分成多个二分类问题来解决,每个tag的二分类问题都是处理“是”或者“不是”这样的问题,通过回归函数得到该输入是每个tag的概率,即 Pi(y=1|x;hθ(i)) ,最后取其中 P 最大的时候的tag即为该输入x的分类。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值