正则化处理
在之前的文章中介绍了线性回归和Logistic回归两种机器学习模型,对于回归模型而言(虽然Logistic是一种分类模型,但是其中的决策边界函数 z=θTX 是一个回归函数),经常会出现过拟合的问题,对于过拟合的问题,通常有两种处理方法,一种是减少特征的个数,也就是选取其中更加重要的特征。另外一种方法则是采取正则化处理,也就是将 (θ1,θ2,θ3...) 等作为惩罚因子加入代价函数中,并且引入正则化因子 λ 来控制过拟合或欠拟合的程度,当 λ 太大的时候,优化过程中 θ 会变得很小而趋近于0,从而会导致欠拟合的现象,相反,如果 λ 太小,从而趋近于0的情况下, θ 会变得较大而出现过拟合的现象,在实际应用中要多次调整 λ 从而获得较为理想的拟合效果。
对于线性回归,加入 θ 之后的代价函数为
之后便可以利用梯度下降的方法来求解或者将梯度传入更加高级的计算函数来进行计算。
对于Logistic回归,同样的我们可以得到其代价函数为
下面给出关键几个部分的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即为该输入