diff --git a/sfts.py b/sfts.py new file mode 100644 index 0000000..3891d45 --- /dev/null +++ b/sfts.py @@ -0,0 +1,57 @@ +import numpy as np +from pyFTS import * + +class SeasonalFLRG(fts.FTS): + def __init__(self,seasonality): + self.LHS = seasonality + self.RHS = [] + + def append(self,c): + self.RHS.append(c) + + def __str__(self): + tmp = self.LHS + " -> " + tmp2 = "" + for c in self.RHS: + if len(tmp2) > 0: + tmp2 = tmp2 + "," + tmp2 = tmp2 + c + return tmp + tmp2 + + +class SeasonalFTS(fts.FTS): + def __init__(self,name): + super(WeightedFTS, self).__init__(1,name) + + def defuzzy(self,data): + + actual = self.fuzzy(data) + + if actual["fuzzyset"] not in self.flrgs: + return self.sets[actual["fuzzyset"]].centroid + + flrg = self.flrgs[actual["fuzzyset"]] + + mi = np.array([self.sets[s].centroid for s in flrg.RHS]) + + return mi.dot( flrg.weights() ) + + def learn(self, data, sets): + last = {"fuzzyset":"", "membership":0.0} + actual = {"fuzzyset":"", "membership":0.0} + + for s in sets: + self.sets[s.name] = s + + self.flrgs = {} + count = 1 + for inst in data: + actual = self.fuzzy(inst) + + if count > self.order: + if last["fuzzyset"] not in self.flrgs: + self.flrgs[last["fuzzyset"]] = WeightedFLRG(last["fuzzyset"]) + + self.flrgs[last["fuzzyset"]].append(actual["fuzzyset"]) + count = count + 1 + last = actual