pyFTS/cheng.py

58 lines
1.7 KiB
Python
Raw Normal View History

"""
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.
"""
2017-04-20 02:58:25 +04:00
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
"""
2017-04-20 02:58:25 +04:00
def __init__(self, LHS, **kwargs):
super(TrendWeightedFLRG, self).__init__(LHS)
2017-04-20 02:58:25 +04:00
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:
2017-04-20 02:58:25 +04:00
count_nochange += 1.0
tmp = count_nochange
elif self.LHS.centroid > c.centroid:
2017-04-20 02:58:25 +04:00
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__("TWFTS " + name)
2017-04-20 02:58:25 +04:00
self.name = "Trend Weighted FTS"
self.detail = "Cheng"
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)
2017-04-20 02:58:25 +04:00
flrgs[flr.LHS.name].append(flr.RHS)
return (flrgs)