Bugfixes in FTS, HOFTS and CVFTS
This commit is contained in:
parent
c6f9af8e00
commit
f5652f7029
@ -332,11 +332,11 @@ def get_point_statistics(data, model, **kwargs):
|
|||||||
if not isinstance(forecasts, (list, np.ndarray)):
|
if not isinstance(forecasts, (list, np.ndarray)):
|
||||||
forecasts = [forecasts]
|
forecasts = [forecasts]
|
||||||
|
|
||||||
nforecasts = np.array(forecasts[:-1])
|
forecasts = np.array(forecasts[:-1])
|
||||||
|
|
||||||
ret.append(np.round(rmse(ndata[model.max_lag:], nforecasts), 2))
|
ret.append(np.round(rmse(ndata[model.max_lag:], forecasts), 2))
|
||||||
ret.append(np.round(mape(ndata[model.max_lag:], nforecasts), 2))
|
ret.append(np.round(mape(ndata[model.max_lag:], forecasts), 2))
|
||||||
ret.append(np.round(UStatistic(ndata[model.max_lag:], nforecasts), 2))
|
ret.append(np.round(UStatistic(ndata[model.max_lag:], forecasts), 2))
|
||||||
else:
|
else:
|
||||||
steps_ahead_sampler = kwargs.get('steps_ahead_sampler', 1)
|
steps_ahead_sampler = kwargs.get('steps_ahead_sampler', 1)
|
||||||
nforecasts = []
|
nforecasts = []
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
import datetime
|
import datetime
|
||||||
import time
|
import time
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
import traceback
|
||||||
|
|
||||||
import matplotlib as plt
|
import matplotlib as plt
|
||||||
import matplotlib.cm as cmx
|
import matplotlib.cm as cmx
|
||||||
@ -245,8 +246,8 @@ def sliding_window_benchmarks(data, windowsize, train=0.8, **kwargs):
|
|||||||
job = experiment_method(deepcopy(model), None, train, test, **kwargs)
|
job = experiment_method(deepcopy(model), None, train, test, **kwargs)
|
||||||
synthesis_method(dataset, tag, job, conn)
|
synthesis_method(dataset, tag, job, conn)
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print("Error evaluating model " + model.shortname)
|
print('EXCEPTION! ', model.shortname, model.order)
|
||||||
print(ex)
|
traceback.print_exc()
|
||||||
else:
|
else:
|
||||||
job = cluster.submit(deepcopy(model), None, train, test, **kwargs)
|
job = cluster.submit(deepcopy(model), None, train, test, **kwargs)
|
||||||
jobs.append(job)
|
jobs.append(job)
|
||||||
@ -279,11 +280,14 @@ def sliding_window_benchmarks(data, windowsize, train=0.8, **kwargs):
|
|||||||
if progress:
|
if progress:
|
||||||
progressbar.update(1)
|
progressbar.update(1)
|
||||||
try:
|
try:
|
||||||
|
print(model.shortname, model.order, partitioner.name,
|
||||||
|
partitioner.partitions, str(partitioner.transformation))
|
||||||
job = experiment_method(deepcopy(model), deepcopy(partitioner), train, test, **kwargs)
|
job = experiment_method(deepcopy(model), deepcopy(partitioner), train, test, **kwargs)
|
||||||
synthesis_method(dataset, tag, job, conn)
|
synthesis_method(dataset, tag, job, conn)
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print("Error evaluating model " + model.shortname + " " + str(partitioner))
|
print('EXCEPTION! ',model.shortname, model.order, partitioner.name,
|
||||||
print(ex)
|
partitioner.partitions, str(partitioner.transformation))
|
||||||
|
traceback.print_exc()
|
||||||
else:
|
else:
|
||||||
job = cluster.submit(deepcopy(model), deepcopy(partitioner), train, test, **kwargs)
|
job = cluster.submit(deepcopy(model), deepcopy(partitioner), train, test, **kwargs)
|
||||||
job.id = id # associate an ID to identify jobs (if needed later)
|
job.id = id # associate an ID to identify jobs (if needed later)
|
||||||
|
@ -144,7 +144,7 @@ class FTS(object):
|
|||||||
|
|
||||||
if not self.is_multivariate:
|
if not self.is_multivariate:
|
||||||
kwargs['type'] = type
|
kwargs['type'] = type
|
||||||
ret = self.apply_inverse_transformations(ret, params=[data[self.order - 1:]], **kwargs)
|
ret = self.apply_inverse_transformations(ret, params=[data[self.max_lag - 1:]], **kwargs)
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@ -38,6 +38,7 @@ class ConditionalVarianceFTS(hofts.HighOrderFTS):
|
|||||||
self.shortname = "CVFTS "
|
self.shortname = "CVFTS "
|
||||||
self.detail = ""
|
self.detail = ""
|
||||||
self.flrgs = {}
|
self.flrgs = {}
|
||||||
|
self.is_high_order = False
|
||||||
if self.partitioner is not None:
|
if self.partitioner is not None:
|
||||||
self.append_transformation(self.partitioner.transformation)
|
self.append_transformation(self.partitioner.transformation)
|
||||||
|
|
||||||
|
@ -132,3 +132,19 @@ class SimpleNonStationaryPartitioner(partitioner.Partitioner):
|
|||||||
|
|
||||||
def build(self, data):
|
def build(self, data):
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def simplenonstationary_gridpartitioner_builder(data, npart, transformation):
|
||||||
|
from pyFTS.partitioners import Grid
|
||||||
|
from pyFTS.models.nonstationary import perturbation, partitioners
|
||||||
|
|
||||||
|
tmp_fs = Grid.GridPartitioner(data=data, npart=npart, transformation=transformation)
|
||||||
|
fs = partitioners.SimpleNonStationaryPartitioner(data, tmp_fs,
|
||||||
|
location=perturbation.polynomial,
|
||||||
|
location_params=[1, 0],
|
||||||
|
location_roots=0,
|
||||||
|
width=perturbation.polynomial,
|
||||||
|
width_params=[1, 0],
|
||||||
|
width_roots=0)
|
||||||
|
return fs
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import os
|
import os
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from pyFTS.common import Membership, Transformations
|
from pyFTS.common import Membership, Transformations
|
||||||
from pyFTS.models.nonstationary import common, perturbation, partitioners, util
|
from pyFTS.models.nonstationary import common, perturbation, partitioners as nspart, util
|
||||||
from pyFTS.models.nonstationary import nsfts, cvfts
|
from pyFTS.models.nonstationary import nsfts, cvfts
|
||||||
from pyFTS.partitioners import Grid, Entropy
|
from pyFTS.partitioners import Grid, Entropy
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
@ -33,36 +33,47 @@ tdiff = Transformations.Differential(1)
|
|||||||
|
|
||||||
boxcox = Transformations.BoxCox(0)
|
boxcox = Transformations.BoxCox(0)
|
||||||
|
|
||||||
transformations = {'None': None, 'Differential(1)': tdiff, 'BoxCox(0)': boxcox }
|
transformations = {
|
||||||
|
'None': None,
|
||||||
|
'Differential(1)': tdiff,
|
||||||
|
'BoxCox(0)': boxcox
|
||||||
|
}
|
||||||
|
|
||||||
from pyFTS.partitioners import Grid, Util as pUtil
|
from pyFTS.partitioners import Grid, Util as pUtil
|
||||||
from pyFTS.benchmarks import benchmarks as bchmk
|
from pyFTS.benchmarks import benchmarks as bchmk
|
||||||
from pyFTS.models import chen
|
from pyFTS.models import chen, hofts, pwfts, hwang
|
||||||
|
|
||||||
partitions = {'CMIV': {'BoxCox(0)': 17, 'Differential(1)': 7, 'None': 13},
|
partitions = {'CMIV': {'BoxCox(0)': 36, 'Differential(1)': 11, 'None': 8},
|
||||||
'IMCV': {'BoxCox(0)': 22, 'Differential(1)': 9, 'None': 25},
|
'IMCV': {'BoxCox(0)': 36, 'Differential(1)': 20, 'None': 16},
|
||||||
'IMIV': {'BoxCox(0)': 27, 'Differential(1)': 11, 'None': 6},
|
'IMIV': {'BoxCox(0)': 39, 'Differential(1)': 12, 'None': 6},
|
||||||
'NASDAQ': {'BoxCox(0)': 39, 'Differential(1)': 10, 'None': 34},
|
'IMIV0': {'BoxCox(0)': 39, 'Differential(1)': 12, 'None': 3},
|
||||||
'SP500': {'BoxCox(0)': 38, 'Differential(1)': 15, 'None': 39},
|
'NASDAQ': {'BoxCox(0)': 39, 'Differential(1)': 13, 'None': 36},
|
||||||
'TAIEX': {'BoxCox(0)': 36, 'Differential(1)': 18, 'None': 38}}
|
'SP500': {'BoxCox(0)': 33, 'Differential(1)': 7, 'None': 33},
|
||||||
|
'TAIEX': {'BoxCox(0)': 39, 'Differential(1)': 31, 'None': 33}}
|
||||||
|
|
||||||
|
|
||||||
tag = 'benchmarks'
|
tag = 'benchmarks'
|
||||||
|
'''
|
||||||
|
for ds in datasets.keys():
|
||||||
|
dataset = datasets[ds]
|
||||||
|
|
||||||
def nsfts_partitioner_builder(data, npart, transformation):
|
for tf in transformations.keys():
|
||||||
from pyFTS.partitioners import Grid
|
transformation = transformations[tf]
|
||||||
from pyFTS.models.nonstationary import perturbation, partitioners
|
|
||||||
|
|
||||||
tmp_fs = Grid.GridPartitioner(data=data, npart=npart, transformation=transformation)
|
partitioning = partitions[ds][tf]
|
||||||
fs = partitioners.SimpleNonStationaryPartitioner(data, tmp_fs,
|
|
||||||
location=perturbation.polynomial,
|
|
||||||
location_params=[1, 0],
|
|
||||||
location_roots=0,
|
|
||||||
width=perturbation.polynomial,
|
|
||||||
width_params=[1, 0],
|
|
||||||
width_roots=0)
|
|
||||||
return fs
|
|
||||||
|
|
||||||
|
bchmk.sliding_window_benchmarks(dataset, 2000, train=0.2, inc=0.2,
|
||||||
|
methods=[
|
||||||
|
hwang.HighOrderFTS,
|
||||||
|
hofts.HighOrderFTS,
|
||||||
|
pwfts.ProbabilisticWeightedFTS],
|
||||||
|
#orders = [3],
|
||||||
|
benchmark_models=False,
|
||||||
|
transformations=[transformation],
|
||||||
|
partitions=[partitioning],
|
||||||
|
progress=False, type='point',
|
||||||
|
file="nsfts_benchmarks.db", dataset=ds, tag=tag)
|
||||||
|
'''
|
||||||
|
|
||||||
for ds in datasets.keys():
|
for ds in datasets.keys():
|
||||||
dataset = datasets[ds]
|
dataset = datasets[ds]
|
||||||
@ -75,7 +86,7 @@ for ds in datasets.keys():
|
|||||||
bchmk.sliding_window_benchmarks(dataset, 2000, train=0.2, inc=0.2,
|
bchmk.sliding_window_benchmarks(dataset, 2000, train=0.2, inc=0.2,
|
||||||
benchmark_models=False,
|
benchmark_models=False,
|
||||||
methods=[cvfts.ConditionalVarianceFTS],
|
methods=[cvfts.ConditionalVarianceFTS],
|
||||||
partitioners_methods=[nsfts_partitioner_builder],
|
partitioners_methods=[nspart.simplenonstationary_gridpartitioner_builder],
|
||||||
transformations=[transformation],
|
transformations=[transformation],
|
||||||
partitions=[partitioning],
|
partitions=[partitioning],
|
||||||
progress=False, type='point',
|
progress=False, type='point',
|
||||||
|
Loading…
Reference in New Issue
Block a user