我目前正在学习Andrew Ng的机器学习课程,我试着在学习的过程中实现这些东西,这样就不会忘记它们,我刚刚完成了正则化(第7章)。我知道theta 0是正常更新的,独立于其他参数,然而,我不确定这些参数中的哪一个是正确的实现。
实现1:在我的梯度函数中,在计算正则化向量后,将θ0部分更改为0,因此当它被添加到总数时,就好像θ0从未被正则化过。
实现2:将theta存储在temp变量:_theta中,用reg_step 0更新它(这样就好像没有正则化一样),将新的theta 0存储在temp变量: t1中,然后用我想要的reg_step更新原始的theta值,并用t1 (来自非正则化更新的值)替换theta 0。
下面是我的第一个实现的代码,它不是高级的,我只是在练习:我使用的是八度,它是1-index,所以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
提前谢谢。
发布于 2020-10-17 08:10:26
对第一个实现稍作调整就可以了。
首先,计算每个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));
https://stackoverflow.com/questions/64009278
复制相似问题