当我使用scipy.optimize时,如何处理“起始点上的残基不是有限的”?

我是python的新手,我想使用scipy.optimize执行非线性回归。

我遵循了scipy文档的介绍,这是我的代码的一部分。

我将S_ADV,波动率和POV组织为几个numpy数组,它们是我回归中的观察值。对于MI,我想通过此回归获取参数x [0],x [1],x [2],x [3]。

def model(x,S_ADV,volatility,POV):
    return x[0] * x[1] * S_ADV ** x[2] * volatility ** x[3] * POV + (1-x[0]) * x[1] * S_ADV ** x[2]  * volatility ** x[3]


def fun(x,POV,MI):
    return model(x,POV) - MI

def jac(x,MI):
    JAC = np.empty((S_ADV.size,x.size))
    JAC[:,0] = x[1] * S_ADV ** x[2] * volatility ** x[3] * POV - x[1] * S_ADV ** x[2]  * volatility ** x[3]
    JAC[:,1] = x[0]* S_ADV ** x[2] * volatility ** x[3] * POV + (1-x[0]) * S_ADV ** x[2]  * volatility ** x[3]
    JAC[:,2] = x[0] * x[1] * S_ADV ** x[2] * math.log(math.e,S_ADV) * volatility ** x[3] * POV + (1-x[0]) * x[1] * S_ADV ** x[2] * math.log(math.e,S_ADV) * volatility ** x[3]
    JAC[:,3] = x[0] * x[1] * S_ADV ** x[2] * volatility ** x[3]  * math.log(math.e,volatility) * POV + (1-x[0]) * x[1] * S_ADV ** x[2]  * volatility ** x[3] * math.log(math.e,volatility)
    return jac
x0 = np.array([7.00,0.7,0.2,1.00,1.00])


res = least_squares(fun,x0,jac = jac,args = (S_ADV,MI))

我的代码中是否有任何错误以及如何处理此问题?

ValueError: Residuals are not finite in the initial point.
fanabcdefg 回答:当我使用scipy.optimize时,如何处理“起始点上的残基不是有限的”?

在x0处打印fun的值,它应该是浮点数。

本文链接:https://www.f2er.com/2854924.html

大家都在问