线性回归中的梯度下降

 手机用户2602890793 发布于 2023-02-04 14:13

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

在里面

while(repeat until convergence)
{
   calculate theta0 and theta1 simultaneously.
}

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

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

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

    在此输入图像描述

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

      您选择x的初始值.让我们说这是图中的A点.

      您可以计算f(x)相对于A处的x的梯度.

      这给出了A点处函数的斜率.由于函数在A处增加,它将产生正值.

      您从x的初始猜测中减去此正值并更新xie的值x = x - [Some positive value].这使得x越接近D [即最小]并且减小f(x)的函数值[来自图].让我们说在迭代1之后,你到达B点.

      在B点,重复与步骤4中提到的相同的过程并到达C点,最后点D.

      在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所说,两种基本方法是

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

      iter = 0
      while (iter < N) {
        theta0 = theta0 - gradient with respect to theta0
        theta1 = theta1 - gradient with respect to theta1
        iter++
      }
      

      重复直到theta0和theta1的两个连续值几乎相同.伪代码由@Gerwin在另一个答案中给出.

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

    theta = inverse(transpose (X)*X)*transpose(X)*y
    

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

    2023-02-04 14:16 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有