Как использовать scipy и matplotlib, чтобы соответствовать функции обратной сигмоиды - PullRequest
0 голосов
/ 08 мая 2019

У меня есть несколько точек данных, которые я смог успешно построить на графике, но теперь я хотел бы подогнать кривую к данным. Я посмотрел другие ответы на stackoverflow и нашел несколько вопросов, но не могу их реализовать. Я знаю, что функция обратного сигмоида.

Я хотел бы использовать это уравнение Хилла: https://imgur.com/rYqEASm

До сих пор я пытался использовать функцию curve_fit() из пакета scipy для поиска параметров, но мой код всегда ломался.

import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

x = np.array([1, 1.90, 7.70, 30.10, 120.40, 481.60, 1925.00, 7700.00])
y = np.array([4118.47, 4305.79, 4337.47, 4838.11, 2660.76, 1365.05, 79.21, -16.40])

def fit_hill(t,b,s,i,h):
    return b + ((t-b)/(1 + (((x * s)/i)**-h)))

plt.plot(x,y, 'o')
plt.xscale('log')
plt.show()

params = curve_fit(fit_hill, x, y)

[t,b,s,i,h] = params[0]

1 Ответ

1 голос
/ 09 мая 2019

fit_hill должен иметь 6 параметров.(см. https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html)

fit_hill (x, t, b, s, i, h). Вы должны попытаться дать начальное предположение для параметров.

Например, в вашей модели, когдах = 0, значение равно т. Таким образом, вы можете установить значение х = 0 в качестве оценки для т.

import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

x = np.array([1, 1.90, 7.70, 30.10, 120.40, 481.60, 1925.00])
y = np.array([4118.47, 4305.79, 4337.47, 4838.11, 2660.76, 1365.05, 79.21])

def fit_hill(x,t,b,s,i,h):
    return b + ((t-b)/(1 + (((x * s)/i)**-h)))

plt.plot(x,y, 'o')
popt,pcov = curve_fit(fit_hill, x, y,(4118,200,1,1900,-2))
plt.plot(x,fit_hill(x,*popt),'+')

plt.xscale('log')
plt.show()

Вы нарисовали свою модель для визуализации, подходит ли она для ваших данных?

s и i, используемые только в s / i, могут быть заменены на одну переменную в вашей модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...