- General refactoring to include **kwargs on methods signatures
- Ensemble FTS
This commit is contained in:
parent
cd2e2b7586
commit
728e8414b7
@ -3,12 +3,11 @@
|
|||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from statsmodels.tsa.arima_model import ARIMA as stats_arima
|
from statsmodels.tsa.arima_model import ARIMA as stats_arima
|
||||||
from statsmodels.tsa.arima_model import ARMA
|
|
||||||
from pyFTS import fts
|
from pyFTS import fts
|
||||||
|
|
||||||
|
|
||||||
class ARIMA(fts.FTS):
|
class ARIMA(fts.FTS):
|
||||||
def __init__(self, name):
|
def __init__(self, order, **kwargs):
|
||||||
super(ARIMA, self).__init__(1, "ARIMA")
|
super(ARIMA, self).__init__(1, "ARIMA")
|
||||||
self.name = "ARIMA"
|
self.name = "ARIMA"
|
||||||
self.detail = "Auto Regressive Integrated Moving Average"
|
self.detail = "Auto Regressive Integrated Moving Average"
|
||||||
@ -23,8 +22,6 @@ class ARIMA(fts.FTS):
|
|||||||
self.minOrder = 1
|
self.minOrder = 1
|
||||||
|
|
||||||
def train(self, data, sets, order=1, parameters=None):
|
def train(self, data, sets, order=1, parameters=None):
|
||||||
ndata = np.array(self.doTransformations(data))
|
|
||||||
|
|
||||||
if parameters is not None:
|
if parameters is not None:
|
||||||
self.p = parameters[0]
|
self.p = parameters[0]
|
||||||
self.d = parameters[1]
|
self.d = parameters[1]
|
||||||
@ -33,44 +30,25 @@ class ARIMA(fts.FTS):
|
|||||||
self.shortname = "ARIMA(" + str(self.p) + "," + str(self.d) + "," + str(self.q) + ")"
|
self.shortname = "ARIMA(" + str(self.p) + "," + str(self.d) + "," + str(self.q) + ")"
|
||||||
|
|
||||||
old_fit = self.model_fit
|
old_fit = self.model_fit
|
||||||
self.model = stats_arima(ndata, order=(self.p, self.d, self.q))
|
self.model = stats_arima(data, order=(self.p, self.d, self.q))
|
||||||
#try:
|
try:
|
||||||
self.model_fit = self.model.fit(disp=0)
|
self.model_fit = self.model.fit(disp=0)
|
||||||
#except:
|
except:
|
||||||
# try:
|
try:
|
||||||
# self.model = stats_arima(data, order=(self.p, self.d, self.q))
|
self.model = stats_arima(data, order=(self.p, self.d, self.q))
|
||||||
# self.model_fit = self.model.fit(disp=1)
|
self.model_fit = self.model.fit(disp=1)
|
||||||
# except:
|
except:
|
||||||
# self.model_fit = old_fit
|
self.model_fit = old_fit
|
||||||
|
|
||||||
#self.trained_data = data #.tolist()
|
self.trained_data = data #.tolist()
|
||||||
|
|
||||||
def ar(self, data):
|
def forecast(self, data, **kwargs):
|
||||||
return data.dot(self.model_fit.arparams)
|
|
||||||
|
|
||||||
def ma(self, data):
|
|
||||||
return data.dot(self.model_fit.maparams)
|
|
||||||
|
|
||||||
def forecast(self, data):
|
|
||||||
if self.model_fit is None:
|
if self.model_fit is None:
|
||||||
return np.nan
|
return np.nan
|
||||||
|
|
||||||
order = self.p
|
|
||||||
|
|
||||||
ndata = np.array(self.doTransformations(data))
|
|
||||||
|
|
||||||
l = len(ndata)
|
|
||||||
|
|
||||||
ret = []
|
ret = []
|
||||||
|
for t in data:
|
||||||
ar = np.array([self.ar(ndata[k - self.p: k]) for k in np.arange(self.p, l)])
|
output = self.model_fit.forecast()
|
||||||
|
ret.append( output[0] )
|
||||||
residuals = np.array([ar[k - self.p] - ndata[k] for k in np.arange(self.p, l)])
|
self.trained_data = np.append(self.trained_data, t) #.append(t)
|
||||||
|
self.train(self.trained_data,None,order=self.order, parameters=(self.p, self.d, self.q))
|
||||||
ma = np.array([self.ma(residuals[k - self.q : k]) for k in np.arange(self.q, len(ar)+1)])
|
return ret
|
||||||
|
|
||||||
ret = ar + ma
|
|
||||||
|
|
||||||
ret = self.doInverseTransformations(ret, params=[data[order - 1:]])
|
|
||||||
|
|
||||||
return ret
|
|
@ -773,7 +773,7 @@ def get_distribution_statistics(original, model, steps, resolution):
|
|||||||
ret = list()
|
ret = list()
|
||||||
try:
|
try:
|
||||||
_s1 = time.time()
|
_s1 = time.time()
|
||||||
densities1 = model.forecastAheadDistribution(original,steps,resolution, parameters=3)
|
densities1 = model.forecastAheadDistribution(original, steps, parameters=3)
|
||||||
_e1 = time.time()
|
_e1 = time.time()
|
||||||
ret.append(round(Measures.crps(original, densities1), 3))
|
ret.append(round(Measures.crps(original, densities1), 3))
|
||||||
ret.append(round(_e1 - _s1, 3))
|
ret.append(round(_e1 - _s1, 3))
|
||||||
@ -784,7 +784,7 @@ def get_distribution_statistics(original, model, steps, resolution):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
_s2 = time.time()
|
_s2 = time.time()
|
||||||
densities2 = model.forecastAheadDistribution(original, steps, resolution, parameters=2)
|
densities2 = model.forecastAheadDistribution(original, steps, parameters=2)
|
||||||
_e2 = time.time()
|
_e2 = time.time()
|
||||||
ret.append( round(Measures.crps(original, densities2), 3))
|
ret.append( round(Measures.crps(original, densities2), 3))
|
||||||
ret.append(round(_e2 - _s2, 3))
|
ret.append(round(_e2 - _s2, 3))
|
||||||
@ -823,8 +823,8 @@ def plotComparedIntervalsAhead(original, models, colors, distributions, time_fro
|
|||||||
|
|
||||||
for count, fts in enumerate(models, start=0):
|
for count, fts in enumerate(models, start=0):
|
||||||
if fts.hasDistributionForecasting and distributions[count]:
|
if fts.hasDistributionForecasting and distributions[count]:
|
||||||
density = fts.forecastAheadDistribution(original[time_from - fts.order:time_from],
|
density = fts.forecastAheadDistribution(original[time_from - fts.order:time_from], time_to,
|
||||||
time_to, resolution, parameters=option)
|
parameters=option)
|
||||||
|
|
||||||
Y = []
|
Y = []
|
||||||
X = []
|
X = []
|
||||||
|
@ -5,13 +5,13 @@ from pyFTS import fts
|
|||||||
|
|
||||||
|
|
||||||
class Naive(fts.FTS):
|
class Naive(fts.FTS):
|
||||||
def __init__(self, name):
|
def __init__(self, order, name, **kwargs):
|
||||||
super(Naive, self).__init__(1, "Naive " + name)
|
super(Naive, self).__init__(1, "Naive " + name)
|
||||||
self.name = "Naïve Model"
|
self.name = "Naïve Model"
|
||||||
self.detail = "Naïve Model"
|
self.detail = "Naïve Model"
|
||||||
self.benchmark_only = True
|
self.benchmark_only = True
|
||||||
self.isHighOrder = False
|
self.isHighOrder = False
|
||||||
|
|
||||||
def forecast(self, data):
|
def forecast(self, data, **kwargs):
|
||||||
return [k for k in data]
|
return [k for k in data]
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ from pyFTS import fts
|
|||||||
|
|
||||||
|
|
||||||
class QuantileRegression(fts.FTS):
|
class QuantileRegression(fts.FTS):
|
||||||
def __init__(self, name):
|
def __init__(self, order, **kwargs):
|
||||||
super(QuantileRegression, self).__init__(1, "QR")
|
super(QuantileRegression, self).__init__(1, "QR")
|
||||||
self.name = "QR"
|
self.name = "QR"
|
||||||
self.detail = "Quantile Regression"
|
self.detail = "Quantile Regression"
|
||||||
@ -38,7 +38,7 @@ class QuantileRegression(fts.FTS):
|
|||||||
def linearmodel(self,data,params):
|
def linearmodel(self,data,params):
|
||||||
return params[0] + sum([ data[k] * params[k+1] for k in np.arange(0, self.order) ])
|
return params[0] + sum([ data[k] * params[k+1] for k in np.arange(0, self.order) ])
|
||||||
|
|
||||||
def forecast(self, data):
|
def forecast(self, data, **kwargs):
|
||||||
ndata = np.array(self.doTransformations(data))
|
ndata = np.array(self.doTransformations(data))
|
||||||
l = len(ndata)
|
l = len(ndata)
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ class QuantileRegression(fts.FTS):
|
|||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def forecastInterval(self, data):
|
def forecastInterval(self, data, **kwargs):
|
||||||
|
|
||||||
ndata = np.array(self.doTransformations(data))
|
ndata = np.array(self.doTransformations(data))
|
||||||
|
|
||||||
|
4
chen.py
4
chen.py
@ -25,7 +25,7 @@ class ConventionalFLRG(object):
|
|||||||
|
|
||||||
|
|
||||||
class ConventionalFTS(fts.FTS):
|
class ConventionalFTS(fts.FTS):
|
||||||
def __init__(self, name):
|
def __init__(self, order, **kwargs):
|
||||||
super(ConventionalFTS, self).__init__(1, "CFTS " + name)
|
super(ConventionalFTS, self).__init__(1, "CFTS " + name)
|
||||||
self.name = "Conventional FTS"
|
self.name = "Conventional FTS"
|
||||||
self.detail = "Chen"
|
self.detail = "Chen"
|
||||||
@ -48,7 +48,7 @@ class ConventionalFTS(fts.FTS):
|
|||||||
flrs = FLR.generateNonRecurrentFLRs(tmpdata)
|
flrs = FLR.generateNonRecurrentFLRs(tmpdata)
|
||||||
self.flrgs = self.generateFLRG(flrs)
|
self.flrgs = self.generateFLRG(flrs)
|
||||||
|
|
||||||
def forecast(self, data):
|
def forecast(self, data, **kwargs):
|
||||||
|
|
||||||
ndata = np.array(self.doTransformations(data))
|
ndata = np.array(self.doTransformations(data))
|
||||||
|
|
||||||
|
12
ensemble.py
12
ensemble.py
@ -9,7 +9,7 @@ from pyFTS.common import FLR, FuzzySet, SortedCollection
|
|||||||
from pyFTS import fts
|
from pyFTS import fts
|
||||||
|
|
||||||
class EnsembleFTS(fts.FTS):
|
class EnsembleFTS(fts.FTS):
|
||||||
def __init__(self, name, update=True):
|
def __init__(self, order, name, **kwargs):
|
||||||
super(EnsembleFTS, self).__init__("Ensemble FTS")
|
super(EnsembleFTS, self).__init__("Ensemble FTS")
|
||||||
self.shortname = "Ensemble FTS " + name
|
self.shortname = "Ensemble FTS " + name
|
||||||
self.name = "Ensemble FTS"
|
self.name = "Ensemble FTS"
|
||||||
@ -25,7 +25,7 @@ class EnsembleFTS(fts.FTS):
|
|||||||
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def forecast(self, data):
|
def forecast(self, data, **kwargs):
|
||||||
|
|
||||||
ndata = np.array(self.doTransformations(data))
|
ndata = np.array(self.doTransformations(data))
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ class EnsembleFTS(fts.FTS):
|
|||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def forecastInterval(self, data):
|
def forecastInterval(self, data, **kwargs):
|
||||||
|
|
||||||
ndata = np.array(self.doTransformations(data))
|
ndata = np.array(self.doTransformations(data))
|
||||||
|
|
||||||
@ -53,10 +53,10 @@ class EnsembleFTS(fts.FTS):
|
|||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def forecastAhead(self, data, steps):
|
def forecastAhead(self, data, steps, **kwargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def forecastAheadInterval(self, data, steps):
|
def forecastAheadInterval(self, data, steps, **kwargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@ -88,6 +88,6 @@ class EnsembleFTS(fts.FTS):
|
|||||||
grid[k] += 1
|
grid[k] += 1
|
||||||
return grid
|
return grid
|
||||||
|
|
||||||
def forecastAheadDistribution(self, data, steps, resolution, parameters=2):
|
def forecastAheadDistribution(self, data, steps, **kwargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
14
fts.py
14
fts.py
@ -4,7 +4,7 @@ from pyFTS import tree
|
|||||||
from pyFTS.common import FuzzySet, SortedCollection
|
from pyFTS.common import FuzzySet, SortedCollection
|
||||||
|
|
||||||
class FTS(object):
|
class FTS(object):
|
||||||
def __init__(self, order, name):
|
def __init__(self, order, name, **kwargs):
|
||||||
self.sets = {}
|
self.sets = {}
|
||||||
self.flrgs = {}
|
self.flrgs = {}
|
||||||
self.order = order
|
self.order = order
|
||||||
@ -38,22 +38,22 @@ class FTS(object):
|
|||||||
|
|
||||||
return best
|
return best
|
||||||
|
|
||||||
def forecast(self, data):
|
def forecast(self, data, **kwargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def forecastInterval(self, data):
|
def forecastInterval(self, data, **kwargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def forecastDistribution(self, data):
|
def forecastDistribution(self, data, **kwargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def forecastAhead(self, data, steps):
|
def forecastAhead(self, data, steps, **kwargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def forecastAheadInterval(self, data, steps):
|
def forecastAheadInterval(self, data, steps, **kwargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def forecastAheadDistribution(self, data, steps):
|
def forecastAheadDistribution(self, data, steps, **kwargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def train(self, data, sets, order=1, parameters=None):
|
def train(self, data, sets, order=1, parameters=None):
|
||||||
|
4
hofts.py
4
hofts.py
@ -39,7 +39,7 @@ class HighOrderFLRG(object):
|
|||||||
|
|
||||||
|
|
||||||
class HighOrderFTS(fts.FTS):
|
class HighOrderFTS(fts.FTS):
|
||||||
def __init__(self, name):
|
def __init__(self, order, **kwargs):
|
||||||
super(HighOrderFTS, self).__init__(1, "HOFTS" + name)
|
super(HighOrderFTS, self).__init__(1, "HOFTS" + name)
|
||||||
self.name = "High Order FTS"
|
self.name = "High Order FTS"
|
||||||
self.shortname = "HOFTS" + name
|
self.shortname = "HOFTS" + name
|
||||||
@ -79,7 +79,7 @@ class HighOrderFTS(fts.FTS):
|
|||||||
ret = np.array([self.setsDict[s].centroid for s in flrg.RHS])
|
ret = np.array([self.setsDict[s].centroid for s in flrg.RHS])
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def forecast(self, data):
|
def forecast(self, data, **kwargs):
|
||||||
|
|
||||||
ret = []
|
ret = []
|
||||||
|
|
||||||
|
4
hwang.py
4
hwang.py
@ -4,7 +4,7 @@ from pyFTS import fts
|
|||||||
|
|
||||||
|
|
||||||
class HighOrderFTS(fts.FTS):
|
class HighOrderFTS(fts.FTS):
|
||||||
def __init__(self, name):
|
def __init__(self, order, **kwargs):
|
||||||
super(HighOrderFTS, self).__init__(1, name)
|
super(HighOrderFTS, self).__init__(1, name)
|
||||||
self.isHighOrder = True
|
self.isHighOrder = True
|
||||||
self.minOrder = 2
|
self.minOrder = 2
|
||||||
@ -12,7 +12,7 @@ class HighOrderFTS(fts.FTS):
|
|||||||
self.shortname = "Hwang" + name
|
self.shortname = "Hwang" + name
|
||||||
self.detail = "Hwang"
|
self.detail = "Hwang"
|
||||||
|
|
||||||
def forecast(self, data):
|
def forecast(self, data, **kwargs):
|
||||||
|
|
||||||
ndata = self.doTransformations(data)
|
ndata = self.doTransformations(data)
|
||||||
|
|
||||||
|
4
ifts.py
4
ifts.py
@ -7,7 +7,7 @@ from pyFTS import hofts, fts, tree
|
|||||||
|
|
||||||
|
|
||||||
class IntervalFTS(hofts.HighOrderFTS):
|
class IntervalFTS(hofts.HighOrderFTS):
|
||||||
def __init__(self, name):
|
def __init__(self, order, **kwargs):
|
||||||
super(IntervalFTS, self).__init__("IFTS " + name)
|
super(IntervalFTS, self).__init__("IFTS " + name)
|
||||||
self.shortname = "IFTS " + name
|
self.shortname = "IFTS " + name
|
||||||
self.name = "Interval FTS"
|
self.name = "Interval FTS"
|
||||||
@ -47,7 +47,7 @@ class IntervalFTS(hofts.HighOrderFTS):
|
|||||||
for child in node.getChildren():
|
for child in node.getChildren():
|
||||||
self.buildTree(child, lags, level + 1)
|
self.buildTree(child, lags, level + 1)
|
||||||
|
|
||||||
def forecastInterval(self, data):
|
def forecastInterval(self, data, **kwargs):
|
||||||
|
|
||||||
ndata = np.array(self.doTransformations(data))
|
ndata = np.array(self.doTransformations(data))
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ class ImprovedWeightedFLRG(object):
|
|||||||
|
|
||||||
|
|
||||||
class ImprovedWeightedFTS(fts.FTS):
|
class ImprovedWeightedFTS(fts.FTS):
|
||||||
def __init__(self, name):
|
def __init__(self, order, **kwargs):
|
||||||
super(ImprovedWeightedFTS, self).__init__(1, "IWFTS " + name)
|
super(ImprovedWeightedFTS, self).__init__(1, "IWFTS " + name)
|
||||||
self.name = "Improved Weighted FTS"
|
self.name = "Improved Weighted FTS"
|
||||||
self.detail = "Ismail & Efendi"
|
self.detail = "Ismail & Efendi"
|
||||||
@ -64,7 +64,7 @@ class ImprovedWeightedFTS(fts.FTS):
|
|||||||
ret = np.array([self.setsDict[s].centroid for s in flrg.RHS])
|
ret = np.array([self.setsDict[s].centroid for s in flrg.RHS])
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def forecast(self, data):
|
def forecast(self, data, **kwargs):
|
||||||
l = 1
|
l = 1
|
||||||
|
|
||||||
data = np.array(data)
|
data = np.array(data)
|
||||||
|
@ -24,7 +24,7 @@ class ContextualSeasonalFLRG(object):
|
|||||||
|
|
||||||
|
|
||||||
class ContextualMultiSeasonalFTS(sfts.SeasonalFTS):
|
class ContextualMultiSeasonalFTS(sfts.SeasonalFTS):
|
||||||
def __init__(self, name, indexer):
|
def __init__(self, order, name, **kwargs):
|
||||||
super(ContextualMultiSeasonalFTS, self).__init__("CMSFTS")
|
super(ContextualMultiSeasonalFTS, self).__init__("CMSFTS")
|
||||||
self.name = "Contextual Multi Seasonal FTS"
|
self.name = "Contextual Multi Seasonal FTS"
|
||||||
self.shortname = "CMSFTS " + name
|
self.shortname = "CMSFTS " + name
|
||||||
@ -62,7 +62,7 @@ class ContextualMultiSeasonalFTS(sfts.SeasonalFTS):
|
|||||||
else:
|
else:
|
||||||
return np.array([data.centroid])
|
return np.array([data.centroid])
|
||||||
|
|
||||||
def forecast(self, data):
|
def forecast(self, data, **kwargs):
|
||||||
|
|
||||||
ret = []
|
ret = []
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ class ContextualMultiSeasonalFTS(sfts.SeasonalFTS):
|
|||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def forecastAhead(self, data, steps):
|
def forecastAhead(self, data, steps, **kwargs):
|
||||||
ret = []
|
ret = []
|
||||||
for i in steps:
|
for i in steps:
|
||||||
flrg = self.flrgs[str(i)]
|
flrg = self.flrgs[str(i)]
|
||||||
|
@ -4,7 +4,7 @@ from pyFTS import fts, sfts
|
|||||||
|
|
||||||
|
|
||||||
class MultiSeasonalFTS(sfts.SeasonalFTS):
|
class MultiSeasonalFTS(sfts.SeasonalFTS):
|
||||||
def __init__(self, name, indexer):
|
def __init__(self, order, name, **kwargs):
|
||||||
super(MultiSeasonalFTS, self).__init__("MSFTS")
|
super(MultiSeasonalFTS, self).__init__("MSFTS")
|
||||||
self.name = "Multi Seasonal FTS"
|
self.name = "Multi Seasonal FTS"
|
||||||
self.shortname = "MSFTS " + name
|
self.shortname = "MSFTS " + name
|
||||||
@ -36,7 +36,7 @@ class MultiSeasonalFTS(sfts.SeasonalFTS):
|
|||||||
flrs = FLR.generateIndexedFLRs(self.sets, self.indexer, data)
|
flrs = FLR.generateIndexedFLRs(self.sets, self.indexer, data)
|
||||||
self.flrgs = self.generateFLRG(flrs)
|
self.flrgs = self.generateFLRG(flrs)
|
||||||
|
|
||||||
def forecast(self, data):
|
def forecast(self, data, **kwargs):
|
||||||
|
|
||||||
ret = []
|
ret = []
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ class MultiSeasonalFTS(sfts.SeasonalFTS):
|
|||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def forecastAhead(self, data, steps):
|
def forecastAhead(self, data, steps, **kwargs):
|
||||||
ret = []
|
ret = []
|
||||||
for i in steps:
|
for i in steps:
|
||||||
flrg = self.flrgs[str(i)]
|
flrg = self.flrgs[str(i)]
|
||||||
|
12
pwfts.py
12
pwfts.py
@ -42,7 +42,7 @@ class ProbabilisticWeightedFLRG(hofts.HighOrderFLRG):
|
|||||||
|
|
||||||
|
|
||||||
class ProbabilisticWeightedFTS(ifts.IntervalFTS):
|
class ProbabilisticWeightedFTS(ifts.IntervalFTS):
|
||||||
def __init__(self, name, update=True):
|
def __init__(self, order, name, **kwargs):
|
||||||
super(ProbabilisticWeightedFTS, self).__init__("PWFTS")
|
super(ProbabilisticWeightedFTS, self).__init__("PWFTS")
|
||||||
self.shortname = "PWFTS " + name
|
self.shortname = "PWFTS " + name
|
||||||
self.name = "Probabilistic FTS"
|
self.name = "Probabilistic FTS"
|
||||||
@ -191,7 +191,7 @@ class ProbabilisticWeightedFTS(ifts.IntervalFTS):
|
|||||||
ret = sum(np.array([pi * s.lower for s in flrg.LHS]))
|
ret = sum(np.array([pi * s.lower for s in flrg.LHS]))
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def forecast(self, data):
|
def forecast(self, data, **kwargs):
|
||||||
|
|
||||||
ndata = np.array(self.doTransformations(data))
|
ndata = np.array(self.doTransformations(data))
|
||||||
|
|
||||||
@ -296,7 +296,7 @@ class ProbabilisticWeightedFTS(ifts.IntervalFTS):
|
|||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def forecastInterval(self, data):
|
def forecastInterval(self, data, **kwargs):
|
||||||
|
|
||||||
ndata = np.array(self.doTransformations(data))
|
ndata = np.array(self.doTransformations(data))
|
||||||
|
|
||||||
@ -402,7 +402,7 @@ class ProbabilisticWeightedFTS(ifts.IntervalFTS):
|
|||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def forecastAhead(self, data, steps):
|
def forecastAhead(self, data, steps, **kwargs):
|
||||||
ret = [data[k] for k in np.arange(len(data) - self.order, len(data))]
|
ret = [data[k] for k in np.arange(len(data) - self.order, len(data))]
|
||||||
|
|
||||||
for k in np.arange(self.order - 1, steps):
|
for k in np.arange(self.order - 1, steps):
|
||||||
@ -416,7 +416,7 @@ class ProbabilisticWeightedFTS(ifts.IntervalFTS):
|
|||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def forecastAheadInterval(self, data, steps):
|
def forecastAheadInterval(self, data, steps, **kwargs):
|
||||||
|
|
||||||
l = len(data)
|
l = len(data)
|
||||||
|
|
||||||
@ -464,7 +464,7 @@ class ProbabilisticWeightedFTS(ifts.IntervalFTS):
|
|||||||
grid[k] += 1
|
grid[k] += 1
|
||||||
return grid
|
return grid
|
||||||
|
|
||||||
def forecastAheadDistribution(self, data, steps, resolution, parameters=2):
|
def forecastAheadDistribution(self, data, steps, **kwargs):
|
||||||
|
|
||||||
ret = []
|
ret = []
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ class ExponentialyWeightedFLRG(object):
|
|||||||
|
|
||||||
|
|
||||||
class ExponentialyWeightedFTS(fts.FTS):
|
class ExponentialyWeightedFTS(fts.FTS):
|
||||||
def __init__(self, name):
|
def __init__(self, order, **kwargs):
|
||||||
super(ExponentialyWeightedFTS, self).__init__(1, "EWFTS")
|
super(ExponentialyWeightedFTS, self).__init__(1, "EWFTS")
|
||||||
self.name = "Exponentialy Weighted FTS"
|
self.name = "Exponentialy Weighted FTS"
|
||||||
self.detail = "Sadaei"
|
self.detail = "Sadaei"
|
||||||
@ -60,7 +60,7 @@ class ExponentialyWeightedFTS(fts.FTS):
|
|||||||
flrs = FLR.generateRecurrentFLRs(tmpdata)
|
flrs = FLR.generateRecurrentFLRs(tmpdata)
|
||||||
self.flrgs = self.generateFLRG(flrs, self.c)
|
self.flrgs = self.generateFLRG(flrs, self.c)
|
||||||
|
|
||||||
def forecast(self, data):
|
def forecast(self, data, **kwargs):
|
||||||
l = 1
|
l = 1
|
||||||
|
|
||||||
data = np.array(data)
|
data = np.array(data)
|
||||||
|
4
sfts.py
4
sfts.py
@ -26,7 +26,7 @@ class SeasonalFLRG(FLR.FLR):
|
|||||||
|
|
||||||
|
|
||||||
class SeasonalFTS(fts.FTS):
|
class SeasonalFTS(fts.FTS):
|
||||||
def __init__(self, name):
|
def __init__(self, order, **kwargs):
|
||||||
super(SeasonalFTS, self).__init__(1, "SFTS")
|
super(SeasonalFTS, self).__init__(1, "SFTS")
|
||||||
self.name = "Seasonal FTS"
|
self.name = "Seasonal FTS"
|
||||||
self.detail = "Chen"
|
self.detail = "Chen"
|
||||||
@ -60,7 +60,7 @@ class SeasonalFTS(fts.FTS):
|
|||||||
flrs = FLR.generateRecurrentFLRs(tmpdata)
|
flrs = FLR.generateRecurrentFLRs(tmpdata)
|
||||||
self.flrgs = self.generateFLRG(flrs)
|
self.flrgs = self.generateFLRG(flrs)
|
||||||
|
|
||||||
def forecast(self, data):
|
def forecast(self, data, **kwargs):
|
||||||
|
|
||||||
ndata = np.array(self.doTransformations(data))
|
ndata = np.array(self.doTransformations(data))
|
||||||
|
|
||||||
|
6
yu.py
6
yu.py
@ -4,7 +4,7 @@ from pyFTS import fts
|
|||||||
|
|
||||||
|
|
||||||
class WeightedFLRG(fts.FTS):
|
class WeightedFLRG(fts.FTS):
|
||||||
def __init__(self, LHS):
|
def __init__(self, order, **kwargs):
|
||||||
self.LHS = LHS
|
self.LHS = LHS
|
||||||
self.RHS = []
|
self.RHS = []
|
||||||
self.count = 1.0
|
self.count = 1.0
|
||||||
@ -31,7 +31,7 @@ class WeightedFLRG(fts.FTS):
|
|||||||
|
|
||||||
|
|
||||||
class WeightedFTS(fts.FTS):
|
class WeightedFTS(fts.FTS):
|
||||||
def __init__(self, name):
|
def __init__(self, order, **kwargs):
|
||||||
super(WeightedFTS, self).__init__(1, "WFTS " + name)
|
super(WeightedFTS, self).__init__(1, "WFTS " + name)
|
||||||
self.name = "Weighted FTS"
|
self.name = "Weighted FTS"
|
||||||
self.detail = "Yu"
|
self.detail = "Yu"
|
||||||
@ -53,7 +53,7 @@ class WeightedFTS(fts.FTS):
|
|||||||
flrs = FLR.generateRecurrentFLRs(tmpdata)
|
flrs = FLR.generateRecurrentFLRs(tmpdata)
|
||||||
self.flrgs = self.generateFLRG(flrs)
|
self.flrgs = self.generateFLRG(flrs)
|
||||||
|
|
||||||
def forecast(self, data):
|
def forecast(self, data, **kwargs):
|
||||||
l = 1
|
l = 1
|
||||||
|
|
||||||
data = np.array(data)
|
data = np.array(data)
|
||||||
|
Loading…
Reference in New Issue
Block a user