У меня есть данные, формирующие кривую. Я хочу подогнать его под предсказание следующих данных: сюжет
Зеленая линия - это реальные данные. Красные точки - это образцы, которые я использую для прогнозирования остальных данных. Синяя линия - результат моего прогноза.
Для этого я использую это:
fig = plt.figure('Line and predict')
plt.clf()
x = np.arange(0, len(peaks), 1)
plt.plot(x, peaks, 'r.')
real_peaks = np.flipud(np.array([372, 394, 418, 444, 474, 504, 538, 574, 614, 657, 705, 758, 817, 882, 955, 1039, 1133, 1241, 1365, 1509]))
peaks = np.flipud(np.array([504, 538, 574, 614, 657, 705, 758, 817, 882, 955, 1039, 1133, 1241, 1365, 1509]))
for i in range(6):
print('peaks', peaks)
pfit = self.__fit_polynome__(peaks)
axis = np.linspace(0, len(peaks) + 1, 200)
plt.xlabel('line')
plt.ylabel('horizontal lines position')
x = np.arange(0, len(peaks), 1)
plt.plot(x_real_peaks, real_peaks, 'g', axis, pfit(axis), 'b--')
plt.draw()
peaks = np. append(peaks, int(pfit(len(peaks))))
def __fit_polynome__(self, data):
x = np.arange(0, len(data), 1)
fit = np.polyfit(x, data, 4)
pfit = np.poly1d(fit)
return pfit
Поэтому я прогнозирую следующие данные и добавляю их в свои выборки, чтобы иметь возможность предсказать следующий. Как вы можете видеть на изображении, результат не идеален. Есть ли другой метод для достижения лучших результатов? Я пробовал UnivariateSpline или CubicSpline (scipy.interpolate), но это хуже всего.