- Bugfixes caused by FLRG improvements and refactorings on affected classes

This commit is contained in:
Petrônio Cândido 2017-10-06 19:36:03 -03:00
parent 04b1ffea85
commit ce71dc20cb
10 changed files with 31 additions and 23 deletions

View File

@ -6,12 +6,12 @@ import pandas as pd
import math import math
from operator import itemgetter from operator import itemgetter
from pyFTS.common import FLR, FuzzySet, SortedCollection from pyFTS.common import FLR, FuzzySet, SortedCollection
from pyFTS import fts, chen, cheng, hofts, hwang, ismailefendi, sadaei, song, yu, sfts from pyFTS import fts, chen, cheng, hofts, hwang, ismailefendi, sadaei, song, yu
from pyFTS.benchmarks import arima, quantreg from pyFTS.benchmarks import arima, quantreg
from pyFTS.common import Transformations from pyFTS.common import Transformations
import scipy.stats as st import scipy.stats as st
from pyFTS import tree from pyFTS import tree
from pyFTS.models import msfts from pyFTS.seasonal import sfts, msfts
from pyFTS.probabilistic import ProbabilityDistribution, kde from pyFTS.probabilistic import ProbabilityDistribution, kde
def sampler(data, quantiles): def sampler(data, quantiles):
@ -226,7 +226,7 @@ class EnsembleFTS(fts.FTS):
class AllMethodEnsembleFTS(EnsembleFTS): class AllMethodEnsembleFTS(EnsembleFTS):
def __init__(self, name, **kwargs): def __init__(self, **kwargs):
super(AllMethodEnsembleFTS, self).__init__(name="Ensemble FTS", **kwargs) super(AllMethodEnsembleFTS, self).__init__(name="Ensemble FTS", **kwargs)
self.min_order = 3 self.min_order = 3
@ -239,7 +239,7 @@ class AllMethodEnsembleFTS(EnsembleFTS):
self.original_min = min(data) self.original_min = min(data)
fo_methods = [song.ConventionalFTS, chen.ConventionalFTS, yu.WeightedFTS, cheng.TrendWeightedFTS, fo_methods = [song.ConventionalFTS, chen.ConventionalFTS, yu.WeightedFTS, cheng.TrendWeightedFTS,
sadaei.ExponentialyWeightedFTS, ismailefendi.ImprovedWeightedFTS, sfts.SeasonalFTS] sadaei.ExponentialyWeightedFTS, ismailefendi.ImprovedWeightedFTS]
ho_methods = [hofts.HighOrderFTS, hwang.HighOrderFTS] ho_methods = [hofts.HighOrderFTS, hwang.HighOrderFTS]

View File

@ -17,7 +17,7 @@ class FLRG(object):
return self.midpoint return self.midpoint
def get_midpoints(self): def get_midpoints(self):
if isinstance(self.RHS, list): if isinstance(self.RHS, (list, set)):
return np.array([s.centroid for s in self.RHS]) return np.array([s.centroid for s in self.RHS])
elif isinstance(self.RHS, dict): elif isinstance(self.RHS, dict):
return np.array([self.RHS[s].centroid for s in self.RHS.keys()]) return np.array([self.RHS[s].centroid for s in self.RHS.keys()])

View File

@ -49,7 +49,7 @@ class HighOrderFLRG(flrg.FLRG):
class HighOrderFTS(fts.FTS): class HighOrderFTS(fts.FTS):
"""Conventional High Order Fuzzy Time Series""" """Conventional High Order Fuzzy Time Series"""
def __init__(self, name, **kwargs): def __init__(self, name, **kwargs):
super(HighOrderFTS, self).__init__(name="HOFTS" + name, **kwargs) super(HighOrderFTS, self).__init__(1, name="HOFTS" + name, **kwargs)
self.name = "High Order FTS" self.name = "High Order FTS"
self.shortname = "HOFTS" + name self.shortname = "HOFTS" + name
self.detail = "Chen" self.detail = "Chen"

View File

@ -16,25 +16,27 @@ class ImprovedWeightedFLRG(flrg.FLRG):
super(ImprovedWeightedFLRG, self).__init__(1, **kwargs) super(ImprovedWeightedFLRG, self).__init__(1, **kwargs)
self.LHS = LHS self.LHS = LHS
self.RHS = {} self.RHS = {}
self.rhs_counts = {}
self.count = 0.0 self.count = 0.0
def append(self, c): def append(self, c):
if c.name not in self.RHS: if c.name not in self.RHS:
self.RHS[c.name] = 1.0 self.RHS[c.name] = c
self.rhs_counts[c.name] = 1.0
else: else:
self.RHS[c.name] = self.RHS[c.name] + 1.0 self.rhs_counts[c.name] += 1.0
self.count = self.count + 1.0 self.count += 1.0
def weights(self): def weights(self):
return np.array([self.RHS[c] / self.count for c in self.RHS.keys()]) return np.array([self.rhs_counts[c] / self.count for c in self.RHS.keys()])
def __str__(self): def __str__(self):
tmp = self.LHS.name + " -> " tmp = self.LHS.name + " -> "
tmp2 = "" tmp2 = ""
for c in sorted(self.RHS): for c in sorted(self.RHS.keys()):
if len(tmp2) > 0: if len(tmp2) > 0:
tmp2 = tmp2 + "," tmp2 = tmp2 + ","
tmp2 = tmp2 + c + "(" + str(round(self.RHS[c] / self.count, 3)) + ")" tmp2 = tmp2 + c + "(" + str(round(self.rhs_counts[c] / self.count, 3)) + ")"
return tmp + tmp2 return tmp + tmp2
def __len__(self): def __len__(self):

View File

@ -73,15 +73,15 @@ class ProbabilisticWeightedFLRG(hofts.HighOrderFLRG):
return self.Z return self.Z
def get_midpoint(self): def get_midpoint(self):
return sum(np.array([self.get_RHSprobability(s.name) * self.RHS[s].centroid return sum(np.array([self.get_RHSprobability(s) * self.RHS[s].centroid
for s in self.RHS.keys()])) for s in self.RHS.keys()]))
def get_upper(self): def get_upper(self):
return sum(np.array([self.get_RHSprobability(s.name) * self.RHS[s].upper return sum(np.array([self.get_RHSprobability(s) * self.RHS[s].upper
for s in self.RHS.keys()])) for s in self.RHS.keys()]))
def get_lower(self): def get_lower(self):
return sum(np.array([self.get_RHSprobability(s.name) * self.RHS[s].lower return sum(np.array([self.get_RHSprobability(s) * self.RHS[s].lower
for s in self.RHS.keys()])) for s in self.RHS.keys()]))
def __str__(self): def __str__(self):
@ -96,7 +96,7 @@ class ProbabilisticWeightedFLRG(hofts.HighOrderFLRG):
class ProbabilisticWeightedFTS(ifts.IntervalFTS): class ProbabilisticWeightedFTS(ifts.IntervalFTS):
"""High Order Probabilistic Weighted Fuzzy Time Series""" """High Order Probabilistic Weighted Fuzzy Time Series"""
def __init__(self, name, **kwargs): def __init__(self, name, **kwargs):
super(ProbabilisticWeightedFTS, self).__init__(order=1, name=name, **kwargs) super(ProbabilisticWeightedFTS, self).__init__(name=name, **kwargs)
self.shortname = "PWFTS " + name self.shortname = "PWFTS " + name
self.name = "Probabilistic FTS" self.name = "Probabilistic FTS"
self.detail = "Silva, P.; Guimarães, F.; Sadaei, H." self.detail = "Silva, P.; Guimarães, F.; Sadaei, H."

View File

@ -59,7 +59,7 @@ class ExponentialyWeightedFTS(fts.FTS):
if flr.LHS.name in flrgs: if flr.LHS.name in flrgs:
flrgs[flr.LHS.name].append(flr.RHS) flrgs[flr.LHS.name].append(flr.RHS)
else: else:
flrgs[flr.LHS.name] = ExponentialyWeightedFLRG(flr.LHS, c); flrgs[flr.LHS.name] = ExponentialyWeightedFLRG(flr.LHS, c=c);
flrgs[flr.LHS.name].append(flr.RHS) flrgs[flr.LHS.name].append(flr.RHS)
return (flrgs) return (flrgs)

View File

@ -1,6 +1,6 @@
import numpy as np import numpy as np
from pyFTS.common import FuzzySet,FLR from pyFTS.common import FuzzySet,FLR
from pyFTS import fts, sfts from pyFTS.seasonal import sfts
class MultiSeasonalFTS(sfts.SeasonalFTS): class MultiSeasonalFTS(sfts.SeasonalFTS):

View File

@ -11,11 +11,12 @@ from mpl_toolkits.mplot3d import Axes3D
import pandas as pd import pandas as pd
from pyFTS.partitioners import Grid, Entropy, FCM, Huarng from pyFTS.partitioners import Grid, Entropy, FCM, Huarng
from pyFTS.common import FLR,FuzzySet,Membership,Transformations from pyFTS.common import FLR,FuzzySet,Membership,Transformations
from pyFTS import fts,hofts,ifts,pwfts,tree, chen, ensemble, song, yu, cheng, ismailefendi, sadaei, hwang from pyFTS import fts,hofts,ifts,pwfts,tree, chen, song, yu, cheng, ismailefendi, sadaei, hwang
from pyFTS.benchmarks import naive, arima from pyFTS.benchmarks import naive, arima
from numpy import random from numpy import random
from pyFTS.benchmarks import benchmarks as bchmk from pyFTS.benchmarks import benchmarks as bchmk
from pyFTS.benchmarks import arima, quantreg, Measures from pyFTS.benchmarks import arima, quantreg, Measures
from pyFTS.ensemble import ensemble
os.chdir("/home/petronio/dados/Dropbox/Doutorado/Codigos/") os.chdir("/home/petronio/dados/Dropbox/Doutorado/Codigos/")
@ -24,7 +25,6 @@ diff = Transformations.Differential(1)
passengers = pd.read_csv("DataSets/AirPassengers.csv", sep=",") passengers = pd.read_csv("DataSets/AirPassengers.csv", sep=",")
passengers = np.array(passengers["Passengers"]) passengers = np.array(passengers["Passengers"])
e = ensemble.AllMethodEnsembleFTS(alpha=0.25, point_method="median", interval_method='quantile') e = ensemble.AllMethodEnsembleFTS(alpha=0.25, point_method="median", interval_method='quantile')
fo_methods = [song.ConventionalFTS, chen.ConventionalFTS, yu.WeightedFTS, cheng.TrendWeightedFTS, sadaei.ExponentialyWeightedFTS, fo_methods = [song.ConventionalFTS, chen.ConventionalFTS, yu.WeightedFTS, cheng.TrendWeightedFTS, sadaei.ExponentialyWeightedFTS,

View File

@ -54,6 +54,12 @@ pfts1.shortname = "1st Order"
#print(pfts1_enrollments) #print(pfts1_enrollments)
tmp = pfts1.forecast(data[3000:3020])
tmp = pfts1.forecastInterval(data[3000:3020])
tmp = pfts1.forecastAheadInterval(data[3000:3020],20)
tmp = pfts1.forecastAheadDistribution(data[3000:3020],20, method=3, h=0.45, kernel="gaussian") tmp = pfts1.forecastAheadDistribution(data[3000:3020],20, method=3, h=0.45, kernel="gaussian")
print(tmp[0]) print(tmp[0])

View File

@ -13,12 +13,12 @@ import datetime
import pandas as pd import pandas as pd
from pyFTS.partitioners import Grid, CMeans, FCM, Entropy from pyFTS.partitioners import Grid, CMeans, FCM, Entropy
from pyFTS.common import FLR,FuzzySet,Membership,Transformations,Util from pyFTS.common import FLR,FuzzySet,Membership,Transformations,Util
from pyFTS import fts,sfts from pyFTS import fts
from pyFTS.models import msfts from pyFTS.seasonal import sfts, msfts
from pyFTS.benchmarks import benchmarks as bchmk from pyFTS.benchmarks import benchmarks as bchmk
from pyFTS.benchmarks import Measures from pyFTS.benchmarks import Measures
os.chdir("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/") os.chdir("/home/petronio/dados/Dropbox/Doutorado/Codigos/")
sonda = pd.read_csv("DataSets/SONDA_BSB_MOD.csv", sep=";") sonda = pd.read_csv("DataSets/SONDA_BSB_MOD.csv", sep=";")