Source code for pysad.core.base_transformer

from abc import ABC, abstractmethod
import numpy as np
from pysad.utils import _iterate


[docs]class BaseTransformer(ABC): """Base class for transforming methods. """ def __init__(self, output_dims): self.output_dims = output_dims
[docs] @abstractmethod def fit_partial(self, X): """Fits particular (next) timestep's features to train the transformer. Args: X (np.float64 array of shape (num_components,)): Input feature vector. Returns: object: self. """ pass
[docs] @abstractmethod def transform_partial(self, X): """Transforms particular (next) timestep's vector. Args: X (np.float64 array of shape (num_features,)): Input feature vector. Returns: transformed_X (np.float64 array of shape (num_components,)): Projected feature vector. """ pass
[docs] def fit_transform_partial(self, X): """Shortcut method that iteratively applies fit_partial and transform_partial, respectively. Args: X (np.float64 array of shape (num_components,)): Input feature vector. Returns: transformed_X (np.float64 array of shape (num_components,)): Projected feature vector. """ return self.fit_partial(X).transform_partial(X)
[docs] def transform(self, X): """Shortcut method that iteratively applies transform_partial to all instances in order. Args: X (np.float64 array of shape (num_instances, num_features)): Input feature vectors. Returns: np.float64 array of shape (num_instances, num_components): Projected feature vectors. """ output_dims = self.output_dims if self.output_dims > 0 else X.shape[1] transformed_X = np.empty((X.shape[0], output_dims), dtype=np.float64) for i, (xi, _) in enumerate(_iterate(X)): transformed_X[i] = self.transform_partial(xi) return transformed_X
[docs] def fit(self, X): """Shortcut method that iteratively applies fit_partial to all instances in order. Args: X (np.float64 array of shape (num_instances, num_features)): Input feature vectors. Returns: object: The fitted transformer """ for xi in _iterate(X): self.fit_partial(xi) return self
[docs] def fit_transform(self, X): """Shortcut method that iteratively applies fit_transform_partial to all instances in order. Args: X (np.float64 array of shape (num_instances, num_components)): Input feature vectors. Returns: np.float64 array of shape (num_instances, num_components): Projected feature vectors. """ output_dims = self.output_dims if self.output_dims > 0 else X.shape[1] transformed_X = np.empty((X.shape[0], output_dims), dtype=np.float64) for i, (xi, _) in enumerate(_iterate(X)): transformed_X[i] = self.fit_transform_partial(xi) return transformed_X