diff --git a/pyFTS/common/transformations/smoothing.py b/pyFTS/common/transformations/smoothing.py index 1f6a052..92b7b5f 100644 --- a/pyFTS/common/transformations/smoothing.py +++ b/pyFTS/common/transformations/smoothing.py @@ -1,10 +1,9 @@ from pyFTS.common.transformations.transformation import Transformation import numpy as np - class MovingAverage(Transformation): def __init__(self, **kwargs): - super(MovingAverage, self).__init__() + super(MovingAverage, self).__init__(**kwargs) self.name = 'Moving Average Smoothing' self.steps = kwargs.get('steps',2) @@ -20,8 +19,8 @@ class MovingAverage(Transformation): class ExponentialSmoothing(Transformation): def __init__(self, **kwargs): - super(MovingAverage, self).__init__() - self.name = 'Moving Average Smoothing' + super(ExponentialSmoothing,self).__init__(**kwargs) + self.name = 'Exponential Moving Average Smoothing' self.steps = kwargs.get('steps',2) self.beta = kwargs.get('beta',.5) @@ -39,3 +38,53 @@ class ExponentialSmoothing(Transformation): def inverse(self, data, param=None, **kwargs): return data + + +class AveragePooling(Transformation): + def __init__(self, **kwargs): + super(AveragePooling,self).__init__(**kwargs) + self.name = 'Exponential Average Smoothing' + self.kernel = kwargs.get('kernel',5) + self.stride = kwargs.get('stride',1) + self.padding = kwargs.get('padding','same') + + def apply(self, data): + result = [] + if self.padding == 'same': + for i in range(int(self.kernel/2), len(data)+int(self.kernel/2), self.stride): + result.append(np.mean(data[np.max([0,i-self.kernel]):np.min([i, len(data)])])) + + elif self.padding == 'valid': + for i in range(self.kernel, len(data), self.stride): + result.append(np.mean(data[i-self.kernel:i])) + else: + raise ValueError('Invalid padding schema') + return result + + def inverse(self, data, param=None, **kwargs): + return data + + +class MaxPooling(Transformation): + def __init__(self, **kwargs): + super(MaxPooling,self).__init__(**kwargs) + self.name = 'Exponential Average Smoothing' + self.kernel = kwargs.get('kernel',5) + self.stride = kwargs.get('stride',1) + self.padding = kwargs.get('padding','same') + + def apply(self, data): + result = [] + if self.padding == 'same': + for i in range(int(self.kernel/2), len(data)+int(self.kernel/2), self.stride): + result.append(np.max(data[np.max([0,i-self.kernel]):np.min([i, len(data)])])) + + elif self.padding == 'valid': + for i in range(self.kernel - 1, len(data), self.stride): + result.append(np.max(data[i-self.kernel:i])) + else: + raise ValueError('Invalid padding schema') + return result + + def inverse(self, data, param=None, **kwargs): + return data \ No newline at end of file diff --git a/setup.py b/setup.py index c896473..7361a74 100644 --- a/setup.py +++ b/setup.py @@ -5,6 +5,10 @@ import setuptools setuptools.setup( name='pyFTS', + install_requires=[ + 'matplotlib', + 'numpy', + 'pandas'], packages=['pyFTS', 'pyFTS.benchmarks', 'pyFTS.common', 'pyFTS.common.transformations', 'pyFTS.data', 'pyFTS.models.ensemble', 'pyFTS.models', 'pyFTS.models.seasonal', 'pyFTS.partitioners', 'pyFTS.probabilistic', 'pyFTS.tests', 'pyFTS.models.nonstationary', 'pyFTS.models.multivariate', @@ -28,6 +32,6 @@ setuptools.setup( 'Intended Audience :: Education', 'Topic :: Scientific/Engineering', 'Development Status :: 5 - Production/Stable' - + ] )