Source code for pmdarima.preprocessing.endog.log

# -*- coding: utf-8 -*-

from .boxcox import BoxCoxEndogTransformer

__all__ = ['LogEndogTransformer']


[docs]class LogEndogTransformer(BoxCoxEndogTransformer): """Apply a log transformation to an endogenous array When ``y`` is your endogenous array, the log transform is ``log(y + lmbda)`` Parameters ---------- lmbda : float, optional (default=0.) The value to add to ``y`` to make it non-negative. If, after adding ``lmbda``, there are still negative values, a ValueError will be raised. neg_action : str, optional (default="raise") How to respond if any values in ``y <= 0`` after adding ``lmbda``. One of ('raise', 'warn', 'ignore'). If anything other than 'raise', values <= 0 will be truncated to the value of ``floor``. floor : float, optional (default=1e-16) A positive value that truncate values to if there are values in ``y`` that are zero or negative and ``neg_action`` is not 'raise'. Note that if values are truncated, invertibility will not be preserved, and the transformed array may not be perfectly inverse-transformed. """
[docs] def __init__(self, lmbda=0, neg_action="raise", floor=1e-16): super().__init__(neg_action=neg_action, floor=floor) # See: https://github.com/alkaline-ml/pmdarima/issues/407 self.lmbda = 0 self.lmbda2 = lmbda
[docs] def fit(self, y, X=None, **kwargs): # TODO: kwargs go away """Fit the transformer Must be called before ``transform``. Parameters ---------- y : array-like or None, shape=(n_samples,) The endogenous (time-series) array. X : array-like or None, shape=(n_samples, n_features), optional The exogenous array of additional covariates. Not used for endogenous transformers. Default is None, and non-None values will serve as pass-through arrays. """ return super().fit(y, X, **kwargs)
[docs] def transform(self, y, X=None, **transform_kwargs): """Apply the log transform to the array Parameters ---------- y : array-like or None, shape=(n_samples,) The endogenous (time-series) array. X : array-like or None, shape=(n_samples, n_features), optional The exogenous array of additional covariates. Not used for endogenous transformers. Default is None, and non-None values will serve as pass-through arrays. Returns ------- y_transform : array-like or None The log transformed y array X : array-like or None The exog array """ return super().transform(y, X, **transform_kwargs)
[docs] def inverse_transform(self, y, X=None, **kwargs): # TODO: kwargs go away """Inverse transform a transformed array Inverse the log transformation on the transformed array. Note that if truncation happened in the ``transform`` method, invertibility will not be preserved, and the transformed array may not be perfectly inverse-transformed. Parameters ---------- y : array-like or None, shape=(n_samples,) The transformed endogenous (time-series) array. X : array-like or None, shape=(n_samples, n_features), optional The exogenous array of additional covariates. Not used for endogenous transformers. Default is None, and non-None values will serve as pass-through arrays. Returns ------- y : array-like or None The inverse-transformed y array X : array-like or None The inverse-transformed exogenous array """ return super().inverse_transform(y, X, **kwargs)
[docs] def get_params(self, deep=True): """Get parameters for this estimator. Parameters ---------- deep : bool, default=True If True, will return the parameters for this estimator and contained subobjects that are estimators. Returns ------- params : mapping of string to any Parameter names mapped to their values. """ # this method is shadowed because we shadow the the lmbda parameter # name. Instead of setting lmbda, this transformer stores the parameter # as lmbda2 # See: https://github.com/alkaline-ml/pmdarima/issues/407 # Thanks to @jseabold params = super().get_params(deep=deep) params['lmbda'] = self.lmbda2 return params