Bugfixes at pwfts.forecast_ahead_distribution
This commit is contained in:
parent
326d1b4f40
commit
1312d96246
@ -2,7 +2,6 @@
|
|||||||
Benchmark utility functions
|
Benchmark utility functions
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import numba
|
|
||||||
import matplotlib as plt
|
import matplotlib as plt
|
||||||
import matplotlib.cm as cmx
|
import matplotlib.cm as cmx
|
||||||
import matplotlib.colors as pltcolors
|
import matplotlib.colors as pltcolors
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
import time
|
import time
|
||||||
import numba
|
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
|
||||||
import matplotlib as plt
|
import matplotlib as plt
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import time
|
import time
|
||||||
import numba
|
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
import dill
|
import dill
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
@ -363,6 +363,7 @@ class ProbabilisticWeightedFTS(ifts.IntervalFTS):
|
|||||||
|
|
||||||
if 'bins' in kwargs:
|
if 'bins' in kwargs:
|
||||||
_bins = kwargs.pop('bins')
|
_bins = kwargs.pop('bins')
|
||||||
|
nbins = len(_bins)
|
||||||
else:
|
else:
|
||||||
nbins = kwargs.get("num_bins", 100)
|
nbins = kwargs.get("num_bins", 100)
|
||||||
_bins = np.linspace(uod[0], uod[1], nbins)
|
_bins = np.linspace(uod[0], uod[1], nbins)
|
||||||
@ -380,11 +381,15 @@ class ProbabilisticWeightedFTS(ifts.IntervalFTS):
|
|||||||
num = []
|
num = []
|
||||||
den = []
|
den = []
|
||||||
for s in flrgs:
|
for s in flrgs:
|
||||||
|
if s.get_key() in self.flrgs:
|
||||||
flrg = self.flrgs[s.get_key()]
|
flrg = self.flrgs[s.get_key()]
|
||||||
pk = flrg.lhs_conditional_probability(sample, self.sets, self.global_frequency_count, uod, nbins)
|
pk = flrg.lhs_conditional_probability(sample, self.sets, self.global_frequency_count, uod, nbins)
|
||||||
wi = flrg.rhs_conditional_probability(bin, self.sets, uod, nbins)
|
wi = flrg.rhs_conditional_probability(bin, self.sets, uod, nbins)
|
||||||
num.append(wi * pk)
|
num.append(wi * pk)
|
||||||
den.append(pk)
|
den.append(pk)
|
||||||
|
else:
|
||||||
|
num.append(0.0)
|
||||||
|
den.append(0.000000001)
|
||||||
pf = sum(num) / sum(den)
|
pf = sum(num) / sum(den)
|
||||||
|
|
||||||
dist.set(bin, pf)
|
dist.set(bin, pf)
|
||||||
@ -452,11 +457,11 @@ class ProbabilisticWeightedFTS(ifts.IntervalFTS):
|
|||||||
tmp.set(dat, 1.0)
|
tmp.set(dat, 1.0)
|
||||||
ret.append(tmp)
|
ret.append(tmp)
|
||||||
|
|
||||||
dist = self.forecast_distribution(sample, bins=_bins)
|
dist = self.forecast_distribution(sample, bins=_bins)[0]
|
||||||
|
|
||||||
ret.append(dist)
|
ret.append(dist)
|
||||||
|
|
||||||
for k in np.arange(self.order, steps+self.order):
|
for k in np.arange(self.order+1, steps+self.order+1):
|
||||||
dist = ProbabilityDistribution.ProbabilityDistribution(smooth, uod=uod, bins=_bins, **kwargs)
|
dist = ProbabilityDistribution.ProbabilityDistribution(smooth, uod=uod, bins=_bins, **kwargs)
|
||||||
|
|
||||||
lags = {}
|
lags = {}
|
||||||
@ -469,7 +474,7 @@ class ProbabilisticWeightedFTS(ifts.IntervalFTS):
|
|||||||
|
|
||||||
root = tree.FLRGTreeNode(None)
|
root = tree.FLRGTreeNode(None)
|
||||||
|
|
||||||
self.build_tree_without_order(root, lags, 0)
|
tree.build_tree_without_order(root, lags, 0)
|
||||||
|
|
||||||
# Trace all possible combinations between the bins of past distributions
|
# Trace all possible combinations between the bins of past distributions
|
||||||
|
|
||||||
@ -487,6 +492,8 @@ class ProbabilisticWeightedFTS(ifts.IntervalFTS):
|
|||||||
for bin in _bins:
|
for bin in _bins:
|
||||||
dist.set(bin, dist.density(bin) + pk * d.density(bin))
|
dist.set(bin, dist.density(bin) + pk * d.density(bin))
|
||||||
|
|
||||||
|
ret.append(dist)
|
||||||
|
|
||||||
ret = ret[self.order:]
|
ret = ret[self.order:]
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import numba
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
import matplotlib as plt
|
import matplotlib as plt
|
||||||
@ -15,7 +14,6 @@ all_methods = [Grid.GridPartitioner, Entropy.EntropyPartitioner, FCM.FCMPartitio
|
|||||||
mfs = [Membership.trimf, Membership.gaussmf, Membership.trapmf]
|
mfs = [Membership.trimf, Membership.gaussmf, Membership.trapmf]
|
||||||
|
|
||||||
|
|
||||||
@numba.jit()
|
|
||||||
def sliding_window_simple_search(data, windowsize, model, partitions, orders, **kwargs):
|
def sliding_window_simple_search(data, windowsize, model, partitions, orders, **kwargs):
|
||||||
|
|
||||||
_3d = len(orders) > 1
|
_3d = len(orders) > 1
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import numpy as np
|
import numpy as np
|
||||||
#import matplotlib.pyplot as plt
|
import matplotlib.pylab as plt
|
||||||
#from mpl_toolkits.mplot3d import Axes3D
|
#from mpl_toolkits.mplot3d import Axes3D
|
||||||
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
@ -17,9 +17,39 @@ from pyFTS.benchmarks import benchmarks as bchmk
|
|||||||
|
|
||||||
from pyFTS.models import pwfts
|
from pyFTS.models import pwfts
|
||||||
|
|
||||||
|
'''
|
||||||
bchmk.sliding_window_benchmarks(dataset, 1000, train=0.8, inc=0.2, methods=[pwfts.ProbabilisticWeightedFTS],
|
bchmk.sliding_window_benchmarks(dataset, 1000, train=0.8, inc=0.2, methods=[pwfts.ProbabilisticWeightedFTS],
|
||||||
benchmark_models=False, orders=[1], partitions=[10], #np.arange(10,100,2),
|
benchmark_models=False, orders=[1], partitions=[10], #np.arange(10,100,2),
|
||||||
progress=False, type='distribution',
|
progress=False, type='distribution',
|
||||||
distributed=False, nodes=['192.168.0.106', '192.168.0.105', '192.168.0.110'],
|
distributed=False, nodes=['192.168.0.106', '192.168.0.105', '192.168.0.110'],
|
||||||
save=True, file="pwfts_taiex_interval.csv")
|
save=True, file="pwfts_taiex_interval.csv")
|
||||||
|
'''
|
||||||
|
|
||||||
|
train_split = 2000
|
||||||
|
test_length = 200
|
||||||
|
|
||||||
|
from pyFTS.partitioners import Grid, Util as pUtil
|
||||||
|
partitioner = Grid.GridPartitioner(data=dataset[:train_split], npart=30)
|
||||||
|
|
||||||
|
from pyFTS.common import fts,tree
|
||||||
|
from pyFTS.models import hofts, pwfts
|
||||||
|
|
||||||
|
pfts1_taiex = pwfts.ProbabilisticWeightedFTS("1", partitioner=partitioner)
|
||||||
|
pfts1_taiex.fit(dataset[:train_split], save_model=True, file_path='pwfts')
|
||||||
|
pfts1_taiex.shortname = "1st Order"
|
||||||
|
|
||||||
|
print(pfts1_taiex)
|
||||||
|
|
||||||
|
tmp = pfts1_taiex.predict(dataset[train_split:train_split+200], type='distribution', steps_ahead=20)
|
||||||
|
f, ax = plt.subplots(3, 4, figsize=[20,15])
|
||||||
|
tmp[0].plot(ax[0][0], title='t=1')
|
||||||
|
tmp[2].plot(ax[0][1], title='t=20')
|
||||||
|
tmp[4].plot(ax[0][2], title='t=40')
|
||||||
|
tmp[6].plot(ax[0][3], title='t=60')
|
||||||
|
tmp[8].plot(ax[1][0], title='t=80')
|
||||||
|
tmp[10].plot(ax[1][1], title='t=100')
|
||||||
|
tmp[12].plot(ax[1][2], title='t=120')
|
||||||
|
tmp[14].plot(ax[1][3], title='t=140')
|
||||||
|
tmp[16].plot(ax[2][0], title='t=160')
|
||||||
|
tmp[18].plot(ax[2][1], title='t=180')
|
||||||
|
tmp[20].plot(ax[2][2], title='t=200')
|
Loading…
Reference in New Issue
Block a user