gpt4 book ai didi

octave - Octave 梯度下降实现

转载 作者:行者123 更新时间:2023-12-03 07:37:43 26 4
gpt4 key购买 nike

事实上,我已经为此奋斗了大约两个月。是什么让这些有所不同?

hypotheses= X * theta
temp=(hypotheses-y)'
temp=X(:,1) * temp
temp=temp * (1 / m)
temp=temp * alpha
theta(1)=theta(1)-temp

hypotheses= X * theta
temp=(hypotheses-y)'
temp=temp * (1 / m)
temp=temp * alpha
theta(2)=theta(2)-temp



theta(1) = theta(1) - alpha * (1/m) * ((X * theta) - y)' * X(:, 1);
theta(2) = theta(2) - alpha * (1/m) * ((X * theta) - y)' * X(:, 2);

后者有效。我只是不确定为什么......我很难理解矩阵逆的需要。

最佳答案

您在第二个 block 的第一个示例中所做的事情您错过了一个步骤,不是吗?我假设您将 X 与一个向量连接起来。

   temp=X(:,2) * temp

最后一个示例可以工作,但可以进一步矢量化以变得更加简单和高效。

我假设您只有 1 个功能。它对于多个特征的工作方式相同,因为所发生的只是为每个特征在 X 矩阵中添加一个额外的列。基本上,您将一个由 1 组成的向量添加到 x 来向量化截距。

您可以用一行代码更新 2x1 的 theta 矩阵。将 x 连接一个由 1 组成的向量,使其成为 nx2 矩阵,然后您可以通过乘以 theta 向量 (2x1) 来计算 h(x),即 (X * theta) 位。

矢量化的第二部分是转置 (X * theta) - y),它给出一个 1*n 矩阵,当乘以 X(n*2 矩阵)时,基本上将聚合两个 (h(x)- y)x0 和 (h(x)-y)x1。根据定义,两个 theta 是同时完成的。这会产生一个新 θ 的 1*2 矩阵,我只需再次转置该矩阵即可将向量翻转到与 θ 向量相同的维度。然后我可以用 alpha 进行简单的标量乘法,并用 theta 进行向量减法。

X = data(:, 1); y = data(:, 2);
m = length(y);
X = [ones(m, 1), data(:,1)];
theta = zeros(2, 1);

iterations = 2000;
alpha = 0.001;

for iter = 1:iterations
theta = theta -((1/m) * ((X * theta) - y)' * X)' * alpha;
end

关于octave - Octave 梯度下降实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10591343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com