From 5f667c8680aa17caf7bb215081e4e3e13d1e3678 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=C3=B4nio=20C=C3=A2ndido?= Date: Thu, 30 May 2019 11:36:55 -0300 Subject: [PATCH] Bugfixes and improvements on benchmarking methods --- pyFTS/benchmarks/quantreg.py | 8 ++++---- pyFTS/common/Util.py | 6 ++---- pyFTS/models/ensemble/ensemble.py | 1 + pyFTS/tests/general.py | 17 +++++++++++------ 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/pyFTS/benchmarks/quantreg.py b/pyFTS/benchmarks/quantreg.py index 91c7cb6..a2d5bcd 100644 --- a/pyFTS/benchmarks/quantreg.py +++ b/pyFTS/benchmarks/quantreg.py @@ -97,7 +97,7 @@ class QuantileRegression(fts.FTS): def forecast_ahead_interval(self, ndata, steps, **kwargs): - smoothing = kwargs.get("smoothing", 0.1) + smoothing = kwargs.get("smoothing", 0.01) l = len(ndata) @@ -113,7 +113,7 @@ class QuantileRegression(fts.FTS): tmpk = k-self.order - ret.append([intl[0]*(1 + (tmpk*smoothing)), intl[1]*(1 + (tmpk*smoothing))]) + ret.append([intl[0]*(1 - (tmpk*smoothing)), intl[1]*(1 + (tmpk*smoothing))]) return ret[-steps:] @@ -139,7 +139,7 @@ class QuantileRegression(fts.FTS): return ret def forecast_ahead_distribution(self, ndata, steps, **kwargs): - smoothing = kwargs.get("smoothing", 0.1) + smoothing = kwargs.get("smoothing", 0.01) l = len(ndata) @@ -158,7 +158,7 @@ class QuantileRegression(fts.FTS): for qt in self.dist_qt: intl1 = self.point_to_interval(nmeans[k - self.order: k], qt[0], qt[1]) tmpk = k - self.order - intl2 = [intl1[0] * (1 + (tmpk * smoothing)), intl1[1] * (1 + (tmpk * smoothing))] + intl2 = [intl1[0] * (1 - (tmpk * smoothing)), intl1[1] * (1 + (tmpk * smoothing))] intervals.append(intl2) dist.append_interval(intervals) diff --git a/pyFTS/common/Util.py b/pyFTS/common/Util.py index 8159d8d..5f48c39 100644 --- a/pyFTS/common/Util.py +++ b/pyFTS/common/Util.py @@ -177,8 +177,6 @@ def plot_distribution2(probabilitydist, data, **kwargs): import matplotlib.colorbar as cbar import matplotlib.cm as cm - order = kwargs.get('order', 1) - ax = kwargs.get('ax',None) if ax is None: fig, ax = plt.subplots(nrows=1, ncols=1, figsize=[15, 5]) @@ -188,7 +186,7 @@ def plot_distribution2(probabilitydist, data, **kwargs): cmap = kwargs.get('cmap','Blues') cmap = plt.get_cmap(cmap) - start_at = kwargs.get('start_at',0) + order - 1 + start_at = kwargs.get('start_at',0) x = [k + start_at for k in range(l + 1)] @@ -275,7 +273,7 @@ def plot_interval2(intervals, data, **kwargs): if ax is None: fig, ax = plt.subplots(nrows=1, ncols=1, figsize=[15, 5]) - for k in np.arange(0, start_at-1): + for k in np.arange(0, start_at): intervals.insert(0, [None,None]) intervals.insert(start_at, [data[start_at], data[start_at]]) diff --git a/pyFTS/models/ensemble/ensemble.py b/pyFTS/models/ensemble/ensemble.py index c429ae3..0e26f05 100644 --- a/pyFTS/models/ensemble/ensemble.py +++ b/pyFTS/models/ensemble/ensemble.py @@ -303,6 +303,7 @@ class SimpleEnsembleFTS(EnsembleFTS): """Possible variations of number of partitions on internal models""" self.orders = kwargs.get('orders', [1,2,3]) """Possible variations of order on internal models""" + self.uod_clip = False def train(self, data, **kwargs): for k in self.partitions: diff --git a/pyFTS/tests/general.py b/pyFTS/tests/general.py index 1dd4c14..971e76f 100644 --- a/pyFTS/tests/general.py +++ b/pyFTS/tests/general.py @@ -12,6 +12,7 @@ from pyFTS.common import Util as cUtil, FuzzySet from pyFTS.partitioners import Grid, Entropy, Util as pUtil, Simple from pyFTS.benchmarks import benchmarks as bchmk, Measures from pyFTS.models import chen, yu, cheng, ismailefendi, hofts, pwfts, tsaur, song, sadaei +from pyFTS.models.ensemble import ensemble from pyFTS.common import Transformations, Membership from pyFTS.benchmarks import arima, quantreg, BSTS from pyFTS.fcm import fts, common, GA @@ -20,17 +21,19 @@ from pyFTS.data import Enrollments, TAIEX data = TAIEX.get_data() -train = data[:500] -test = data[500:1000] +train = data[:800] +test = data[800:1000] -model = quantreg.QuantileRegression(order=1, dist=True) +model = ensemble.SimpleEnsembleFTS(fts_method=hofts.HighOrderFTS) +#model = quantreg.QuantileRegression(order=2, dist=True) +#model = arima.ARIMA(order = (2,0,0)) model.fit(train) horizon=5 #points = model.predict(test[:10], type='point', steps_ahead=horizon) -intervals = model.predict(test[:10], type='interval', alpha=.05, smoothing=0.01, steps_ahead=horizon) +intervals = model.predict(test[:10], type='interval', alpha=.05, steps_ahead=horizon) print(test[:10]) print(intervals) distributions = model.predict(test[:10], type='distribution', steps_ahead=horizon, num_bins=100) @@ -39,8 +42,10 @@ distributions = model.predict(test[:10], type='distribution', steps_ahead=horizo fig, ax = plt.subplots(nrows=1, ncols=1,figsize=[15,5]) ax.plot(test[:10], label='Original',color='black') -cUtil.plot_interval2(intervals, test[:10], start_at=3, ax=ax) -cUtil.plot_distribution2(distributions, test[:10], start_at=2, ax=ax, cmap="Blues") +cUtil.plot_interval2(intervals, test[:10], start_at=model.order, ax=ax) +cUtil.plot_distribution2(distributions, test[:10], start_at=model.order, ax=ax, cmap="Blues") + +print("") ''' model = fts.FCM_FTS(partitioner=fs, order=1)