哪个是八度正则化的正确实施?
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));
我目前正在学习 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));