问题描述
基本上是标题所说的。使用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
一个基本的错误,这可能就是为什么我忽略了它。决定回答这个问题,而不是删除来提醒人们,这个错误可能是他们认为自己高于目标的愚蠢之举!