- Song & Chissom Conventional FTS
This commit is contained in:
parent
3365fa72f1
commit
fb9c3585be
@ -17,7 +17,7 @@ from mpl_toolkits.mplot3d import Axes3D
|
|||||||
from pyFTS.partitioners import partitioner, Grid, Huarng, Entropy, FCM
|
from pyFTS.partitioners import partitioner, Grid, Huarng, Entropy, FCM
|
||||||
from pyFTS.benchmarks import Measures, naive, arima, ResidualAnalysis, ProbabilityDistribution, Util, quantreg
|
from pyFTS.benchmarks import Measures, naive, arima, ResidualAnalysis, ProbabilityDistribution, Util, quantreg
|
||||||
from pyFTS.common import Membership, FuzzySet, FLR, Transformations, Util
|
from pyFTS.common import Membership, FuzzySet, FLR, Transformations, Util
|
||||||
from pyFTS import fts, chen, yu, ismailefendi, sadaei, hofts, hwang, pwfts, ifts
|
from pyFTS import fts, chen, yu, ismailefendi, sadaei, hofts, hwang, pwfts, ifts, cheng
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
|
||||||
colors = ['grey', 'rosybrown', 'maroon', 'red','orange', 'yellow', 'olive', 'green',
|
colors = ['grey', 'rosybrown', 'maroon', 'red','orange', 'yellow', 'olive', 'green',
|
||||||
@ -31,11 +31,11 @@ nsty = len(styles)
|
|||||||
|
|
||||||
def get_benchmark_point_methods():
|
def get_benchmark_point_methods():
|
||||||
"""Return all non FTS methods for point forecast"""
|
"""Return all non FTS methods for point forecast"""
|
||||||
return [naive.Naive, arima.ARIMA]
|
return [naive.Naive, arima.ARIMA, quantreg.QuantileRegression]
|
||||||
|
|
||||||
def get_point_methods():
|
def get_point_methods():
|
||||||
"""Return all FTS methods for point forecast"""
|
"""Return all FTS methods for point forecast"""
|
||||||
return [chen.ConventionalFTS, yu.WeightedFTS, ismailefendi.ImprovedWeightedFTS,
|
return [chen.ConventionalFTS, yu.WeightedFTS, ismailefendi.ImprovedWeightedFTS, cheng.TrendWeightedFTS,
|
||||||
sadaei.ExponentialyWeightedFTS, hofts.HighOrderFTS, pwfts.ProbabilisticWeightedFTS]
|
sadaei.ExponentialyWeightedFTS, hofts.HighOrderFTS, pwfts.ProbabilisticWeightedFTS]
|
||||||
|
|
||||||
def get_benchmark_interval_methods():
|
def get_benchmark_interval_methods():
|
||||||
|
@ -16,6 +16,7 @@ class QuantileRegression(fts.FTS):
|
|||||||
self.is_high_order = True
|
self.is_high_order = True
|
||||||
self.has_point_forecasting = True
|
self.has_point_forecasting = True
|
||||||
self.has_interval_forecasting = True
|
self.has_interval_forecasting = True
|
||||||
|
self.has_probability_forecasting = True
|
||||||
self.benchmark_only = True
|
self.benchmark_only = True
|
||||||
self.minOrder = 1
|
self.minOrder = 1
|
||||||
self.alpha = 0.5
|
self.alpha = 0.5
|
||||||
|
67
song.py
Normal file
67
song.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
import numpy as np
|
||||||
|
from pyFTS.common import FuzzySet, FLR
|
||||||
|
from pyFTS import fts
|
||||||
|
|
||||||
|
class ConventionalFTS(fts.FTS):
|
||||||
|
"""Conventional Fuzzy Time Series"""
|
||||||
|
def __init__(self, name, **kwargs):
|
||||||
|
super(ConventionalFTS, self).__init__(1, "CFTS " + name)
|
||||||
|
self.name = "Conventional FTS"
|
||||||
|
self.detail = "Song & Chissom"
|
||||||
|
self.R = None
|
||||||
|
|
||||||
|
def flr_membership_matrix(self, flr):
|
||||||
|
lm = [flr.LHS.membership(k.centroid) for k in self.sets]
|
||||||
|
rm = [flr.RHS.membership(k.centroid) for k in self.sets]
|
||||||
|
|
||||||
|
r = np.zeros((len(self.sets), len(self.sets)))
|
||||||
|
for k in range(0,len(self.sets)):
|
||||||
|
for l in range(0, len(self.sets)):
|
||||||
|
r[k][l] = min(lm[k],rm[l])
|
||||||
|
|
||||||
|
return r
|
||||||
|
|
||||||
|
def operation_matrix(self, flrs):
|
||||||
|
r = np.zeros((len(self.sets),len(self.sets)))
|
||||||
|
for k in flrs:
|
||||||
|
mm = self.flr_membership_matrix(k)
|
||||||
|
for k in range(0, len(self.sets)):
|
||||||
|
for l in range(0, len(self.sets)):
|
||||||
|
r[k][l] = max(r[k][l], mm[k][l])
|
||||||
|
|
||||||
|
return r
|
||||||
|
|
||||||
|
def train(self, data, sets,order=1,parameters=None):
|
||||||
|
self.sets = sets
|
||||||
|
ndata = self.doTransformations(data)
|
||||||
|
tmpdata = FuzzySet.fuzzySeries(ndata, sets)
|
||||||
|
flrs = FLR.generateNonRecurrentFLRs(tmpdata)
|
||||||
|
self.R = self.operation_matrix(flrs)
|
||||||
|
|
||||||
|
def forecast(self, data, **kwargs):
|
||||||
|
|
||||||
|
ndata = np.array(self.doTransformations(data))
|
||||||
|
|
||||||
|
l = len(ndata)
|
||||||
|
npart = len(self.sets)
|
||||||
|
|
||||||
|
ret = []
|
||||||
|
|
||||||
|
for k in np.arange(0, l):
|
||||||
|
mv = FuzzySet.fuzzyInstance(ndata[k], self.sets)
|
||||||
|
|
||||||
|
r = [max([ min(self.R[i][j], mv[j]) for j in np.arange(0,npart) ]) for i in np.arange(0,npart)]
|
||||||
|
|
||||||
|
fs = np.ravel(np.argwhere(r == max(r)))
|
||||||
|
|
||||||
|
if len(fs) == 1:
|
||||||
|
ret.append(self.sets[fs[0]].centroid)
|
||||||
|
else:
|
||||||
|
mp = [self.sets[s].centroid for s in fs]
|
||||||
|
|
||||||
|
ret.append( sum(mp)/len(mp))
|
||||||
|
|
||||||
|
|
||||||
|
ret = self.doInverseTransformations(ret, params=[data[self.order - 1:]])
|
||||||
|
|
||||||
|
return ret
|
@ -17,16 +17,30 @@ from pyFTS.benchmarks import naive, arima
|
|||||||
from pyFTS.benchmarks import Measures
|
from pyFTS.benchmarks import Measures
|
||||||
from numpy import random
|
from numpy import random
|
||||||
|
|
||||||
|
os.chdir("/home/petronio/dados/Dropbox/Doutorado/Codigos/")
|
||||||
|
|
||||||
|
enrollments = pd.read_csv("DataSets/Enrollments.csv", sep=";")
|
||||||
|
enrollments = np.array(enrollments["Enrollments"])
|
||||||
|
|
||||||
|
from pyFTS import song
|
||||||
|
|
||||||
|
enrollments_fs = Grid.GridPartitioner(enrollments, 10).sets
|
||||||
|
|
||||||
|
model = song.ConventionalFTS('')
|
||||||
|
model.train(enrollments,enrollments_fs)
|
||||||
|
teste = model.forecast(enrollments)
|
||||||
|
|
||||||
|
print(teste)
|
||||||
|
|
||||||
|
|
||||||
#print(FCM.FCMPartitionerTrimf.__module__)
|
#print(FCM.FCMPartitionerTrimf.__module__)
|
||||||
|
|
||||||
#gauss = random.normal(0,1.0,1000)
|
#gauss = random.normal(0,1.0,1000)
|
||||||
#gauss_teste = random.normal(0,1.0,400)
|
#gauss_teste = random.normal(0,1.0,400)
|
||||||
|
|
||||||
|
|
||||||
os.chdir("/home/petronio/dados/Dropbox/Doutorado/Codigos/")
|
#taiexpd = pd.read_csv("DataSets/TAIEX.csv", sep=",")
|
||||||
|
#taiex = np.array(taiexpd["avg"][:5000])
|
||||||
taiexpd = pd.read_csv("DataSets/TAIEX.csv", sep=",")
|
|
||||||
taiex = np.array(taiexpd["avg"][:5000])
|
|
||||||
|
|
||||||
#from statsmodels.tsa.arima_model import ARIMA as stats_arima
|
#from statsmodels.tsa.arima_model import ARIMA as stats_arima
|
||||||
from statsmodels.tsa.tsatools import lagmat
|
from statsmodels.tsa.tsatools import lagmat
|
||||||
@ -38,7 +52,7 @@ from statsmodels.tsa.tsatools import lagmat
|
|||||||
#print(lag)
|
#print(lag)
|
||||||
#print(a)
|
#print(a)
|
||||||
|
|
||||||
from pyFTS.benchmarks import distributed_benchmarks as bchmk
|
#from pyFTS.benchmarks import distributed_benchmarks as bchmk
|
||||||
#from pyFTS.benchmarks import parallel_benchmarks as bchmk
|
#from pyFTS.benchmarks import parallel_benchmarks as bchmk
|
||||||
#from pyFTS.benchmarks import benchmarks as bchmk
|
#from pyFTS.benchmarks import benchmarks as bchmk
|
||||||
#from pyFTS.benchmarks import arima
|
#from pyFTS.benchmarks import arima
|
||||||
@ -52,11 +66,11 @@ from pyFTS.benchmarks import distributed_benchmarks as bchmk
|
|||||||
|
|
||||||
#bchmk.teste(taiex,['192.168.0.109', '192.168.0.101'])
|
#bchmk.teste(taiex,['192.168.0.109', '192.168.0.101'])
|
||||||
|
|
||||||
bchmk.point_sliding_window(taiex,2000,train=0.8, #models=[yu.WeightedFTS], # #
|
#bchmk.point_sliding_window(taiex,2000,train=0.8, #models=[yu.WeightedFTS], # #
|
||||||
partitioners=[Grid.GridPartitioner], #Entropy.EntropyPartitioner], # FCM.FCMPartitioner, ],
|
# partitioners=[Grid.GridPartitioner], #Entropy.EntropyPartitioner], # FCM.FCMPartitioner, ],
|
||||||
partitions= np.arange(10,200,step=5), #transformation=diff,
|
# partitions= np.arange(10,200,step=5), #transformation=diff,
|
||||||
dump=True, save=False, file="experiments/nasdaq_point_distributed.csv",
|
# dump=True, save=False, file="experiments/nasdaq_point_distributed.csv",
|
||||||
nodes=['192.168.1.42']) #, depends=[hofts, ifts])
|
# nodes=['192.168.1.42']) #, depends=[hofts, ifts])
|
||||||
|
|
||||||
#bchmk.testa(taiex,[10,20],partitioners=[Grid.GridPartitioner], nodes=['192.168.0.109', '192.168.0.101'])
|
#bchmk.testa(taiex,[10,20],partitioners=[Grid.GridPartitioner], nodes=['192.168.0.109', '192.168.0.101'])
|
||||||
|
|
||||||
@ -83,10 +97,10 @@ bchmk.point_sliding_window(taiex,2000,train=0.8, #models=[yu.WeightedFTS], # #
|
|||||||
# gauss,2000,train=0.8, dump=True, save=True, file="experiments/arima_gauss.csv")
|
# gauss,2000,train=0.8, dump=True, save=True, file="experiments/arima_gauss.csv")
|
||||||
|
|
||||||
|
|
||||||
bchmk.interval_sliding_window(gauss,2000,train=0.8, #transformation=diff, #models=[pwfts.ProbabilisticWeightedFTS], # #
|
#bchmk.interval_sliding_window(gauss,2000,train=0.8, #transformation=diff, #models=[pwfts.ProbabilisticWeightedFTS], # #
|
||||||
partitioners=[Grid.GridPartitioner], #Entropy.EntropyPartitioner], # FCM.FCMPartitioner, ],
|
# partitioners=[Grid.GridPartitioner], #Entropy.EntropyPartitioner], # FCM.FCMPartitioner, ],
|
||||||
partitions= np.arange(10,200,step=5), #
|
# partitions= np.arange(10,200,step=5), #
|
||||||
dump=True, save=False, file="experiments/nasdaq_interval.csv")
|
# dump=True, save=False, file="experiments/nasdaq_interval.csv")
|
||||||
|
|
||||||
#3bchmk.ahead_sliding_window(taiex,2000,train=0.8, steps=20, resolution=250, #transformation=diff, #models=[pwfts.ProbabilisticWeightedFTS], # #
|
#3bchmk.ahead_sliding_window(taiex,2000,train=0.8, steps=20, resolution=250, #transformation=diff, #models=[pwfts.ProbabilisticWeightedFTS], # #
|
||||||
# partitioners=[Grid.GridPartitioner], #Entropy.EntropyPartitioner], # FCM.FCMPartitioner, ],
|
# partitioners=[Grid.GridPartitioner], #Entropy.EntropyPartitioner], # FCM.FCMPartitioner, ],
|
||||||
|
Loading…
Reference in New Issue
Block a user