for iter = 1:num_iters
theta = theta - (alpha / m) * X' * (X * theta - y);
J_history(iter) = computeCostMulti(X, y, theta);
end
function J = computeCostMulti(X, y, theta)
m = length(y);
J = 0;
J = 1 / (2 * m) * (X * theta - y)' * (X * theta - y);
theta = pinv(X' * X) * X' * y;
对于相同的X和y值,这两个实现收敛到theta的不同值。法线方程给出了正确的答案,但梯度下降给出了错误的答案。
Gradient Descent的实施有什么问题吗?
答案 0 :(得分:3)
我认为当您使用渐变下降时,首先使用特征缩放处理输入。这不是用正规方程方法完成的(因为不需要特征缩放),这应该导致不同的θ。如果您使用模型进行预测,则应该得出相同的结果。
答案 1 :(得分:1)
没关系。由于您没有进行特征缩放以使用正态方程,因此您会发现预测是相同的
答案 2 :(得分:0)
没有人向你保证,固定步长的梯度下降会在num_iters
次迭代时收敛,甚至达到局部最优。您需要迭代直到满足一些定义良好的convergency criteria(例如渐变接近于零)。
答案 3 :(得分:0)
如果在梯度下降之前对训练数据进行了归一化,则还应该使用输入数据进行预测。具体来说,您的新输入数据应类似于:
[1, (x-mu)/sigma]
其中:
-1
是偏差项
-mu
是训练数据的平均值
-sigma
是训练数据的标准偏差