- fixing exponential moving average
- adding MaxPooling and AveragePooling transformations
This commit is contained in:
parent
ad6d82825e
commit
21519fd0dd
@ -1,10 +1,11 @@
|
||||
from pyFTS.common.transformations.transformation import Transformation
|
||||
import numpy as np
|
||||
from math import ceil
|
||||
|
||||
|
||||
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 +21,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 +40,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
|
Loading…
Reference in New Issue
Block a user