Как подогнать кривую к этим данным, используя scipy curve_fit - PullRequest
0 голосов
/ 28 февраля 2020

Я надеюсь, что кто-то может мне понять, где я ошибаюсь, подгоняя кривую к этим данным. Я использую метод в этой ссылке и поэтому имею следующий код:

def sigmoid(x, L, x0, k, b):
    y = L / (1 + np.exp(-k*(x-x0)))+b
    return y

p0 = [max(y1), np.median(x2), 1, min(y1)]

popt, pcov = curve_fit(sigmoid, xdata=x2, ydata=y1, p0=p0, method='dogbox')

predictions = sigmoid(x2, *popt)

И моя построенная "кривая" выглядит так:

screenshot

Но я ожидаю более S-образную кривую. Я экспериментировал с разными значениями p0, но не получил требуемого результата (и, если честно, я не уверен, как мне найти идеальные начальные параметры).

Использование p0 = [max(y1), np.median(x2), 0.4, 1] и method='trf Я получил следующее, которое ближе, но все еще не хватает кривой в середине?

enter image description here

Любая помощь очень ценится!

1 Ответ

1 голос
/ 29 февраля 2020

Это потому, что ваша ось Y является логарифмической шкалой. Если вы измените ось Y на линейную, вы увидите, что подгонка на самом деле довольно хорошая.

...