#[derive(Debug, Clone)]
pub struct FeatureExtraction {
pub time_series_features: TimeSeriesFeatures,
pub phase_space_features: PhaseSpaceFeatures,
pub frequency_features: FrequencyFeatures,
pub topological_features: TopologicalFeatures,
pub statistical_features: StatisticalFeatures,
pub normalization: FeatureNormalization,
}
#[derive(Debug, Clone)]
pub struct TimeSeriesFeatures {
pub window_size: usize,
pub overlap: f64,
pub trend_features: bool,
pub seasonality_features: bool,
pub autocorr_features: bool,
pub max_lag: usize,
pub change_point_features: bool,
}
#[derive(Debug, Clone)]
pub struct PhaseSpaceFeatures {
pub embedding_dim: usize,
pub time_delay: usize,
pub attractor_features: bool,
pub recurrence_features: bool,
pub recurrence_threshold: f64,
pub poincare_features: bool,
}
#[derive(Debug, Clone)]
pub struct FrequencyFeatures {
pub psd_features: bool,
pub frequency_bins: usize,
pub dominant_freq_features: bool,
pub spectral_entropy: bool,
pub wavelet_features: bool,
pub wavelet_type: WaveletType,
}
#[derive(Debug, Clone, Copy)]
pub enum WaveletType {
Daubechies(usize),
Morlet,
Mexican,
Gabor,
}
#[derive(Debug, Clone)]
pub struct TopologicalFeatures {
pub persistent_homology: bool,
pub max_dimension: usize,
pub betti_numbers: bool,
pub complexity_measures: bool,
}
#[derive(Debug, Clone)]
pub struct StatisticalFeatures {
pub moments: bool,
pub quantiles: bool,
pub quantile_levels: Vec<f64>,
pub distributionshape: bool,
pub correlation_features: bool,
pub entropy_measures: bool,
}
#[derive(Debug, Clone, Copy)]
pub enum FeatureNormalization {
None,
ZScore,
MinMax,
Robust,
QuantileUniform,
PowerTransform,
}
impl Default for FeatureExtraction {
fn default() -> Self {
Self {
time_series_features: TimeSeriesFeatures::default(),
phase_space_features: PhaseSpaceFeatures::default(),
frequency_features: FrequencyFeatures::default(),
topological_features: TopologicalFeatures::default(),
statistical_features: StatisticalFeatures::default(),
normalization: FeatureNormalization::ZScore,
}
}
}
impl Default for TimeSeriesFeatures {
fn default() -> Self {
Self {
window_size: 100,
overlap: 0.5,
trend_features: true,
seasonality_features: true,
autocorr_features: true,
max_lag: 20,
change_point_features: false,
}
}
}
impl Default for PhaseSpaceFeatures {
fn default() -> Self {
Self {
embedding_dim: 3,
time_delay: 1,
attractor_features: true,
recurrence_features: false,
recurrence_threshold: 0.1,
poincare_features: false,
}
}
}
impl Default for FrequencyFeatures {
fn default() -> Self {
Self {
psd_features: true,
frequency_bins: 64,
dominant_freq_features: true,
spectral_entropy: false,
wavelet_features: false,
wavelet_type: WaveletType::Daubechies(4),
}
}
}
impl Default for TopologicalFeatures {
fn default() -> Self {
Self {
persistent_homology: false,
max_dimension: 2,
betti_numbers: false,
complexity_measures: false,
}
}
}
impl Default for StatisticalFeatures {
fn default() -> Self {
Self {
moments: true,
quantiles: true,
quantile_levels: vec![0.25, 0.5, 0.75],
distributionshape: true,
correlation_features: false,
entropy_measures: false,
}
}
}