Я новый пользователь Python, пытающийся использовать fmin для оптимизации, используя сумму квадратов ошибок.Следующий код дает значение ошибки.Я подозреваю, что это как-то связано с тем, как функция читает форму беты во время итераций, но я понятия не имею, как определить форму беты без указания значений для нее.
import numpy as np
import pandas as pd
from scipy.optimize import fmin
#data
real_beta = np.random.rand(3)
x = np.random.rand(20,3)
y = x@real_beta + np.random.normal(0,0.05,20)
#calculates sum of squared errors from OLS
def sse(x, y, beta):
return (np.square(y - (x@beta))).sum()
#Optimization
beta0 = np.random.rand(3)
beta = fmin(sse, beta0, args=(x,y))
ValueError Traceback (most recent call last)
<ipython-input-14-210146de54d5> in <module>()
1 beta0 = np.random.rand(3)
----> 2 fmin(sse, beta0, args=(x,y))
~/anaconda3/lib/python3.6/site-packages/scipy/optimize/optimize.py in fmin(func, x0, args, xtol, ftol, maxiter, maxfun, full_output, disp, retall, callback, initial_simplex)
407 'initial_simplex': initial_simplex}
408
--> 409 res = _minimize_neldermead(func, x0, args, callback=callback, **opts)
410 if full_output:
411 retlist = res['x'], res['fun'], res['nit'], res['nfev'], res['status']
~/anaconda3/lib/python3.6/site-packages/scipy/optimize/optimize.py in _minimize_neldermead(func, x0, args, callback, maxiter, maxfev, disp, return_all, initial_simplex, xatol, fatol, adaptive, **unknown_options)
550
551 for k in range(N + 1):
--> 552 fsim[k] = func(sim[k])
553
554 ind = numpy.argsort(fsim)
~/anaconda3/lib/python3.6/site-packages/scipy/optimize/optimize.py in function_wrapper(*wrapper_args)
291 def function_wrapper(*wrapper_args):
292 ncalls[0] += 1
--> 293 return function(*(wrapper_args + args))
294
295 return ncalls, function_wrapper
<ipython-input-13-a75a191185bc> in sse(x, y, beta)
1 def sse(x, y, beta):
----> 2 return (np.square(y - (x@beta))).sum()
ValueError: shapes (3,) and (20,) not aligned: 3 (dim 0) != 20 (dim 0)