如何解决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
一个基本的错误,这可能就是为什么我忽略了它。决定回答这个问题,而不是删除来提醒人们,这个错误可能是他们认为自己高于目标的愚蠢之举!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。