Итак, у меня было несколько точек в информационном кадре, которые заставили меня поверить, что я имею дело со степенной кривой. После некоторого поиска в Google, я использовал то, что нашел в этом посте до go о подгонке кривой.
def func_powerlaw(x, m, c, c0):
return c0 + x**m * c
target_func = func_powerlaw
X = np.array(selection_to_feed.selection[1:])
y = np.array(selection_to_feed.avg_feed_size[1:])
popt, pcov = curve_fit(func_powerlaw, X, y, p0 =np.asarray([-1,10**5,0]))
curvex = np.linspace(0,5000,1000)
curvey = target_func(curvex, *popt)
plt.figure(figsize=(10, 5))
plt.plot(curvex, curvey, '--')
plt.plot(X, y, 'ro')
plt.legend()
plt.show()
Вот результат:
Кривая
Проблема в том, что подгонка кривой приводит к отрицательным значениям для первых нескольких значений (как вы можете видеть на синей линии), и в фактических отношениях отрицательные значения Y не могут существовать.
Несколько вопросов:
- Что я могу сделать, чтобы никакие отрицательные значения Y не могли быть выведены? Действительно, X 0 также должен иметь значение Y 0.
- Является ли кривая степенного закона правильной? Как бы вы описали эту кривую?
Спасибо!