Implementation of forecast_ahead in TimeVariant and IncrementalEnsemble methods
This commit is contained in:
parent
6c639545a3
commit
a094ba04d4
@ -63,6 +63,15 @@ class IncrementalEnsembleFTS(ensemble.EnsembleFTS):
|
||||
|
||||
def forecast(self, data, **kwargs):
|
||||
l = len(data)
|
||||
no_update = kwargs.get('no_update', False)
|
||||
if no_update:
|
||||
ret = []
|
||||
for k in np.arange(self.order, l+1):
|
||||
sample = data[k-self.order: k]
|
||||
tmp = self.get_models_forecasts(sample)
|
||||
point = self.get_point(tmp)
|
||||
ret.append(point)
|
||||
return ret
|
||||
|
||||
data_window = []
|
||||
|
||||
@ -88,6 +97,27 @@ class IncrementalEnsembleFTS(ensemble.EnsembleFTS):
|
||||
|
||||
return ret
|
||||
|
||||
def forecast_ahead(self, data, steps, **kwargs):
|
||||
if len(data) < self.order:
|
||||
return data
|
||||
|
||||
if isinstance(data, np.ndarray):
|
||||
data = data.tolist()
|
||||
|
||||
start = kwargs.get('start_at',0)
|
||||
|
||||
ret = data[:start+self.order]
|
||||
for k in np.arange(start+self.order, steps+start+self.order):
|
||||
tmp = self.forecast(ret[k-self.order:k], no_update=True, **kwargs)
|
||||
|
||||
if isinstance(tmp,(list, np.ndarray)):
|
||||
tmp = tmp[-1]
|
||||
|
||||
ret.append(tmp)
|
||||
data.append(tmp)
|
||||
|
||||
return ret[-steps:]
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -55,6 +55,11 @@ class Retrainer(fts.FTS):
|
||||
def forecast(self, data, **kwargs):
|
||||
l = len(data)
|
||||
|
||||
no_update = kwargs.get('no_update',False)
|
||||
|
||||
if no_update:
|
||||
return self.model.predict(data, **kwargs)
|
||||
|
||||
horizon = self.window_length + self.order
|
||||
|
||||
ret = []
|
||||
@ -73,13 +78,34 @@ class Retrainer(fts.FTS):
|
||||
|
||||
return ret
|
||||
|
||||
def forecast_ahead(self, data, steps, **kwargs):
|
||||
if len(data) < self.order:
|
||||
return data
|
||||
|
||||
if isinstance(data, np.ndarray):
|
||||
data = data.tolist()
|
||||
|
||||
start = kwargs.get('start_at',0)
|
||||
|
||||
ret = data[:start+self.order]
|
||||
for k in np.arange(start+self.order, steps+start+self.order):
|
||||
tmp = self.forecast(ret[k-self.order:k], no_update=True, **kwargs)
|
||||
|
||||
if isinstance(tmp,(list, np.ndarray)):
|
||||
tmp = tmp[-1]
|
||||
|
||||
ret.append(tmp)
|
||||
data.append(tmp)
|
||||
|
||||
return ret[-steps:]
|
||||
|
||||
def offset(self):
|
||||
return self.max_lag
|
||||
|
||||
def __str__(self):
|
||||
"""String representation of the model"""
|
||||
|
||||
return str(this.model)
|
||||
return str(self.model)
|
||||
|
||||
def __len__(self):
|
||||
"""
|
||||
|
@ -23,10 +23,44 @@ from pyFTS.common import Transformations
|
||||
from pyFTS.partitioners import Grid, Util as pUtil
|
||||
from pyFTS.benchmarks import benchmarks as bchmk
|
||||
from pyFTS.models import chen, hofts, pwfts, hwang
|
||||
from pyFTS.models.incremental import TimeVariant, IncrementalEnsemble
|
||||
|
||||
train = dataset[:1000]
|
||||
test = dataset[1000:]
|
||||
|
||||
window = 100
|
||||
|
||||
batch = 10
|
||||
|
||||
num_models = 3
|
||||
|
||||
model1 = TimeVariant.Retrainer(partitioner_method=Grid.GridPartitioner, partitioner_params={'npart': 35},
|
||||
fts_method=pwfts.ProbabilisticWeightedFTS, fts_params={}, order=1,
|
||||
batch_size=batch, window_length=window * num_models)
|
||||
|
||||
model2 = IncrementalEnsemble.IncrementalEnsembleFTS(partitioner_method=Grid.GridPartitioner,
|
||||
partitioner_params={'npart': 35},
|
||||
fts_method=pwfts.ProbabilisticWeightedFTS, fts_params={}, order=1,
|
||||
batch_size=int(batch / 3), window_length=window,
|
||||
num_models=num_models)
|
||||
|
||||
model1.fit(train)
|
||||
model2.fit(train)
|
||||
|
||||
print(len(test))
|
||||
'''
|
||||
forecasts1 = model1.predict(test[:-10])
|
||||
print(len(forecasts1))
|
||||
forecasts1 = model1.predict(test[-10:], steps_ahead=10)
|
||||
print(len(forecasts1))
|
||||
'''
|
||||
forecasts2 = model2.predict(test[:-10])
|
||||
print(len(forecasts2))
|
||||
forecasts2 = model2.predict(test[-10:], steps_ahead=10)
|
||||
print(len(forecasts2))
|
||||
|
||||
|
||||
'''
|
||||
from pyFTS.models.nonstationary import partitioners as nspart, nsfts, honsfts
|
||||
fs = nspart.simplenonstationary_gridpartitioner_builder(data=train,npart=35,transformation=None)
|
||||
print(fs)
|
||||
@ -35,4 +69,5 @@ model = nsfts.WeightedNonStationaryFTS(partitioner=fs)
|
||||
model.fit(train)
|
||||
print(model)
|
||||
forecasts = model.predict(test)
|
||||
#print(forecasts)
|
||||
#print(forecasts)
|
||||
'''
|
Loading…
Reference in New Issue
Block a user