big*_*ree 17 matlab machine-learning linear-algebra gradient-descent
我在matlab中编写梯度下降.对于两个功能,我得到了更新步骤:
Run Code Online (Sandbox Code Playgroud)temp0 = theta(1,1) - (alpha/m)*sum((X*theta-y).*X(:,1)); temp1 = theta(2,1) - (alpha/m)*sum((X*theta-y).*X(:,2)); theta(1,1) = temp0; theta(2,1) = temp1;
但是,我想要对此代码进行矢量化,并能够将其应用于任意数量的功能.对于矢量化部分,有人向我指出,我想要做的是矩阵乘法
Run Code Online (Sandbox Code Playgroud)theta = theta - (alpha/m) * (X' * (X*theta-y));
这很好看,但是当我尝试时,我意识到它不适用于梯度下降,因为参数不会同时更新.
然后,我如何矢量化此代码并确保参数并同时更新?
小智 15
对于矢量化版本,请尝试以下操作(显式同步更新的两个步骤):
gradient = (alpha/m) * X' * (X*theta -y)
theta = theta - gradient
Run Code Online (Sandbox Code Playgroud)
len*_*310 10
你的矢量化是正确的.我也尝试了你的两个代码,它让我得到了同样的理论.请记住,不要在第二次实施中使用更新的theta.
这也有效但不如第二次实现简化:
Error = X * theta - y;
for i = 1:2
S(i) = sum(Error.*X(:,i));
end
theta = theta - alpha * (1/m) * S'
Run Code Online (Sandbox Code Playgroud)