Bugfixes and improvements on benchmarking methods

This commit is contained in:
Petrônio Cândido 2019-05-30 11:36:55 -03:00
parent 99c36fc5e9
commit 5f667c8680
4 changed files with 18 additions and 14 deletions

View File

@ -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)

View File

@ -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]])

View File

@ -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:

View File

@ -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)