эффективно использовать сглаживающий сплайн для прогнозов - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть временной ряд, заданный двумя векторами

x_1 = np.array([119., 122., 129., 142., 159., 162., 179., 182., 189., 194., 197.,
              199., 202., 204., 209., 214., 217., 219., 222., 224., 229., 234.,
              237., 242., 244., 257., 269., 274., 277., 279., 299., 327., 339.])

 y_1 = np.array([0.70, 0.78, 0.80, 0.84, 0.84, 0.83, 0.15, 0.16, 0.26, 0.42,
               0.52, 0.53, 0.60, 0.64, 0.69, 0.56, 0.58, 0.57, 0.60, 0.77,
               0.77, 0.72, 0.77, 0.78 , 0.75, 0.19, 0.24, 0.27, 0.28, 0.29,
               0.31, 0.28, 0.26])

Я использую сглаживающий сплайн для подгонки модели к временному ряду:

x_basis = cr(x_1, df=freedom_df, constraints='center')

# Fit model to the data
model = LinearRegression().fit(x_basis, y_1)

# Get estimates
y_prediction = model.predict(x_basis)

пока все хорошо.

На самом деле у меня так много разных временных рядов. У каждого разная длина. таким образом, x_basis и, следовательно, y_prediction будут иметь различную длину. поскольку моя цель - включить их в модель машинного обучения позже, все они, как входные данные, должны иметь одинаковую длину. Я хочу, чтобы они были каждые две недели:

X_const = np.arange(start=1, stop=365, step=14, dtype=None)

Как я могу сделать хороший прогноз, используя обученную модель сплайна сглаживания для X_const?

Я не получаю хороший результат Когда Я делаю следующее (model.predict ожидает двумерный ввод, поэтому я не могу просто вставить туда X_const.):

x_const_basis = cr(X_const, df=freedom_df, constraints='center')
x_const_basis = pd.DataFrame(x_const_basis)
y_const_pred = model.predict(x_const_basis)

Я хочу, чтобы черные точки были ближе к красным / фактическим значениям , любое предложение? the resulting plot

Если мы выполним простую линейную регрессию, мы получим что-то вроде y = 1.5x + 10; тогда мы можем использовать его, чтобы предсказать y для любого желаемого x. Но с этим сплайном это немного сбивает с толку. мы должны сгенерировать базу следующим образом: x_const_basis = cr(X_const, df=freedom_df, constraints='center'), и даже если в X_const есть некоторые x значения, близкие к исходным x значениям в x_1, прогнозы слишком разные.

импортированные пакеты:

import csv
import numpy as np
import pandas as pd
import geopandas as gpd
import sys
from IPython.display import Image
from shapely.geometry import Point, Polygon
from math import factorial
import datetime
import time
import scipy
import os, os.path

from statsmodels.sandbox.regression.predstd import wls_prediction_std
from sklearn.linear_model import LinearRegression
from patsy import cr

from pprint import pprint
import matplotlib.pyplot as plt
import seaborn as sb
...