Bugfixes in FTS, HOFTS and CVFTS

This commit is contained in:
Petrônio Cândido 2018-08-02 11:13:24 -03:00
parent c6f9af8e00
commit f5652f7029
6 changed files with 64 additions and 32 deletions

View File

@ -332,11 +332,11 @@ def get_point_statistics(data, model, **kwargs):
if not isinstance(forecasts, (list, np.ndarray)):
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(mape(ndata[model.max_lag:], nforecasts), 2))
ret.append(np.round(UStatistic(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:], forecasts), 2))
ret.append(np.round(UStatistic(ndata[model.max_lag:], forecasts), 2))
else:
steps_ahead_sampler = kwargs.get('steps_ahead_sampler', 1)
nforecasts = []

View File

@ -7,6 +7,7 @@
import datetime
import time
from copy import deepcopy
import traceback
import matplotlib as plt
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)
synthesis_method(dataset, tag, job, conn)
except Exception as ex:
print("Error evaluating model " + model.shortname)
print(ex)
print('EXCEPTION! ', model.shortname, model.order)
traceback.print_exc()
else:
job = cluster.submit(deepcopy(model), None, train, test, **kwargs)
jobs.append(job)
@ -279,11 +280,14 @@ def sliding_window_benchmarks(data, windowsize, train=0.8, **kwargs):
if progress:
progressbar.update(1)
try:
print(model.shortname, model.order, partitioner.name,
partitioner.partitions, str(partitioner.transformation))
job = experiment_method(deepcopy(model), deepcopy(partitioner), train, test, **kwargs)
synthesis_method(dataset, tag, job, conn)
except Exception as ex:
print("Error evaluating model " + model.shortname + " " + str(partitioner))
print(ex)
print('EXCEPTION! ',model.shortname, model.order, partitioner.name,
partitioner.partitions, str(partitioner.transformation))
traceback.print_exc()
else:
job = cluster.submit(deepcopy(model), deepcopy(partitioner), train, test, **kwargs)
job.id = id # associate an ID to identify jobs (if needed later)

View File

@ -144,7 +144,7 @@ class FTS(object):
if not self.is_multivariate:
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

View File

@ -38,6 +38,7 @@ class ConditionalVarianceFTS(hofts.HighOrderFTS):
self.shortname = "CVFTS "
self.detail = ""
self.flrgs = {}
self.is_high_order = False
if self.partitioner is not None:
self.append_transformation(self.partitioner.transformation)

View File

@ -132,3 +132,19 @@ class SimpleNonStationaryPartitioner(partitioner.Partitioner):
def build(self, data):
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

View File

@ -1,7 +1,7 @@
import os
import numpy as np
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.partitioners import Grid, Entropy
import matplotlib.pyplot as plt
@ -33,36 +33,47 @@ tdiff = Transformations.Differential(1)
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.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},
'IMCV': {'BoxCox(0)': 22, 'Differential(1)': 9, 'None': 25},
'IMIV': {'BoxCox(0)': 27, 'Differential(1)': 11, 'None': 6},
'NASDAQ': {'BoxCox(0)': 39, 'Differential(1)': 10, 'None': 34},
'SP500': {'BoxCox(0)': 38, 'Differential(1)': 15, 'None': 39},
'TAIEX': {'BoxCox(0)': 36, 'Differential(1)': 18, 'None': 38}}
partitions = {'CMIV': {'BoxCox(0)': 36, 'Differential(1)': 11, 'None': 8},
'IMCV': {'BoxCox(0)': 36, 'Differential(1)': 20, 'None': 16},
'IMIV': {'BoxCox(0)': 39, 'Differential(1)': 12, 'None': 6},
'IMIV0': {'BoxCox(0)': 39, 'Differential(1)': 12, 'None': 3},
'NASDAQ': {'BoxCox(0)': 39, 'Differential(1)': 13, 'None': 36},
'SP500': {'BoxCox(0)': 33, 'Differential(1)': 7, 'None': 33},
'TAIEX': {'BoxCox(0)': 39, 'Differential(1)': 31, 'None': 33}}
tag = 'benchmarks'
'''
for ds in datasets.keys():
dataset = datasets[ds]
def nsfts_partitioner_builder(data, npart, transformation):
from pyFTS.partitioners import Grid
from pyFTS.models.nonstationary import perturbation, partitioners
for tf in transformations.keys():
transformation = transformations[tf]
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
partitioning = partitions[ds][tf]
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():
dataset = datasets[ds]
@ -75,7 +86,7 @@ for ds in datasets.keys():
bchmk.sliding_window_benchmarks(dataset, 2000, train=0.2, inc=0.2,
benchmark_models=False,
methods=[cvfts.ConditionalVarianceFTS],
partitioners_methods=[nsfts_partitioner_builder],
partitioners_methods=[nspart.simplenonstationary_gridpartitioner_builder],
transformations=[transformation],
partitions=[partitioning],
progress=False, type='point',