线性回归中的梯度下降

use*_*234 2 java machine-learning linear-regression gradient-descent

我试图在java中实现线性回归.我的假设是theta0 + theta1*x [i].我试图找出theta0和theta1的值,以便成本函数最小.我使用渐变下降来找出价值 -

在里面

while(repeat until convergence)
{
   calculate theta0 and theta1 simultaneously.
}
Run Code Online (Sandbox Code Playgroud)

什么是重复直到收敛?我知道它是局部最小值,但是我应该在while循环中放入什么样的代码?

我是机器学习的新手,刚开始编写基本的算法以便更好地理解.任何帮助将不胜感激.

小智 15

梯度下降是用于最小化给定函数的迭代方法.我们从解决方案的初始猜测开始,然后在该点采用函数的梯度.我们在梯度的负方向上逐步解决该问题,然后重复该过程.该算法最终将收敛于梯度为零的位置(对应于局部最小值).所以你的工作是找出最小化损失函数的θ0和θ1的值[例如最小平方误差].术语"收敛"意味着您达到了局部最小值,并且进一步迭代不会影响参数值,即theta0和theta1的值保持不变.让我们看一个例子注意:假设它在这个解释的第一象限.

在此输入图像描述

假设您必须最小化函数f(x)[在您的情况下的成本函数].为此,您需要找出最小化f(x)函数值的x值.以下是使用梯度下降法找出x的值的分步过程

  1. 您选择x的初始值.让我们说这是图中的A点.
  2. 您可以计算f(x)相对于A处的x的梯度.
  3. 这给出了A点处函数的斜率.由于函数在A处增加,它将产生正值.
  4. 您从x的初始猜测中减去此正值并更新xie的值x = x - [Some positive value].这使得x越接近D [即最小]并且减小f(x)的函数值[来自图].让我们说在迭代1之后,你到达B点.
  5. 在B点,重复与步骤4中提到的相同的过程并到达C点,最后点D.
  6. 在D点,由于它是局部最小值,当你计算梯度时,你会得到0 [或非常接近0].现在你尝试更新x的值x = x - [0].你将得到相同的x [或更接近前一个x的值].这种情况称为"收敛".上述步骤用于增加斜率,但对于减小斜率同样有效.例如,G点处的梯度会产生一些负值.当你更新x即x = x - [ negative value] = x - [ - some positive value] = x + some positive value.这会增加x的值,并使x接近F [或接近最小值].

有多种方法可以解决这种梯度下降问题.正如@mattnedrich所说,两种基本方法是

  1. 使用固定的迭代次数N,对于这个伪代码将是

    iter = 0
    while (iter < N) {
      theta0 = theta0 - gradient with respect to theta0
      theta1 = theta1 - gradient with respect to theta1
      iter++
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 重复直到theta0和theta1的两个连续值几乎相同.伪代码由@Gerwin在另一个答案中给出.

梯度下降是使线性回归中的函数最小化的方法之一.也有直接的解决方案.批处理(也称为正规方程)可用于在单个步骤中找出theta0和theta1的值.如果X是输入矩阵,y是输出向量,θ是要计算的参数,那么对于平方误差方法,您可以使用此矩阵方程在一个步骤中找到theta的值

theta = inverse(transpose (X)*X)*transpose(X)*y
Run Code Online (Sandbox Code Playgroud)

但是由于这包含矩阵计算,显然当矩阵X的大小很大时,它的计算成本更高,然后是梯度下降.我希望这可以回答你的问题.如果没有,请告诉我.