оптимизация.минимизация с помощью CG

#python #python-3.x #scipy #scipy-optimize-minimize

#python #python-3.x #scipy #scipy-оптимизация-минимизация

Вопрос:

Я использовал следующий код:

 options = {'maxiter':50, 'disp':True}
res = optimize.minimize(
        fun=lrCostFunction,
        x0=theta_k,
        args=(X, y_k, lambda_),
        method='CG',
        options=options
)
 

И это дает мне следующую ошибку:

     TypeError: only size-1 arrays can be converted to Python scalars
    The above exception was the direct cause of the following exception:
    ValueError: setting an array element with a sequence.
 

Но когда я установил jac = True следующее:

 
options = {'maxiter':50, 'disp':True}

res = optimize.minimize(
        fun=lrCostFunction,
        x0=theta_k,
        jac=True,
        args=(X, y_k, lambda_),
        method='CG',
        options=options
)

 

Все работает нормально, но в документации не указано, что мы должны установить jac = True , так что здесь не так?

Ответ №1:

Я предполагаю, что целевая функция lrCostFunction возвращает как значения функции, так и градиенты. Согласно документации minimize

Предполагается, что If jac является логическим значением и имеет значение True, fun возвращает градиент вместе с целевой функцией. Если значение равно False, градиент будет оцениваться с использованием «2-точечной» оценки конечных разностей.

Поэтому, если jac=False в то время как целевая функция возвращает также градиент, вы получите некоторую ошибку. Например

 # objective function 
def obj_func(x,a,b,c):
    
    func_val = a*x[0]**2   b*x[1]   c
    func_grad = 2*a*x[0]   b
    return func_val,func_grad

x0 = np.random.rand(3)
res = minimize(obj_func,x0,args=(1,2,3),method='CG')
 

Если я выполню этот код, я получу TypeError . Если я установил jac=True , все работает нормально.