【问题标题】:gradient descent newton method using Hessian Matrix使用 Hessian 矩阵的梯度下降牛顿法
【发布时间】:2016-07-21 03:15:04
【问题描述】:

我正在使用牛顿法实现回归的梯度下降,如机器学习概率视角 (Murphy) 书的 8.3 部分所述。我在这个实现中使用二维数据。我正在使用以下符号。
x = 输入数据点 m*2
y = 对应于输入数据的标记输出(m)
H = Hessian 矩阵定义为

梯度下降更新

损失函数定义为

就我而言 是 数组,H 是

这是我的 python 实现。但是,这不起作用,因为每次迭代的成本都在增加。

def loss(x,y,theta):
   m,n = np.shape(x)
   cost_list = []
   for i in xrange(0,n): 
     x_0 = x[:,i].reshape((m,1)) 
     predicted = np.dot(x_0, theta[i])    
     error = predicted - y
     cost = np.sum(error ** 2) /  m
     cost_list.append(cost)

   cost_list = np.array(cost_list).reshape((2,1))
   return cost_list


def NewtonMethod(x,y,theta,maxIterations):
   m,n = np.shape(x)
   xTrans  = x.transpose()
   H       = 2 * np.dot(xTrans,x) / m
   Hinv    = np.linalg.inv(H)
   thetaPrev = np.zeros_like(theta)
   best_iter = maxIterations
   for i in range(0,maxIterations):
     cost = loss(x,y,theta)
     theta  = theta - np.dot(Hinv,cost))
     if(np.allclose(theta,thetaPrev,rtol=0.001,atol=0.001)):
        break;
     else:
       thetaPrev = theta
       best_iter = i

   return theta

这是我使用的示例值

import numpy as np

x = np.array([[-1.7, -1.5],[-1.0 , -0.3],[ 1.7 ,  1.5],[-1.2, -0.7 ][  0.6,  0.1]])  
y = np.array([ 0.3 ,  0.07, -0.2,  0.07,  0.03 ])
theta = np.zeros(2)
NewtonMethod(x,y,theta,100)

需要帮助/建议来解决此问题。
谢谢

【问题讨论】:

    标签: python optimization machine-learning gradient-descent newtons-method


    【解决方案1】:

    您有效地使用了 1 的步长。尝试减小步长,看看是否有帮助。也就是说,而不是

    这样做:

    具有小于 1 的值。

    【讨论】:

      猜你喜欢
      • 2012-08-17
      • 2020-05-04
      • 2021-01-21
      • 2020-03-31
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      • 2010-12-21
      相关资源
      最近更新 更多