Bugfixes on seasonal and multivariate models
This commit is contained in:
parent
3f435222ac
commit
f8927fd158
@ -3,7 +3,8 @@ import pandas as pd
|
|||||||
from pyFTS.common import FuzzySet
|
from pyFTS.common import FuzzySet
|
||||||
|
|
||||||
def fuzzyfy_instance(data_point, var):
|
def fuzzyfy_instance(data_point, var):
|
||||||
return FuzzySet.fuzzyfy(data_point, var.partitioner, mode='sets', method='fuzzy', alpha_cut=var.alpha_cut)
|
fsets = FuzzySet.fuzzyfy(data_point, var.partitioner, mode='sets', method='fuzzy', alpha_cut=var.alpha_cut)
|
||||||
|
return [(var.name, fs) for fs in fsets]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -88,10 +88,15 @@ class FuzzySet(FuzzySet.FuzzySet):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, datepart, name, mf, parameters, centroid, alpha=1.0, **kwargs):
|
def __init__(self, datepart, name, mf, parameters, centroid, alpha=1.0, **kwargs):
|
||||||
super(FuzzySet, self).__init__(name, mf, parameters, centroid, alpha, type = 'datetime', **kwargs)
|
super(FuzzySet, self).__init__(name, mf, parameters, centroid, alpha,
|
||||||
|
type=kwargs.get('type', 'datetime'),
|
||||||
|
**kwargs)
|
||||||
self.datepart = datepart
|
self.datepart = datepart
|
||||||
self.type = 'seasonal'
|
self.type = 'seasonal'
|
||||||
|
|
||||||
def membership(self, x):
|
def membership(self, x):
|
||||||
dp = strip_datepart(x, self.datepart)
|
if self.type == 'datetime':
|
||||||
|
dp = strip_datepart(x, self.datepart)
|
||||||
|
else:
|
||||||
|
dp = x
|
||||||
return self.mf(dp, self.parameters) * self.alpha
|
return self.mf(dp, self.parameters) * self.alpha
|
@ -64,6 +64,17 @@ class TimeGridPartitioner(partitioner.Partitioner):
|
|||||||
**kwargs))
|
**kwargs))
|
||||||
tmp.centroid = c
|
tmp.centroid = c
|
||||||
sets[set_name] = tmp
|
sets[set_name] = tmp
|
||||||
|
elif c == self.max - partlen:
|
||||||
|
tmp = Composite(set_name, superset=True)
|
||||||
|
tmp.append_set(FuzzySet(self.season, set_name, Membership.trimf,
|
||||||
|
[0.0000001, 0.0,
|
||||||
|
pl2], 0.0, alpha=.5,
|
||||||
|
**kwargs))
|
||||||
|
tmp.append_set(FuzzySet(self.season, set_name, Membership.trimf,
|
||||||
|
[c - partlen, c, c + partlen], c,
|
||||||
|
**kwargs))
|
||||||
|
tmp.centroid = c
|
||||||
|
sets[set_name] = tmp
|
||||||
else:
|
else:
|
||||||
sets[set_name] = FuzzySet(self.season, set_name, Membership.trimf,
|
sets[set_name] = FuzzySet(self.season, set_name, Membership.trimf,
|
||||||
[c - partlen, c, c + partlen], c,
|
[c - partlen, c, c + partlen], c,
|
||||||
|
@ -16,21 +16,38 @@ from pyFTS.common import Transformations
|
|||||||
|
|
||||||
tdiff = Transformations.Differential(1)
|
tdiff = Transformations.Differential(1)
|
||||||
|
|
||||||
data = pd.read_csv('/home/petronio/Downloads/priceHong').values
|
dataset = pd.read_csv('/home/petronio/Downloads/priceHong')
|
||||||
|
dataset['hour'] = dataset.index.values % 24
|
||||||
|
|
||||||
split = 24 * 800
|
split = 24 * 800
|
||||||
train = data[:split].flatten()
|
#train = data[:split].flatten()
|
||||||
test = data[split:].flatten()
|
#test = data[split:].flatten()
|
||||||
|
|
||||||
print(train)
|
#print(train)
|
||||||
|
|
||||||
fs_grid = Grid.GridPartitioner(data=train,npart=25)
|
from pyFTS.models.multivariate import common, variable, mvfts
|
||||||
#fs_entr.plot(ax[1])
|
from pyFTS.partitioners import Grid
|
||||||
|
from pyFTS.models.seasonal.common import DateTime
|
||||||
|
from pyFTS.models.seasonal import partitioner as seasonal
|
||||||
|
|
||||||
for method in [hofts.HighOrderFTS, pwfts.ProbabilisticWeightedFTS]:
|
vhour = variable.Variable("Hour", data_label="hour", partitioner=seasonal.TimeGridPartitioner, npart=24,
|
||||||
for order in [2,3]:
|
data=dataset, partitioner_specific={'seasonality': DateTime.hour_of_day, 'type': 'common'})
|
||||||
model = method(partitioner=fs_grid, order=order)
|
vprice = variable.Variable("Price", data_label="price", partitioner=Grid.GridPartitioner, npart=25,
|
||||||
model.fit(train)
|
data=dataset)
|
||||||
|
|
||||||
|
|
||||||
|
fig, ax = plt.subplots(nrows=2, ncols=1,figsize=[15,5])
|
||||||
|
|
||||||
|
vhour.partitioner.plot(ax[0])
|
||||||
|
vprice.partitioner.plot(ax[1])
|
||||||
|
|
||||||
|
model = mvfts.MVFTS()
|
||||||
|
#model.shortname += ' ' + key
|
||||||
|
model.append_variable(vhour)
|
||||||
|
model.append_variable(vprice)
|
||||||
|
# model.shortname += ' ' + w
|
||||||
|
model.target_variable = vprice
|
||||||
|
model.fit(dataset.iloc[:split])
|
||||||
|
|
||||||
'''
|
'''
|
||||||
from pyFTS.data import TAIEX, SP500, NASDAQ
|
from pyFTS.data import TAIEX, SP500, NASDAQ
|
||||||
|
Loading…
Reference in New Issue
Block a user