使用向量化版本的梯度,如下所述: 梯度下降似乎失败了
theta = theta - (alpha/m * (X * theta-y)' * X)';
theta值未被更新,因此无论初始的theta值是什么,运行梯度下降后设置的值都是这样的:
示例1:
m = 1X = [1]y = [0]theta = 2theta = theta - (alpha/m .* (X .* theta-y)' * X)'theta = 2.0000
示例2:
m = 1X = [1;1;1]y = [1;0;1]theta = [1;2;3]theta = theta - (alpha/m .* (X .* theta-y)' * X)'theta = 1.0000 2.0000 3.0000
theta = theta - (alpha/m * (X * theta-y)' * X)';
是否是梯度下降的正确向量化实现?
回答:
theta = theta - (alpha/m * (X * theta-y)' * X)';
确实是梯度下降的正确向量化实现。
你完全忘记设置学习率alpha
了。
在设置alpha = 0.01
后,你的代码变为:
m = 1 # 训练样本的数量X = [1;1;1]y = [1;0;1]theta = [1;2;3]alpha = 0.01theta = theta - (alpha/m .* (X .* theta-y)' * X)'theta = 0.96000 1.96000 2.96000