我是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.