Refatoração dos códigos para padronizar com a rfts

This commit is contained in:
Petrônio Cândido de Lima e Silva 2016-10-19 11:27:57 -02:00
parent 587fce885e
commit 30ccb6a88f
6 changed files with 105 additions and 59 deletions

View File

@ -189,7 +189,10 @@ def SelecaoSimples_MenorRMSE(original,parameters,modelo):
sets = partitioner.GridPartitionerTrimf(original,p)
fts = modelo(str(p)+ " particoes")
fts.train(original,sets)
forecasted = [fts.forecast(xx) for xx in original]
#print(original)
forecasted = fts.forecast(original)
forecasted.insert(0,original[0])
#print(forecasted)
ax0.plot(forecasted,label=fts.name)
error = rmse(np.array(forecasted),np.array(original))
print(p,error)
@ -226,8 +229,8 @@ def SelecaoSimples_MenorRMSE(original,parameters,modelo):
sets = partitioner.GridPartitionerTrimf(difffts,p)
fts = modelo(str(p)+ " particoes")
fts.train(difffts,sets)
forecasted = [fts.forecast(xx) for xx in difffts]
#forecasted.insert(0,difffts[0])
forecasted = fts.forecast(difffts)
forecasted.insert(0,difffts[0])
ax2.plot(forecasted,label=fts.name)
error = rmse(np.array(forecasted),np.array(difffts))
print(p,error)

38
chen.py
View File

@ -24,14 +24,14 @@ class ConventionalFTS(fts.FTS):
super(ConventionalFTS, self).__init__(1,name)
self.flrgs = {}
def generateFLRG(self, flrs):
def generateFLRG(self, flrs):
flrgs = {}
for flr in flrs:
if flr.LHS in flrgs:
flrgs[flr.LHS].append(flr.RHS)
if flr.LHS.name in flrgs:
flrgs[flr.LHS.name].append(flr.RHS)
else:
flrgs[flr.LHS] = ConventionalFLRG(flr.LHS);
flrgs[flr.LHS].append(flr.RHS)
flrgs[flr.LHS.name] = ConventionalFLRG(flr.LHS);
flrgs[flr.LHS.name].append(flr.RHS)
return (flrgs)
def train(self, data, sets):
@ -42,23 +42,29 @@ class ConventionalFTS(fts.FTS):
def forecast(self,data):
mv = common.fuzzyInstance(data, self.sets)
l = 1
actual = self.sets[ np.argwhere( mv == max(mv) )[0,0] ]
ndata = np.array(data)
if actual.name not in self.flrgs:
return actual.centroid
l = len(ndata)
flrg = self.flrgs[actual.name]
ret = []
count = 0.0
denom = 0.0
for k in np.arange(1,l):
for s in flrg.RHS:
denom = denom + self.sets[s].centroid
count = count + 1.0
mv = common.fuzzyInstance(ndata[k], self.sets)
return denom/count
actual = self.sets[ np.argwhere( mv == max(mv) )[0,0] ]
if actual.name not in self.flrgs:
ret.append(actual.centroid)
else:
flrg = self.flrgs[actual.name]
mp = self.getMidpoints(flrg)
ret.append(sum(mp)/len(mp))
return ret

5
fts.py
View File

@ -1,3 +1,4 @@
import numpy as np
from pyFTS import *
class FTS:
@ -24,6 +25,10 @@ class FTS:
def train(self, data, sets):
pass
def getMidpoints(self,flrg):
ret = np.array([s.centroid for s in flrg.RHS])
return ret
def __str__(self):
tmp = self.name + ":\n"
for r in self.flrgs.keys():

View File

@ -48,14 +48,26 @@ class ImprovedWeightedFTS(fts.FTS):
self.flrgs = self.generateFLRG(flrs)
def forecast(self,data):
mv = common.fuzzyInstance(data, self.sets)
l = 1
actual = self.sets[ np.argwhere( mv == max(mv) )[0,0] ]
ndata = np.array(data)
if actual.name not in self.flrgs:
return actual.centroid
l = len(ndata)
flrg = self.flrgs[actual.name]
ret = []
mi = np.array([self.sets[s].centroid for s in flrg.RHS.keys()])
return mi.dot( flrg.weights() )
for k in np.arange(1,l):
mv = common.fuzzyInstance(ndata[k], self.sets)
actual = self.sets[ np.argwhere( mv == max(mv) )[0,0] ]
if actual.name not in self.flrgs:
ret.append(actual.centroid)
else:
flrg = self.flrgs[actual.name]
mp = self.getMidpoints(flrg)
ret.append( mi.dot( flrg.weights() ))
return ret

View File

@ -53,16 +53,27 @@ class ExponentialyWeightedFTS(fts.FTS):
self.flrgs = self.generateFLRG(flrs,c)
def forecast(self,data):
mv = common.fuzzyInstance(data, self.sets)
l = 1
actual = self.sets[ np.argwhere( mv == max(mv) )[0,0] ]
ndata = np.array(data)
if actual.name not in self.flrgs:
return actual.centroid
l = len(ndata)
flrg = self.flrgs[actual.name]
ret = []
mi = np.array([self.sets[s].centroid for s in flrg.RHS])
for k in np.arange(1,l):
return mi.dot( flrg.weights() )
mv = common.fuzzyInstance(ndata[k], self.sets)
actual = self.sets[ np.argwhere( mv == max(mv) )[0,0] ]
if actual.name not in self.flrgs:
ret.append(actual.centroid)
else:
flrg = self.flrgs[actual.name]
mp = self.getMidpoints(flrg)
ret.append( mi.dot( flrg.weights() ))
return ret

31
yu.py
View File

@ -35,11 +35,11 @@ class WeightedFTS(fts.FTS):
def generateFLRG(self, flrs):
flrgs = {}
for flr in flrs:
if flr.LHS in flrgs:
flrgs[flr.LHS].append(flr.RHS)
if flr.LHS.name in flrgs:
flrgs[flr.LHS.name].append(flr.RHS)
else:
flrgs[flr.LHS] = WeightedFLRG(flr.LHS);
flrgs[flr.LHS].append(flr.RHS)
flrgs[flr.LHS.name] = WeightedFLRG(flr.LHS);
flrgs[flr.LHS.name].append(flr.RHS)
return (flrgs)
def train(self, data, sets):
@ -49,17 +49,26 @@ class WeightedFTS(fts.FTS):
self.flrgs = self.generateFLRG(flrs)
def forecast(self,data):
l = 1
mv = common.fuzzyInstance(data, self.sets)
ndata = np.array(data)
actual = self.sets[ np.argwhere( mv == max(mv) )[0,0] ]
l = len(ndata)
if actual.name not in self.flrgs:
return actual.centroid
ret = []
flrg = self.flrgs[actual.name]
for k in np.arange(1,l):
mi = np.array([self.sets[s].centroid for s in flrg.RHS])
mv = common.fuzzyInstance(ndata[k], self.sets)
return mi.dot( flrg.weights() )
actual = self.sets[ np.argwhere( mv == max(mv) )[0,0] ]
if actual.name not in self.flrgs:
ret.append(actual.centroid)
else:
flrg = self.flrgs[actual.name]
mp = self.getMidpoints(flrg)
ret.append( mi.dot( flrg.weights() ))
return ret