【问题标题】:Scipy minimize is giving me a "desired error not necessarily achieved due to precision loss", and my code seemingly is correctScipy minimize 给了我一个“由于精度损失不一定达到的预期错误”,我的代码似乎是正确的
【发布时间】:2021-01-03 21:40:45
【问题描述】:

基本上就是标题所说的。使用 scipy minimize 进行一些初步练习,但不知道为什么它不会收敛。

我的预测模型如下:

def predict(X,betas):
    y_hat = np.dot(X,betas)
    return y_hat
X = np.array([[1,0],[1,-1],[1,2]])
betas = np.array([0.1,0.3])
y_hat = predict(X,betas)
print(y_hat)

按预期工作。

然后,我的损失/梯度函数如下:

def lossRSS(betas,X,y):
    y_hat = predict(X, betas)
    res = y_hat-y
    rss = np.sum(res * res)
    gradient = -2 * np.transpose(X).dot(res)
    return (rss, gradient)
X = np.array([[1,0],[1,-1],[1,2]])
betas = np.array([0.1,0.3])
y = np.array([0,0.4,2])
lossRSS(betas,X,y)

这也可以按预期工作。

最后,我实现了我的最小化函数,如下所示:

def minimization(X, y, lossfuncn):
    betas = np.array([0.1,0.3])
    result = so.minimize(lossfuncn, betas, args=(X, y), jac=True)
    print(result)

X = np.array([[1,0],[1,-1],[1,2]])
y = np.array([0,0.4,2]) 
minimization(X,y,lossRSS)

但我得到以下输出:

fun: 2.06
 hess_inv: array([[1, 0],
       [0, 1]])
      jac: array([3.6, 4. ])
  message: 'Desired error not necessarily achieved due to precision loss.'
     nfev: 53
      nit: 0
     njev: 41
   status: 2
  success: False
        x: array([0.1, 0.3])

我不知道为什么。优化函数中是否存在我误用的参数?我对最小化方法背后的理论并不太敏锐,但根据我对最小化和优化操作的了解,它应该可以工作。

任何见解将不胜感激!

【问题讨论】:

    标签: python-3.x scipy data-science scipy-optimize


    【解决方案1】:

    我的问题是我有

    res=y_hat-y
    

    而不是

    res=y-y_hat
    

    一个基本的错误,这可能是我忽略它的原因。决定回答这个问题而不是删除,以提醒人们,也许这个错误是他们认为自己在上面的超级愚蠢的事情!

    【讨论】:

      猜你喜欢
      • 2016-02-24
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多