Я хочу смоделировать следующую кривую:
![enter image description here](https://i.stack.imgur.com/ZMdtf.png)
Чтобы выполнить это, я использую Curve_fit от SciPy, подгоняя экспоненциальную функцию.
def exponenial_func(x, a, b, c):
return a * b**(c*x)
popt, pcov = curve_fit(exponenial_func, x, y, p0=(1,2,2),
bounds=((0, 0, 0), (np.inf, np.inf, np.inf)))
Когда я впервые это делаю, я получаю это:
![enter image description here](https://i.stack.imgur.com/YFm5F.png)
Что минимизирует остатки, каждая точка с тот же уровень важности. Я хочу получить кривую, которая придает большее значение последним значениям кривой (например, от оси x 30), чем первым значениям, поэтому она лучше подходит к концу кривой, чем к началу этого
Я знаю, что отсюда есть много способов приблизиться к этому (прежде всего, определите, какое значение я хочу придать каждому из остатков). Мой вопрос здесь заключается в том, чтобы получить представление о том, как к этому приблизиться.
Одна идея, которая у меня возникла, - это изменить значение сигмы, чтобы взвесить каждую точку данных ее обратным значением.
popt, pcov = curve_fit(exponenial_func, x, y, p0=(1,2,2),
bounds=((0, 0, 0), (np.inf, np.inf, np.inf)),
sigma=1/y)
В этом случае я получаю что-то похожее на то, что искал:
![enter image description here](https://i.stack.imgur.com/zPZe0.png)
Это не выглядит плохо, но я ищу другой способ сделать это, чтобы я мог «контролировать» каждую из точек данных, например, взвешивать все остатки линейным способом или экспоненциально, или даже выбирать его вручную (а не все их обратное, как в предыдущем случае).
Заранее спасибо