import copy
from typing import Tuple, Union
import numpy as np
import pandas as pd
from ...utils.constants import NUMERICAL
from ...utils.results import ValidationResult
[docs]
class FEKinematics:
def __init__(self, dataset):
self.dataset = dataset
self.key = "data_fe_kinematics"
self.fitted_ = False
[docs]
def run(self,
features: Union[str, Tuple] = None,
dataset: str = "main",
n_timesteps: int = None,
n_features_per_step: int = None):
"""Generates velocity, acceleration, and kinematic summary features from temporal sequences.
Extracts kinematic quantities from multi-step time series data: last velocity,
last acceleration, mean speed, kinetic energy, and directional persistence.
Parameters
----------
features : str or tuple, default=None
Features to use (treated as flat temporal sequence). If None, all numerical features are used.
dataset : {"main", "train", "test"}, default="main"
Dataset used to fit the transformer.
n_timesteps : int, default=None
Number of time steps. If None, inferred from data.
n_features_per_step : int, default=None
Features per time step. If None, inferred from data.
"""
from .gaml.kinematics import KinematicsTransformer
inputs = locals()
inputs.pop('self', None)
if features is None:
features = [fn for fn, ft in zip(self.dataset.all_feature_names,
self.dataset.all_feature_types)
if ft == NUMERICAL]
if isinstance(features, str):
features = [features]
self.all_feature_names_in_ = copy.copy(self.dataset.all_feature_names)
self.feature_names_in_ = list(features)
data = self.dataset.get_data(dataset=dataset)
feature_indices = [self.dataset.all_feature_names.index(fn) for fn in features]
X = data[:, feature_indices].astype(np.float32)
self.gaml_transformer_ = KinematicsTransformer(n_timesteps=n_timesteps,
n_features_per_step=n_features_per_step)
self.gaml_transformer_.fit(X)
self.feature_names_out_ = self.gaml_transformer_.get_feature_names()
self.fitted_ = True
result = ValidationResult(key=self.key,
data=self.dataset.name,
inputs=inputs,
value={"n_features_out": len(self.feature_names_out_),
"feature_names_out": self.feature_names_out_})
return result