pyFTS/pyFTS/models/cheng.py
Petrônio Cândido 00db6a30ad - Compacting datasets with bz2
- Refactoring generate_flrg and train methods
 - Introducing batches and model saving on fit method
2018-03-02 19:20:21 -03:00

62 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Trend Weighted Fuzzy Time Series by Cheng, Chen and Wu (2009)
C.-H. Cheng, Y.-S. Chen, and Y.-L. Wu, “Forecasting innovation diffusion of products using trend-weighted fuzzy time-series model,”
Expert Syst. Appl., vol. 36, no. 2, pp. 18261832, 2009.
"""
import numpy as np
from pyFTS.common import FuzzySet, FLR, fts
from pyFTS.models import yu
class TrendWeightedFLRG(yu.WeightedFLRG):
"""
First Order Trend Weighted Fuzzy Logical Relationship Group
"""
def __init__(self, LHS, **kwargs):
super(TrendWeightedFLRG, self).__init__(LHS, **kwargs)
self.w = None
def weights(self):
if self.w is None:
count_nochange = 0.0
count_up = 0.0
count_down = 0.0
weights = []
for c in self.RHS:
tmp = 0
if self.LHS.centroid == c.centroid:
count_nochange += 1.0
tmp = count_nochange
elif self.LHS.centroid > c.centroid:
count_down += 1.0
tmp = count_down
else:
count_up += 1.0
tmp = count_up
weights.append(tmp)
tot = sum(weights)
self.w = np.array([k / tot for k in weights])
return self.w
class TrendWeightedFTS(yu.WeightedFTS):
"""First Order Trend Weighted Fuzzy Time Series"""
def __init__(self, name, **kwargs):
super(TrendWeightedFTS, self).__init__("", **kwargs)
self.shortname = "TWFTS " + name
self.name = "Trend Weighted FTS"
self.detail = "Cheng"
self.is_high_order = False
def generate_FLRG(self, flrs):
for flr in flrs:
if flr.LHS.name in self.flrgs:
self.flrgs[flr.LHS.name].append(flr.RHS)
else:
self.flrgs[flr.LHS.name] = TrendWeightedFLRG(flr.LHS)
self.flrgs[flr.LHS.name].append(flr.RHS)