Interval forecasting on MVFTS and WMVFTS
This commit is contained in:
parent
3868bb1c48
commit
2e0e86b747
@ -22,7 +22,6 @@ class FLRG(flg.FLRG):
|
|||||||
self.LHS[var] = []
|
self.LHS[var] = []
|
||||||
self.LHS[var].append(fset)
|
self.LHS[var].append(fset)
|
||||||
|
|
||||||
|
|
||||||
def append_rhs(self, fset, **kwargs):
|
def append_rhs(self, fset, **kwargs):
|
||||||
self.RHS.add(fset)
|
self.RHS.add(fset)
|
||||||
|
|
||||||
@ -34,10 +33,22 @@ class FLRG(flg.FLRG):
|
|||||||
|
|
||||||
return np.nanmin(mvs)
|
return np.nanmin(mvs)
|
||||||
|
|
||||||
|
def get_lower(self, sets):
|
||||||
|
if self.lower is None:
|
||||||
|
self.lower = min([sets[rhs].lower for rhs in self.RHS])
|
||||||
|
|
||||||
|
return self.lower
|
||||||
|
|
||||||
|
def get_upper(self, sets):
|
||||||
|
if self.upper is None:
|
||||||
|
self.upper = max([sets[rhs].upper for rhs in self.RHS])
|
||||||
|
|
||||||
|
return self.upper
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
_str = ""
|
_str = ""
|
||||||
for k in self.RHS:
|
for k in self.RHS:
|
||||||
_str += "," if len(_str) > 0 else ""
|
_str += "," if len(_str) > 0 else ""
|
||||||
_str += k
|
_str += k
|
||||||
|
|
||||||
return self.get_key() + " -> " + _str
|
return self.get_key() + " -> " + _str
|
||||||
|
@ -236,8 +236,8 @@ class MVFTS(fts.FTS):
|
|||||||
los.append(_flrg.get_lower(self.target_variable.partitioner.sets))
|
los.append(_flrg.get_lower(self.target_variable.partitioner.sets))
|
||||||
|
|
||||||
mv = np.array(mvs)
|
mv = np.array(mvs)
|
||||||
up = np.dot(mv, np.array(ups).T) / np.sum(mv)
|
up = np.dot(mv, np.array(ups).T) / np.nansum(mv)
|
||||||
lo = np.dot(mv, np.array(los).T) / np.sum(mv)
|
lo = np.dot(mv, np.array(los).T) / np.nansum(mv)
|
||||||
|
|
||||||
ret.append([lo, up])
|
ret.append([lo, up])
|
||||||
|
|
||||||
|
@ -85,6 +85,7 @@ print(_s2-_s1)
|
|||||||
#model.fit(data, distributed='dispy', nodes=['192.168.0.110'])
|
#model.fit(data, distributed='dispy', nodes=['192.168.0.110'])
|
||||||
#'''
|
#'''
|
||||||
|
|
||||||
|
'''
|
||||||
from pyFTS.models.multivariate import common, variable, mvfts, wmvfts, cmvfts, grid
|
from pyFTS.models.multivariate import common, variable, mvfts, wmvfts, cmvfts, grid
|
||||||
from pyFTS.models.seasonal import partitioner as seasonal
|
from pyFTS.models.seasonal import partitioner as seasonal
|
||||||
from pyFTS.models.seasonal.common import DateTime
|
from pyFTS.models.seasonal.common import DateTime
|
||||||
@ -99,7 +100,7 @@ from pyFTS.models.multivariate import common, variable, mvfts
|
|||||||
from pyFTS.models.seasonal import partitioner as seasonal
|
from pyFTS.models.seasonal import partitioner as seasonal
|
||||||
from pyFTS.models.seasonal.common import DateTime
|
from pyFTS.models.seasonal.common import DateTime
|
||||||
|
|
||||||
#'''
|
|
||||||
sp = {'seasonality': DateTime.minute_of_day, 'names': [str(k) for k in range(0,24)]}
|
sp = {'seasonality': DateTime.minute_of_day, 'names': [str(k) for k in range(0,24)]}
|
||||||
|
|
||||||
vhour = variable.Variable("Hour", data_label="date", partitioner=seasonal.TimeGridPartitioner, npart=24,
|
vhour = variable.Variable("Hour", data_label="date", partitioner=seasonal.TimeGridPartitioner, npart=24,
|
||||||
@ -152,4 +153,38 @@ time_generator = lambda x : pd.to_datetime(x) + pd.to_timedelta(1, unit='h')
|
|||||||
|
|
||||||
|
|
||||||
forecasts = mload.predict(test_mv.iloc[:1], steps_ahead=48, generators={'date': time_generator,
|
forecasts = mload.predict(test_mv.iloc[:1], steps_ahead=48, generators={'date': time_generator,
|
||||||
'temperature': mtemp})
|
'temperature': mtemp})
|
||||||
|
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
data = pd.read_csv('https://query.data.world/s/6xfb5useuotbbgpsnm5b2l3wzhvw2i', sep=';')
|
||||||
|
|
||||||
|
train = data.iloc[:9000]
|
||||||
|
test = data.iloc[9000:9200]
|
||||||
|
|
||||||
|
from pyFTS.models.multivariate import common, variable, mvfts
|
||||||
|
from pyFTS.models.seasonal import partitioner as seasonal
|
||||||
|
from pyFTS.models.seasonal.common import DateTime
|
||||||
|
from pyFTS.partitioners import Grid
|
||||||
|
|
||||||
|
sp = {'seasonality': DateTime.day_of_year , 'names': ['Jan','Fev','Mar','Abr','Mai','Jun','Jul', 'Ago','Set','Out','Nov','Dez']}
|
||||||
|
|
||||||
|
vmonth = variable.Variable("Month", data_label="data", partitioner=seasonal.TimeGridPartitioner, npart=12,
|
||||||
|
data=train, partitioner_specific=sp)
|
||||||
|
|
||||||
|
sp = {'seasonality': DateTime.minute_of_day, 'names': [str(k) for k in range(0,24)]}
|
||||||
|
|
||||||
|
vhour = variable.Variable("Hour", data_label="data", partitioner=seasonal.TimeGridPartitioner, npart=24,
|
||||||
|
data=train, partitioner_specific=sp)
|
||||||
|
|
||||||
|
vavg = variable.Variable("Radiation", data_label="glo_avg", alias='rad',
|
||||||
|
partitioner=Grid.GridPartitioner, npart=30, alpha_cut=.3,
|
||||||
|
data=train)
|
||||||
|
|
||||||
|
from pyFTS.models.multivariate import mvfts, wmvfts, cmvfts
|
||||||
|
|
||||||
|
model = wmvfts.WeightedMVFTS(explanatory_variables=[vmonth, vhour, vavg], target_variable=vavg)
|
||||||
|
model.fit(train)
|
||||||
|
|
||||||
|
forecasts = model.predict(test, type='interval')
|
Loading…
Reference in New Issue
Block a user