Bugfixes in High Order NSFTS
This commit is contained in:
parent
2b214e561b
commit
9c9553e71e
@ -9,7 +9,6 @@ class HighOrderNonStationaryFLRG(flrg.NonStationaryFLRG):
|
|||||||
"""First Order NonStationary Fuzzy Logical Relationship Group"""
|
"""First Order NonStationary Fuzzy Logical Relationship Group"""
|
||||||
def __init__(self, order, **kwargs):
|
def __init__(self, order, **kwargs):
|
||||||
super(HighOrderNonStationaryFLRG, self).__init__(order, **kwargs)
|
super(HighOrderNonStationaryFLRG, self).__init__(order, **kwargs)
|
||||||
|
|
||||||
self.LHS = []
|
self.LHS = []
|
||||||
self.RHS = {}
|
self.RHS = {}
|
||||||
self.count = 0.0
|
self.count = 0.0
|
||||||
@ -101,10 +100,10 @@ class HighOrderNonStationaryFTS(nsfts.NonStationaryFTS):
|
|||||||
|
|
||||||
def generate_flrg(self, data, **kwargs):
|
def generate_flrg(self, data, **kwargs):
|
||||||
l = len(data)
|
l = len(data)
|
||||||
for k in np.arange(self.order, l):
|
for k in np.arange(self.max_lag, l):
|
||||||
if self.dump: print("FLR: " + str(k))
|
if self.dump: print("FLR: " + str(k))
|
||||||
|
|
||||||
sample = data[k - self.order: k]
|
sample = data[k - self.max_lag: k]
|
||||||
|
|
||||||
rhs = [key for key in self.partitioner.ordered_sets
|
rhs = [key for key in self.partitioner.ordered_sets
|
||||||
if self.partitioner.sets[key].membership(data[k], [0,1]) > 0.0]
|
if self.partitioner.sets[key].membership(data[k], [0,1]) > 0.0]
|
||||||
@ -145,18 +144,17 @@ class HighOrderNonStationaryFTS(nsfts.NonStationaryFTS):
|
|||||||
lags = []
|
lags = []
|
||||||
|
|
||||||
for ct, dat in enumerate(sample):
|
for ct, dat in enumerate(sample):
|
||||||
affected_sets = [[ct, self.partitioner.sets[key].membership(dat, perturb[ct])]
|
affected_sets = [key for ct, key in enumerate(self.partitioner.ordered_sets)
|
||||||
for ct, key in enumerate(self.partitioner.ordered_sets)
|
|
||||||
if self.partitioner.sets[key].membership(dat, perturb[ct]) > 0.0]
|
if self.partitioner.sets[key].membership(dat, perturb[ct]) > 0.0]
|
||||||
|
|
||||||
if len(affected_sets) == 0:
|
if len(affected_sets) == 0:
|
||||||
|
|
||||||
if dat < self.partitioner.lower_set().get_lower(perturb[0]):
|
if dat < self.partitioner.lower_set().get_lower(perturb[0]):
|
||||||
affected_sets.append([0, 1])
|
affected_sets.append(self.partitioner.lower_set().name)
|
||||||
elif dat > self.partitioner.upper_set().get_upper(perturb[-1]):
|
elif dat > self.partitioner.upper_set().get_upper(perturb[-1]):
|
||||||
affected_sets.append([self.partitioner.partitions - 1, 1])
|
affected_sets.append(self.partitioner.upper_set().name)
|
||||||
|
|
||||||
lags.append([a[0] for a in affected_sets])
|
lags.append(affected_sets)
|
||||||
|
|
||||||
# Build the tree with all possible paths
|
# Build the tree with all possible paths
|
||||||
|
|
||||||
@ -166,7 +164,7 @@ class HighOrderNonStationaryFTS(nsfts.NonStationaryFTS):
|
|||||||
flrg = HighOrderNonStationaryFLRG(self.order)
|
flrg = HighOrderNonStationaryFLRG(self.order)
|
||||||
|
|
||||||
for kk in path:
|
for kk in path:
|
||||||
flrg.append_lhs(self.partitioner.ordered_sets[kk])
|
flrg.append_lhs(kk)
|
||||||
|
|
||||||
affected_flrgs.append(flrg)
|
affected_flrgs.append(flrg)
|
||||||
mv = []
|
mv = []
|
||||||
@ -185,16 +183,12 @@ class HighOrderNonStationaryFTS(nsfts.NonStationaryFTS):
|
|||||||
|
|
||||||
explain = kwargs.get('explain', False)
|
explain = kwargs.get('explain', False)
|
||||||
|
|
||||||
fuzzyfied = kwargs.get('fuzzyfied', False)
|
|
||||||
|
|
||||||
time_displacement = kwargs.get("time_displacement", 0)
|
time_displacement = kwargs.get("time_displacement", 0)
|
||||||
|
|
||||||
window_size = kwargs.get("window_size", 1)
|
window_size = kwargs.get("window_size", 1)
|
||||||
|
|
||||||
no_update = kwargs.get("no_update", False)
|
no_update = kwargs.get("no_update", False)
|
||||||
|
|
||||||
mode = kwargs.get('mode', 'mean')
|
|
||||||
|
|
||||||
ret = []
|
ret = []
|
||||||
|
|
||||||
l = len(ndata) if not explain else self.max_lag + 1
|
l = len(ndata) if not explain else self.max_lag + 1
|
||||||
@ -214,8 +208,7 @@ class HighOrderNonStationaryFTS(nsfts.NonStationaryFTS):
|
|||||||
if no_update:
|
if no_update:
|
||||||
perturb = [[0, 1] for k in np.arange(self.partitioner.partitions)]
|
perturb = [[0, 1] for k in np.arange(self.partitioner.partitions)]
|
||||||
else:
|
else:
|
||||||
perturb = self.conditional_perturbation_factors(sample[0])
|
perturb = self.conditional_perturbation_factors(sample[-1])
|
||||||
|
|
||||||
|
|
||||||
affected_flrgs, affected_flrgs_memberships = self._affected_flrgs(sample, perturb)
|
affected_flrgs, affected_flrgs_memberships = self._affected_flrgs(sample, perturb)
|
||||||
|
|
||||||
@ -246,4 +239,20 @@ class HighOrderNonStationaryFTS(nsfts.NonStationaryFTS):
|
|||||||
|
|
||||||
ret.append(pto)
|
ret.append(pto)
|
||||||
|
|
||||||
|
if self.method == 'conditional' and not no_update:
|
||||||
|
self.forecasts.append(pto)
|
||||||
|
self.residuals.append(self.inputs[-1] - self.forecasts[-1])
|
||||||
|
self.inputs.extend(sample)
|
||||||
|
|
||||||
|
for g in range(self.order):
|
||||||
|
self.inputs.pop(0)
|
||||||
|
self.forecasts.pop(0)
|
||||||
|
self.residuals.pop(0)
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
tmp = self.name + ":\n"
|
||||||
|
for r in self.flrgs:
|
||||||
|
tmp = "{0}{1}\n".format(tmp, str(self.flrgs[r]))
|
||||||
|
return tmp
|
||||||
|
@ -33,5 +33,6 @@ print(fs)
|
|||||||
model = honsfts.HighOrderNonStationaryFTS(partitioner=fs, order=2)
|
model = honsfts.HighOrderNonStationaryFTS(partitioner=fs, order=2)
|
||||||
#model = nsfts.NonStationaryFTS(partitioner=fs)
|
#model = nsfts.NonStationaryFTS(partitioner=fs)
|
||||||
model.fit(train)
|
model.fit(train)
|
||||||
|
#print(model)
|
||||||
forecasts = model.predict(test)
|
forecasts = model.predict(test)
|
||||||
print(forecasts)
|
#print(forecasts)
|
Loading…
Reference in New Issue
Block a user