哪个是八度正则化的正确实施?

Which is the correct implementation of regularization in octave?

我目前正在学习 Andrew Ng 的机器学习课程,并且我尝试在学习过程中实现这些内容以免忘记它们,我刚刚完成正则化(第 7 章)。我知道 theta 0 是正常更新的,与其他参数分开,但是,我不确定其中哪一个是正确的实现。

实施 1:在我的梯度函数中,计算正则化向量后,将 theta 0 部分更改为 0,这样当它添加到总数时,就好像 theta 0 从未被正则化过。

实施 2:将 theta 存储在一个临时变量中:_theta,用 reg_step 0 更新它(这样就好像没有正则化),将新的 theta 0 存储在一个临时变量中:t1,然后用我想要的 reg_step 更新原始 theta 值,并将 theta 0 替换为 t1(来自非正则化更新的值)。

下面是我第一次实现的代码,不进阶,只是练习: 我使用的是 1 索引的八度,所以 theta(1) 是 theta(0)

function ret = gradient(X,Y,theta,reg_step),
  H = theta' * X;
  dif = H-Y;
  mul = dif .* X;
  total = sum(mul,2);
  m=(size(Y)(1,1));

  regular = (reg_step/m)*theta;
  regular(1)=0;

  ret = (total/m)+regular,
endfunction

提前致谢。

对第一个实现稍作调整对我有用。

首先,计算每个 theta 的正则化。然后继续执行梯度步骤,稍后您可以手动更改包含梯度的矩阵的第一个条目以忽略 theta_0.

的正则化
% Calculate regularization
regularization = (reg_step / m) * theta;

% Gradient Step
gradients = (1 / m) * (X' * (predictions - y)) + regularization;

% Ignore regularization in theta_0 
gradients(1) = (1 / m) * (X(:, 1)' * (predictions - y));