Динамически создавать функцию SciPy curve_fit

ТАК нуб здесь.

Я создаю оболочку вокруг scipy.optimize.curve_fit для многомерной регрессии. Мне удалось успешно запустить ванильную версию с двумя или тремя независимыми переменными —

Две независимые переменные -

def fn(x, a, b1, b2):
    return a + b1*x[0] + b2*x[1]

popt, pcov = curve_fit(fn, x, y)  

Три независимые переменные -

def fn(x, a, b1, b2, b3):
    return a + b1*x[0] + b2*x[1] + b3*x[2]

popt, pcov = curve_fit(fn, x, y)  

Дело в том, что я не знаю, сколько независимых переменных будет на входе, и я не хочу вручную перебирать все перестановки определения функции, что я также не считаю лучшей практикой. Таким образом, возникает вопрос: Как здесь создать функцию fn динамически на основе входного фрейма данных?


person ujs    schedule 03.11.2020    source источник


Ответы (1)


Это не очень элегантное решение, но вы всегда можете сгенерировать код Python из строк с помощью команды exec вот так. Затем вы можете просто динамически сгенерировать строку для определения вашей функции и с помощью exec фактически создать функцию.

person Botond    schedule 05.11.2020