- Non Stationary Fuzzy Time Series - NSFTS: stable version
This commit is contained in:
parent
b3db1a60a3
commit
a8e3ba4810
@ -52,7 +52,7 @@ def generateRecurrentFLRs(fuzzyData):
|
|||||||
tmp = FLR(l, r)
|
tmp = FLR(l, r)
|
||||||
flrs.append(tmp)
|
flrs.append(tmp)
|
||||||
else:
|
else:
|
||||||
tmp = FLR.FLR(lhs,rhs)
|
tmp = FLR(lhs,rhs)
|
||||||
flrs.append(tmp)
|
flrs.append(tmp)
|
||||||
return flrs
|
return flrs
|
||||||
|
|
||||||
|
@ -221,9 +221,9 @@ class PolynomialNonStationaryPartitioner(partitioner.Partitioner):
|
|||||||
def get_polynomial_perturbations(self, data, **kwargs):
|
def get_polynomial_perturbations(self, data, **kwargs):
|
||||||
w = kwargs.get("window_size", int(len(data) / 5))
|
w = kwargs.get("window_size", int(len(data) / 5))
|
||||||
deg = kwargs.get("degree", 2)
|
deg = kwargs.get("degree", 2)
|
||||||
xmax = [0]
|
xmax = [data[0]]
|
||||||
tmax = [0]
|
tmax = [0]
|
||||||
xmin = [0]
|
xmin = [data[0]]
|
||||||
tmin = [0]
|
tmin = [0]
|
||||||
lengs = [0]
|
lengs = [0]
|
||||||
tlengs = [0]
|
tlengs = [0]
|
||||||
|
@ -76,11 +76,21 @@ class NonStationaryFTS(fts.FTS):
|
|||||||
|
|
||||||
for k in np.arange(0, l):
|
for k in np.arange(0, l):
|
||||||
|
|
||||||
|
#print("input: " + str(ndata[k]))
|
||||||
|
|
||||||
tdisp = k + time_displacement
|
tdisp = k + time_displacement
|
||||||
|
|
||||||
affected_sets = [ [set, set.membership(ndata[k], tdisp)]
|
affected_sets = [ [set, set.membership(ndata[k], tdisp)]
|
||||||
for set in self.sets if set.membership(ndata[k], tdisp) > 0.0]
|
for set in self.sets if set.membership(ndata[k], tdisp) > 0.0]
|
||||||
|
|
||||||
|
if len(affected_sets) == 0:
|
||||||
|
if self.sets[0].get_lower(tdisp) > ndata[k]:
|
||||||
|
affected_sets.append([self.sets[0], 1.0])
|
||||||
|
elif self.sets[-1].get_upper(tdisp) < ndata[k]:
|
||||||
|
affected_sets.append([self.sets[-1], 1.0])
|
||||||
|
|
||||||
|
#print(affected_sets)
|
||||||
|
|
||||||
tmp = []
|
tmp = []
|
||||||
for aset in affected_sets:
|
for aset in affected_sets:
|
||||||
if aset[0] in self.flrgs:
|
if aset[0] in self.flrgs:
|
||||||
@ -88,7 +98,11 @@ class NonStationaryFTS(fts.FTS):
|
|||||||
else:
|
else:
|
||||||
tmp.append(aset[0].get_midpoint(tdisp) * aset[1])
|
tmp.append(aset[0].get_midpoint(tdisp) * aset[1])
|
||||||
|
|
||||||
ret.append(sum(tmp))
|
pto = sum(tmp)
|
||||||
|
|
||||||
|
#print(pto)
|
||||||
|
|
||||||
|
ret.append(pto)
|
||||||
|
|
||||||
ret = self.doInverseTransformations(ret, params=[data[self.order - 1:]])
|
ret = self.doInverseTransformations(ret, params=[data[self.order - 1:]])
|
||||||
|
|
||||||
|
@ -15,13 +15,19 @@ def plot_sets(uod, sets, start=0, end=10, tam=[5, 5], colors=None, save=False, f
|
|||||||
param = set.perturbated_parameters[t]
|
param = set.perturbated_parameters[t]
|
||||||
|
|
||||||
if set.mf == Membership.trimf:
|
if set.mf == Membership.trimf:
|
||||||
axes.plot([t, t+1, t], param)
|
if t == start:
|
||||||
|
axes.plot([t, t+1, t], param, label=set.name)
|
||||||
|
else:
|
||||||
|
axes.plot([t, t + 1, t], param)
|
||||||
|
|
||||||
ticks.extend(["t+"+str(t),""])
|
ticks.extend(["t+"+str(t),""])
|
||||||
|
|
||||||
axes.set_ylabel("Universe of Discourse")
|
axes.set_ylabel("Universe of Discourse")
|
||||||
axes.set_xlabel("Time")
|
axes.set_xlabel("Time")
|
||||||
plt.xticks([k for k in np.arange(0,2*end,1)], ticks, rotation='vertical')
|
plt.xticks([k for k in np.arange(0,end,1)], ticks, rotation='vertical')
|
||||||
|
|
||||||
|
handles0, labels0 = axes.get_legend_handles_labels()
|
||||||
|
lgd = axes.legend(handles0, labels0, loc=2, bbox_to_anchor=(1, 1))
|
||||||
|
|
||||||
plt.tight_layout()
|
plt.tight_layout()
|
||||||
|
|
||||||
|
@ -79,4 +79,4 @@ class Partitioner(object):
|
|||||||
ax.plot(tmpx, tmpy)
|
ax.plot(tmpx, tmpy)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name + ":\n ".join([str(a) + "\n" for a in self.sets])
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
|
import os
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from pyFTS.common import Membership
|
from pyFTS.common import Membership
|
||||||
from pyFTS.nonstationary import common,perturbation,util,nsfts
|
from pyFTS.nonstationary import common,perturbation,util,nsfts
|
||||||
from pyFTS.partitioners import Grid
|
from pyFTS.partitioners import Grid
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
|
import pandas as pd
|
||||||
|
os.chdir("/home/petronio/Dropbox/Doutorado/Codigos/")
|
||||||
|
|
||||||
|
"""
|
||||||
def generate_heteroskedastic_linear(mu_ini, sigma_ini, mu_inc, sigma_inc, it=10, num=35):
|
def generate_heteroskedastic_linear(mu_ini, sigma_ini, mu_inc, sigma_inc, it=10, num=35):
|
||||||
mu = mu_ini
|
mu = mu_ini
|
||||||
sigma = sigma_ini
|
sigma = sigma_ini
|
||||||
@ -17,6 +20,8 @@ def generate_heteroskedastic_linear(mu_ini, sigma_ini, mu_inc, sigma_inc, it=10,
|
|||||||
|
|
||||||
|
|
||||||
lmv1 = generate_heteroskedastic_linear(1,0.1,1,0.3)
|
lmv1 = generate_heteroskedastic_linear(1,0.1,1,0.3)
|
||||||
|
#lmv1 = generate_heteroskedastic_linear(5,0.1,0,0.2)
|
||||||
|
#lmv1 = generate_heteroskedastic_linear(1,0.3,1,0)
|
||||||
|
|
||||||
ns = 5 #number of fuzzy sets
|
ns = 5 #number of fuzzy sets
|
||||||
ts = 200
|
ts = 200
|
||||||
@ -25,19 +30,54 @@ test = lmv1[ts:]
|
|||||||
w = 25
|
w = 25
|
||||||
deg = 4
|
deg = 4
|
||||||
|
|
||||||
fig, axes = plt.subplots(nrows=1, ncols=1, figsize=[10,5])
|
|
||||||
|
|
||||||
tmp_fs = Grid.GridPartitioner(train[:35], 10)
|
tmp_fs = Grid.GridPartitioner(train[:35], 10)
|
||||||
|
|
||||||
fs = common.PolynomialNonStationaryPartitioner(train, tmp_fs, window_size=35, degree=1)
|
fs = common.PolynomialNonStationaryPartitioner(train, tmp_fs, window_size=35, degree=1)
|
||||||
|
|
||||||
nsfts1 = nsfts.NonStationaryFTS("", partitioner=fs)
|
nsfts1 = nsfts.NonStationaryFTS("", partitioner=fs)
|
||||||
|
|
||||||
nsfts1.train(train[:35])
|
nsfts1.train(train[:100])
|
||||||
|
|
||||||
tmp = nsfts1.forecast(test, time_displacement=200)
|
print(fs)
|
||||||
|
|
||||||
axes.plot(test)
|
print(nsfts1)
|
||||||
axes.plot(tmp)
|
|
||||||
|
tmp = nsfts1.forecast(test[:10], time_displacement=200)
|
||||||
|
|
||||||
print(tmp)
|
print(tmp)
|
||||||
|
"""
|
||||||
|
|
||||||
|
passengers = pd.read_csv("DataSets/AirPassengers.csv", sep=",")
|
||||||
|
passengers = np.array(passengers["Passengers"])
|
||||||
|
|
||||||
|
ts = 80
|
||||||
|
|
||||||
|
trainp = passengers[:ts]
|
||||||
|
testp = passengers[ts:]
|
||||||
|
|
||||||
|
tmp_fsp = Grid.GridPartitioner(trainp[:50], 10)
|
||||||
|
|
||||||
|
fsp = common.PolynomialNonStationaryPartitioner(trainp, tmp_fsp, window_size=20, degree=1)
|
||||||
|
|
||||||
|
nsftsp = nsfts.NonStationaryFTS("", partitioner=fsp)
|
||||||
|
|
||||||
|
nsftsp.train(trainp[:50])
|
||||||
|
|
||||||
|
print(fsp)
|
||||||
|
|
||||||
|
print(nsftsp)
|
||||||
|
|
||||||
|
tmpp = nsftsp.forecast(testp, time_displacement=ts)
|
||||||
|
|
||||||
|
print(testp)
|
||||||
|
print(tmpp)
|
||||||
|
|
||||||
|
#fig, axes = plt.subplots(nrows=1, ncols=1, figsize=[15,5])
|
||||||
|
|
||||||
|
"""
|
||||||
|
axes.plot(testp, label="Original")
|
||||||
|
#axes.plot(tmpp, label="NSFTS")
|
||||||
|
|
||||||
|
handles0, labels0 = axes.get_legend_handles_labels()
|
||||||
|
lgd = axes.legend(handles0, labels0, loc=2)
|
||||||
|
"""
|
Loading…
Reference in New Issue
Block a user