Stanford ML - Regularization 正则化

前端之家收集整理的这篇文章主要介绍了Stanford ML - Regularization 正则化前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在线性和逻辑回归中,如果选择的特征过多,会出现overfitting的情况:回归函数匹配训练集内的数据特别好,但是不能很好的预测新数据。解决overfitting的方法一般有两种:

1. 减少特征的数量 - 用老婆的话说,就是控制参数的稀疏性,不让参数过多,防止过拟合。很专业的说,赞一个:)

2. 正则化 - 保留所有的特征,但是让theta的取值小些,这样每个特征对最终结果的影响就减小了。

这里呢介绍正则化这种方法


正则化对线性回归和逻辑回归是一致的,都是cost function加上额外的一项来平衡theta的取值。线性回归的cost function如下:


对应的逻辑回归的cost function为:


注意theta的平方和是从theta1开始,不包括theta0。这样按照梯度下降求偏导的公式变为:


从而:



可以看出,这里对theta乘了一个小于但接近于1的系数,相当于迭代的时候对theta进行了衰减。这个公式讲义里面有点错误


对线性回归normal equation方法进行正则化,theta的计算公式如下。矩阵为(n+1)*(n+1)维。



对逻辑回归的函数fminunc进行正则化,纯粹套用公式如下:

J = y' * log(sigmoid(X*theta)) + (1 - y)' * log(1 - sigmoid(X*theta));
J = -J/m;

reg = 0;
for j = 2:size(theta)
    reg = reg + theta(j)^2;
end;
reg = reg * lambda / (2*m);

J = J + reg;

for j = 1:size(theta)
    grad(j) = (sigmoid(X*theta) - y)' * X(:,j);
    grad(j) = grad(j) / m;
end

for j = 2:size(theta)
    grad(j) = grad(j) + theta(j) * lambda / m;
end

猜你在找的正则表达式相关文章