Я занимаюсь некоторым служебным моделированием, но застрял, пытаясь оптимизировать свою целевую функцию, и не понимаю проблемы.
У меня есть вспомогательная функция (1), которая принимает экспериментальные данные в качестве аргументов, а также два параметра (тэта и фи), с помощью которых я хочу оптимизировать функцию (1).Функция возвращает оптимальный выбор с учетом вышеупомянутых комбинаций данных и параметров.
Целевая функция (2) - это, как правило, сумма квадратов невязок (SSE), которая принимает функцию (1) в качестве входных данных и определяет, насколько хорошо оптимальный выбор из функции (1) выполняется по отношению к фактическим данным.
Здесь все идет не так.Я пытаюсь оптимизировать функцию 2 в отношении параметров тэта и фи.Вот код:
from scipy.optimize import minimize
def costmixed(theta,phi,data):
predictions = []
for trialNr,trialDat in data.iterrows():
predictions.append(mixed_model(
trialDat['inv'],trialDat['mult'],trialDat['belMult'],theta,phi))
return np.sum(np.square(data['ret'] - np.array(predictions))) #returns sum of squared residuals.
#initial guesses
x0=[1000,0.5]
sol=minimize(costmixed,x0,args=[data],bounds=bnds)
И следующие ошибки, которые я получаю:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-46-87cded55e0f8> in <module>()
7 return np.sum(np.square(data['ret'] - np.array(predictions))) #returns sum of squared residuals.
8
----> 9 sol=minimize(costmixed,x0,args=[data],bounds=bnds)
C:\ProgramData\Anaconda3\lib\site-packages\scipy\optimize\_minimize.py in minimize(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options)
448 elif meth == 'l-bfgs-b':
449 return _minimize_lbfgsb(fun, x0, args, jac, bounds,
--> 450 callback=callback, **options)
451 elif meth == 'tnc':
452 return _minimize_tnc(fun, x0, args, jac, bounds, callback=callback,
C:\ProgramData\Anaconda3\lib\site-packages\scipy\optimize\lbfgsb.py in _minimize_lbfgsb(fun, x0, args, jac, bounds, disp, maxcor, ftol, gtol, eps, maxfun, maxiter, iprint, callback, maxls, **unknown_options)
326 # until the completion of the current minimization iteration.
327 # Overwrite f and g:
--> 328 f, g = func_and_grad(x)
329 elif task_str.startswith(b'NEW_X'):
330 # new iteration
C:\ProgramData\Anaconda3\lib\site-packages\scipy\optimize\lbfgsb.py in func_and_grad(x)
271 if jac is None:
272 def func_and_grad(x):
--> 273 f = fun(x, *args)
274 g = _approx_fprime_helper(x, fun, epsilon, args=args, f0=f)
275 return f, g
C:\ProgramData\Anaconda3\lib\site-packages\scipy\optimize\optimize.py in function_wrapper(*wrapper_args)
290 def function_wrapper(*wrapper_args):
291 ncalls[0] += 1
--> 292 return function(*(wrapper_args + args))
293
294 return ncalls, function_wrapper
TypeError: costmixed() missing 1 required positional argument: 'data'
Я надеюсь, что вы, волшебники, сможете мне помочь!Я новичок в Python, поэтому я могу упустить что-то довольно простое.Заранее спасибо.