[当我使用scipy.optimize时如何处理'起始点处的残基不是有限的?'

问题描述 投票:1回答:1

我是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,S_ADV,volatility,POV,MI):
    return model(x,S_ADV,volatility,POV) - MI

def jac(x,S_ADV,volatility,POV,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,volatility,POV,MI))

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

ValueError: Residuals are not finite in the initial point.
python optimization scipy data-science non-linear-regression
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.