Почему optimize.curve_fit не работает с меньшими наборами данных? - PullRequest
0 голосов
/ 30 апреля 2020

Я выполнил кусочную линейную подгонку для моих данных H2O и CO2. Он отлично работает для набора данных с 288 точками данных, но не для набора данных с 144 точками данных. Мой код выглядит следующим образом:

#Piecewiselinear fit
x = np.array(H2O)
y = np.array(CO2)
p , e = optimize.curve_fit(piecewise_linear, x, y)
xd = np.linspace(0, 1, 1000)

При наборе данных 144 точек данных, единственная разница возникает при выполнении optimize.curve_fit. Я получаю следующее сообщение OptimizeWarning: Covariance of the parameters could not be estimated category=OptimizeWarning. И это разные графики: Правильное соответствие (288 баллов) и Неправильное соответствие (144 балла)

Что идет не так? Как я могу решить это?

1 Ответ

0 голосов
/ 01 мая 2020

Я закончил тем, что изменил подход с общего

def piecewise_linear(x, x0, y0, k1, k2):
    return np.piecewise(x, [x < x0], [lambda x:k1*x + y0-k1*x0, lambda x:k2*x + y0-k2*x0])

на

my_pwlf = pwlf.PiecewiseLinFit(x, y)
breaks = my_pwlf.fit(2) #if you want multiple breakpoints change the number in the bracket.
print(breaks)

x_hat = np.linspace(x.min(), x.max(), 100)
y_hat = my_pwlf.predict(x_hat)

Таким образом, я также получил значение x точки останова.

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