Неправильный ввод с scipy.optimize.curve_fit, многомерная регрессия, экспоненциальная функция - PullRequest
0 голосов
/ 21 мая 2018

Данные

df = pandas.read_csv(temp.csv, header=1)

def func(x1,x2,x3,a,b1,b2,b3,c):
    #return(a*np.exp(b1*x1)*np.exp(b2*x2)*np.exp(b3*x3)+c)
    return(a*np.exp(b1*x1) + b2*x2 + b3*x3 + c

def formula_tester(BIO, VAR1, VAR2, VAR3):
    X = scipy.array([VAR1, VAR2, VAR3])
    Y = scipy.array(BIO)
    popt, pcov = curve_fit(func, X, Y)
    return(popt)

Y = df['Biomass'] 
variable1 = df['F_cv']
variable2 = ln(df['F_d50'])
variable3 = ln(df['L_d50'])
parameters = formula_tester(Y, variable1, variable2, variable3)
parameters

Возвращает сообщение об ошибке

Неправильный ввод: N = 7 не должно превышать M = 3

Я прочитал Справку и несколько Стек Переполнение вопросов .Предыдущие ответы либо исправляют мелкие опечатки, либо оказываются бесполезными при попытке (np.concatenate).

Выполнение скрипта с помощью try / исключением, где кроме возвращает длины различных переменных массивов, показывает, что все имеют длину 162. Откуда исходит N = 7?И я подумал, что спрашиваю 5 параметров, а не 3. Возможно, экспоненциальная функция настроена неправильно?

1 Ответ

0 голосов
/ 21 мая 2018

Из документа curve_fit :

Функция модели, f (x,…).Он должен принимать независимую переменную в качестве первого аргумента, а параметры - в качестве отдельных оставшихся аргументов.

Здесь независимая переменная имеет три компонента.Модель должна выглядеть как

def func(x, a, b1, b2, b3, c):
    return a*np.exp(b1*x[0]) + b2*x[1] + b3*x[2] + c
...