Scipy Minimum给我“由于精度损失而不一定实现的期望错误”,而且我的代码似乎是正确的

问题描述

基本上是标题所说的。使用scipy进行一些初步练习可以将其最小化,并且无法弄清楚为什么它不会收敛。

我的预测模型如下:

def predict(X,betas):
    y_hat = np.dot(X,betas)
    return y_hat
X = np.array([[1,0],[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.3])
y = np.array([0,0.4,2])
lossRSS(betas,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,2]])
y = np.array([0,2]) 
minimization(X,lossRSS)

但是我得到以下输出

fun: 2.06
 hess_inv: array([[1,[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])

,我不知道为什么。我在优化功能中滥用的参数吗?我对最小化方法背后的理论不太了解,但是据我所知,最小化和优化如何运行,应该可以工作。

任何见解将不胜感激!

解决方法

我的问题是我有

while True: 
     try: 
         i = int(input("Enter number : ")) 
         break 
     except: 
         continue 

代替

res=y_hat-y

一个基本的错误,这可能就是为什么我忽略了它。决定回答这个问题,而不是删除来提醒人们,这个错误可能是他们认为自己高于目标的愚蠢之举!