Аргументы функции минимизации Scipy.optimize не работают для нескольких векторных входов

Я пытаюсь сгенерировать решения для весов PCA для некоторых (кривых доходности) рыночных данных. Однако я получаю сообщение об ошибке в моей функции scipy.optimize.minimize.

Основная ошибка заключается в том, что он, кажется, неправильно считывает аргументы в функцию минимизации (error_sum).

Я посмотрел здесь общую форму, но она не работает для моего кода, когда я ее использую. Scipy Minimize - невозможно минимизировать целевую функцию

import scipy as sc
import scipy.optimize as optimize
from scipy.optimize import minimize

w1 = 1.0
w2 = 1.0
w3 = 1.0

row_C = np.zeros(len(df_.columns)) # initialize current row as zero
row_T = df_.iloc[-1].values # get the target row, which we have set as the last row of the panda dataframe

row_c = np.array([-0.35865725, 0.52793819, 0.70654759, -0.28909144, 1.08467752, 0.91287324])
row_t = np.array([1.7971, 2.5756, 2.2005, 1.4966, 1.45  , 1.8022])

def error_sum(row_c, row_t, params): # row_c is estimated and row_t is target
    w1 = params[0]
    w2 = params[1]
    w2 = params[2]

    if len(row_c) != len(row_t): return print('error where x and y points are not same length')
    for cnt in range(len(row_c)):
        row_c[cnt] = w1 * row1[cnt] + w2 * row2[cnt] + w3 * row3[cnt]

    return np.sum(np.abs(row_c - row_t))

for cnt in range(len(df_.columns)): # loop to calculate the PCA-based moves
    row_c[cnt] = w1 * row1[cnt] + w2 * row2[cnt] + w3 * row3[cnt]

print(np.sum(np.abs(row_c - row_t))) # this is to get the sum of absolute difference errors
print(error_sum(row_c, row_t, x0))

x0 = np.array([1.0, 1.0, 1.0]) # parameters to optimize
bnds = ((-10.0, 10.0), (-10.0, 10.0), (-10.0, 10.0)) # boundary conditions of x0 parameter set
options = {'maxiter': 100}

res = minimize(error_sum, x0 ,(row_c, row_t), bounds = bnds, method='nelder-mead', options = {'xtol': 1e-8, 'disp': True})

Сообщение об ошибке, как показано ниже

error where x and y points are not same length

TypeError                                 Traceback (most recent call last)
<ipython-input-158-8c50b421e58a> in <module>()
     32 options = {'maxiter': 100}
     33 
---> 34 res = minimize(error_sum, x0 ,(row_c, row_t), bounds = bnds, method='nelder-mead', options = {'xtol': 1e-8, 'disp': True})

C:\ProgramData\Anaconda3\lib\site-packages\scipy\optimize\_minimize.py in minimize(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options)
    473                       callback=callback, **options)
    474     elif meth == 'nelder-mead':
--> 475         return _minimize_neldermead(fun, x0, args, callback, **options)
    476     elif meth == 'powell':
    477         return _minimize_powell(fun, x0, args, callback, **options)

C:\ProgramData\Anaconda3\lib\site-packages\scipy\optimize\optimize.py in _minimize_neldermead(func, x0, args, callback, maxiter, maxfev, disp, return_all, initial_simplex, xatol, fatol, **unknown_options)
    549         doshrink = 0
    550 
--> 551         if fxr < fsim[0]:
    552             xe = (1 + rho * chi) * xbar - rho * chi * sim[-1]
    553             fxe = func(xe)

TypeError: '>' not supported between instances of 'float' and 'NoneType'
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
1 222
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте изменить порядок аргументов в определении error_sum на

def error_sum(params, row_c, row_t)

если вы хотите получить оптимальные параметры и вызвать функцию следующим образом:

minimize(error_sum, x0, args=(row_c, row_t), bounds = bnds, method='nelder-mead', options = {'xtol': 1e-8, 'disp': True})

это было! Спасибо!

Kiann 28.05.2019 17:15

Другие вопросы по теме