gpt4 book ai didi

matlab - 倍频程线性回归(一个变量)的梯度下降

转载 作者:行者123 更新时间:2023-11-30 08:43:42 24 4
gpt4 key购买 nike

我正在尝试使用线性回归的单个变量来实现线性回归(来自 coursera 上有关机器学习的 standford's course 的练习 1)。

我的理解是,这就是数学:enter image description here

现在,我的代码实现如下:

for iter = 1:num_iters

temp1 = theta(1) - alpha * sum(X * theta - y) / m;
temp2 = theta(2) - alpha * sum( (X * theta - y) .* X(2) ) / m;

theta(1) = temp1;
theta(2) = temp2;

哪里

  • m 是 X 和 y 中的行数
  • alpha 是学习率
  • theta 是一个 2X1 向量
  • X 是由两个 mX1 向量(其中一个为实际变量)组成的 mX2 矩阵
  • X * theta - y 是一个 mX1 向量,包含每个第 I 个假设与第 I 个输出/y 之间的差异,其总和就是这个(向量每个元素的总和,基本上是求和)。<

我尝试用一​​个小例子(m = 4)手动执行此操作,我认为我的代码是正确的......但显然不是,否则我不会在这里写。当我运行算法时,我会根据传递给函数的初始 theta 得到不同的 theta 作为返回,如果我绘制成本函数,那么它显然不适合某些 theta 值(并非全部):

This looks about right

This doesn't

这可能意味着我并不真正理解数学(这可以解释为什么 stackoverflow 上的其他人都在使用“转置”而我没有),问题是我不知道哪一部分是我的”我遇到了麻烦。

我真的很感激一些见解,但我想自己完成这个练习。基本上我正在寻求帮助,但不是完整的解决方案

编辑:显然这不是逻辑错误,而是语义错误。当分配 temp2 时,我应该写 (X * theta - y) .* X(:,2)而不是(X * theta - y) .* X(2) ;基本上,我没有选择 X 的第二列(这是一个 mX2 矩阵),而是选择一个标量(由于 Octave 的语法)。

最佳答案

我只是简单地浏览了该类(class),看起来您大部分都在正确的轨道上,但这里有一些有用的提示:

  • m 是训练集的大小(您可以将其视为行数)
  • θ0 是与 θ1 同时变化的常数,x,y 是给定训练集(数据)的值。 (xi 和 yi 仅表示训练数据中的各个行,例如 x1、y1 代表第一行)
  • hθ(x)=θ0+θ1*x 不是 X*theta,如您在代码中所示,而是您正在拟合的线性方程

这里是您可以工作的起点:

for iter = 1:num_iters

theta(1) = theta(1) - alpha * sum( (theta(1)+theta(2).*X) - y) / m;
theta(2) = theta(2) - alpha * sum( ((theta(1)+theta(2).*X) - y) .* X ) / m;

关于matlab - 倍频程线性回归(一个变量)的梯度下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43403064/

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