scirs2_integrate/analysis/ml_prediction/
features.rs1#[derive(Debug, Clone)]
8pub struct FeatureExtraction {
9 pub time_series_features: TimeSeriesFeatures,
11 pub phase_space_features: PhaseSpaceFeatures,
13 pub frequency_features: FrequencyFeatures,
15 pub topological_features: TopologicalFeatures,
17 pub statistical_features: StatisticalFeatures,
19 pub normalization: FeatureNormalization,
21}
22
23#[derive(Debug, Clone)]
25pub struct TimeSeriesFeatures {
26 pub window_size: usize,
28 pub overlap: f64,
30 pub trend_features: bool,
32 pub seasonality_features: bool,
34 pub autocorr_features: bool,
36 pub max_lag: usize,
38 pub change_point_features: bool,
40}
41
42#[derive(Debug, Clone)]
44pub struct PhaseSpaceFeatures {
45 pub embedding_dim: usize,
47 pub time_delay: usize,
49 pub attractor_features: bool,
51 pub recurrence_features: bool,
53 pub recurrence_threshold: f64,
55 pub poincare_features: bool,
57}
58
59#[derive(Debug, Clone)]
61pub struct FrequencyFeatures {
62 pub psd_features: bool,
64 pub frequency_bins: usize,
66 pub dominant_freq_features: bool,
68 pub spectral_entropy: bool,
70 pub wavelet_features: bool,
72 pub wavelet_type: WaveletType,
74}
75
76#[derive(Debug, Clone, Copy)]
78pub enum WaveletType {
79 Daubechies(usize),
80 Morlet,
81 Mexican,
82 Gabor,
83}
84
85#[derive(Debug, Clone)]
87pub struct TopologicalFeatures {
88 pub persistent_homology: bool,
90 pub max_dimension: usize,
92 pub betti_numbers: bool,
94 pub complexity_measures: bool,
96}
97
98#[derive(Debug, Clone)]
100pub struct StatisticalFeatures {
101 pub moments: bool,
103 pub quantiles: bool,
105 pub quantile_levels: Vec<f64>,
107 pub distributionshape: bool,
109 pub correlation_features: bool,
111 pub entropy_measures: bool,
113}
114
115#[derive(Debug, Clone, Copy)]
117pub enum FeatureNormalization {
118 None,
120 ZScore,
122 MinMax,
124 Robust,
126 QuantileUniform,
128 PowerTransform,
130}
131
132impl Default for FeatureExtraction {
133 fn default() -> Self {
134 Self {
135 time_series_features: TimeSeriesFeatures::default(),
136 phase_space_features: PhaseSpaceFeatures::default(),
137 frequency_features: FrequencyFeatures::default(),
138 topological_features: TopologicalFeatures::default(),
139 statistical_features: StatisticalFeatures::default(),
140 normalization: FeatureNormalization::ZScore,
141 }
142 }
143}
144
145impl Default for TimeSeriesFeatures {
146 fn default() -> Self {
147 Self {
148 window_size: 100,
149 overlap: 0.5,
150 trend_features: true,
151 seasonality_features: true,
152 autocorr_features: true,
153 max_lag: 20,
154 change_point_features: false,
155 }
156 }
157}
158
159impl Default for PhaseSpaceFeatures {
160 fn default() -> Self {
161 Self {
162 embedding_dim: 3,
163 time_delay: 1,
164 attractor_features: true,
165 recurrence_features: false,
166 recurrence_threshold: 0.1,
167 poincare_features: false,
168 }
169 }
170}
171
172impl Default for FrequencyFeatures {
173 fn default() -> Self {
174 Self {
175 psd_features: true,
176 frequency_bins: 64,
177 dominant_freq_features: true,
178 spectral_entropy: false,
179 wavelet_features: false,
180 wavelet_type: WaveletType::Daubechies(4),
181 }
182 }
183}
184
185impl Default for TopologicalFeatures {
186 fn default() -> Self {
187 Self {
188 persistent_homology: false,
189 max_dimension: 2,
190 betti_numbers: false,
191 complexity_measures: false,
192 }
193 }
194}
195
196impl Default for StatisticalFeatures {
197 fn default() -> Self {
198 Self {
199 moments: true,
200 quantiles: true,
201 quantile_levels: vec![0.25, 0.5, 0.75],
202 distributionshape: true,
203 correlation_features: false,
204 entropy_measures: false,
205 }
206 }
207}