Пользовательская функция OLS: массивы выровнены (совместимы) при запуске в одиночку, но не выровнены как аргумент для fmin - PullRequest
0 голосов
/ 14 октября 2018

Я новый пользователь 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...