Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用scipy.optimize.brute_Python_Scipy_Nonlinear Optimization_Arima - Fatal编程技术网

Python 使用scipy.optimize.brute

Python 使用scipy.optimize.brute,python,scipy,nonlinear-optimization,arima,Python,Scipy,Nonlinear Optimization,Arima,基于此,我试图使用brute在ARIMA模型上进行网格扫描,但我无法使其运行。我在做这个原则证明,但我的论点有什么错 y = pd.DataFrame([0,1,4,9,16]) + 3 def objfunc(coeffs, endog): exp = coeffs[0] const = coeffs[1] print(exp, const, endog) out = 0 for i in range(4): out += i**exp

基于此,我试图使用brute在ARIMA模型上进行网格扫描,但我无法使其运行。我在做这个原则证明,但我的论点有什么错

y = pd.DataFrame([0,1,4,9,16]) + 3
def objfunc(coeffs, endog):
    exp = coeffs[0]
    const = coeffs[1]
    print(exp, const, endog)
    out = 0
    for i in range(4):
        out += i**exp + const
    return out

from scipy.optimize import brute
grid = (slice(0, 2, 1), slice(3, 4, 1))
brute(objfunc, ranges=grid, args=y)

(0, 3, 0)
(0, 3, 0)
(1, 3, 0)
...
TypeError: objfunc() takes exactly 2 arguments (1 given)
一旦我解决了这个问题,我的目标实际上是在顺序和季节顺序上优化这个函数,分别是这样的元组(u,u,u,u,u,12)

def objfunc(coeffs, endog):
    order = coeffs[0]
    seasonal = coeffs[1]
    fit = sm.tsa.statespace.SARIMAX(endog, trend='n', order=order, seasonal_order=seasonal).fit()
    return fit.aic()
编辑:这段代码有效(多亏了@sasha),变量名更清晰,更有意义(我最小化了错误函数)


这些变量名的代码看起来有点奇怪。endog,y;y变成了endog

但以下可能是方法,它完全遵循

args:tuple,可选

完全指定函数所需的任何附加固定参数

代码:


变量名是正确的。我编辑了我的问题并包括了你的答案。我可以在SARIMAX上进行优化,我可能会发布它。非常感谢。
import pandas as pd    
y = np.array([0,1,4,9,16]) + 3 #polynomial x^2+3 with x=0:4
def objfunc(coeffs, *args):
    arr = args[0]                       # access first element of tuple: y
    exp = coeffs[0]                       #     assuming y should become endog
    const = coeffs[1]
    pol = [i**exp + const for i in range(len(y))]
    print coeffs
    return abs(sum(pol) - sum(arr))

from scipy.optimize import brute
grid = (slice(1, 3, 1), slice(2, 5, 1))
resbrute = brute(objfunc, ranges=grid, args=(y,), full_output=True, finish=None)
print("Best coeffs: {}".format(resbrute[0]))
print("Score with best coeffs: {}".format(resbrute[1]))
print("Grid: {}".format(resbrute[2].tolist()))
print("Scores for grid: {}".format(resbrute[3].tolist()))
import pandas as pd

y = pd.DataFrame([0,1,4,9,16]) + 3
def objfunc(coeffs, *args):
    endog = args[0]                       # access first element of tuple: y
    exp = coeffs[0]                       #     assuming y should become endog
    const = coeffs[1]
    print(exp, const, endog)
    out = 0
    for i in range(4):
        out += i**exp + const
    return out

from scipy.optimize import brute
grid = (slice(0, 2, 1), slice(3, 4, 1))
brute(objfunc, ranges=grid, args=(y,))    # in general a tuple; first pos: y