pyFTS/cheng.py
2017-05-09 11:08:39 -03:00

60 lines
1.8 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
from pyFTS import fts, yu
class TrendWeightedFLRG(yu.WeightedFLRG):
"""
First Order Trend Weighted Fuzzy Logical Relationship Group
"""
def __init__(self, LHS, **kwargs):
super(TrendWeightedFLRG, self).__init__(LHS)
def weights(self):
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)
return np.array([k / tot for k in weights])
class TrendWeightedFTS(yu.WeightedFTS):
"""First Order Trend Weighted Fuzzy Time Series"""
def __init__(self, name, **kwargs):
super(TrendWeightedFTS, self).__init__("")
self.shortname = "TWFTS " + name
self.name = "Trend Weighted FTS"
self.detail = "Cheng"
self.is_high_order = False
def generateFLRG(self, flrs):
flrgs = {}
for flr in flrs:
if flr.LHS.name in flrgs:
flrgs[flr.LHS.name].append(flr.RHS)
else:
flrgs[flr.LHS.name] = TrendWeightedFLRG(flr.LHS)
flrgs[flr.LHS.name].append(flr.RHS)
return (flrgs)