正则化,同时避免theta(1)

时间:2019-08-31 15:16:13

标签: machine-learning octave

我已经完成了Coursera上的Standford机器学习课程的第3周,提交程序给了我一个反馈,告诉我theta(1)不应该标准化。

我试图简单地从theta(2)计算J,如下所示:

J = (1/m) * sum((-y .* log(h)) - ((1-y) .* log(1-h))) + (lambda/(2*m)) *   sum(theta(2:end) .^ 2);

grad = 1/m * sum((h - y) .* X) + lambda .* theta ./ m;

这不起作用。我最终在网上找到了一个类似的程序,并将代码更改为

J = (1/m) * sum((-y .* log(h)) - ((1-y) .* log(1-h))) + (lambda/(2*m)) * sum(theta(2:end) .^ 2);

grad = ((h - y)' * X / m)' + lambda .* theta .* [0; ones(length(theta)-1, 1)] ./ m;

可以,但是我不理解代码中矩阵[0; ones(length(theta)-1, 1)]的目的。有人可以向我解释吗?

1 个答案:

答案 0 :(得分:0)

很久以前,我也完成了这门课程。我不看方程式就不能真正回答,但据我所知,theta1(+1)是我们添加的一个偏差项,没有规律化或惩罚该偏差项的意义。该方程式(逐元素相乘)是一种通过将0乘以theta1 = 0来使theta1 = 0的方法,而其余的theta残差则是通过在计算梯度下降时将它们乘以1来保持原样。所以最后,我们将不在计算中考虑theta1。希望这可以帮助。