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

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...