Передача pandas dataframe для оптимизации scipy, когда функция не возвращает ни одного значения - PullRequest
0 голосов
/ 02 сентября 2018

Я пытаюсь использовать scipy's bashopping в сочетании с созданной мной функцией. Хотя мой вопрос связан с этим потоком , разница в том, что моя функция не возвращает единственное значение, а скорее ряд питона

from scipy.optimize import basinhopping

############     Simple DataFrame     ###########
data = pd.DataFrame({'def': [0, 0, 1, 1, 1], 'amt': [40, 20, 30, 50, 60], 
                    'prob': [0.20, 0.10, 0.15, 0.30, 0.28], 
                    'cost': [0.05, 0.01, 0.02, 0.09, 0.08],
                    'rate': [0.98, 0.75, 0.95, 0.76, 0.89]})

############     Function      ############
def pred_money(row):
    if (row["def"] == 0):
        money = (row["amt"] * row["cost"]) * (1 - row["prob"])
        return money
    else:
        money = row["amt"] * row["rate"] * row["prob"]
        return money

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

x0=[1.]
minimizer_kwargs = {"method": "BFGS", "args":(something_goes_here)}
ret = basinhopping(func=pred_money, x0=x0, 
minimizer_kwargs=minimizer_kwargs,niter=200)

В соответствии с документацией bashopping другие аргументы функции могут быть переданы как часть словаря minimizer_kwargs . Это оставлено пустым в приведенном выше коде, потому что я просто не знаю, что там происходит. Я подозреваю, что он не возвращает ни одного значения. Я могу ошибаться.

Большинство примеров в документации - довольно простые функции, которые не имеют ничего общего с кадром данных. Любая помощь приветствуется. Спасибо.

...