Source code for pyFTS.models.cheng

"""
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. 1826–1832, 2009.
"""

import numpy as np
from pyFTS.common import FuzzySet, FLR, fts
from pyFTS.models import yu


[docs]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
[docs] def weights(self, sets): 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 sets[self.LHS].centroid == sets[c].centroid: count_nochange += 1.0 tmp = count_nochange elif sets[self.LHS].centroid > sets[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
[docs]class TrendWeightedFTS(yu.WeightedFTS): """First Order Trend Weighted Fuzzy Time Series""" def __init__(self, **kwargs): super(TrendWeightedFTS, self).__init__(**kwargs) self.shortname = "TWFTS" self.name = "Trend Weighted FTS" self.detail = "Cheng" self.is_high_order = False
[docs] def generate_FLRG(self, flrs): for flr in flrs: if flr.LHS in self.flrgs: self.flrgs[flr.LHS].append_rhs(flr.RHS) else: self.flrgs[flr.LHS] = TrendWeightedFLRG(flr.LHS) self.flrgs[flr.LHS].append_rhs(flr.RHS)