use scirs2_core::ndarray::{Array1, Array2};
use std::collections::HashMap;
use std::time::Duration;
use super::types_2::{
AcquisitionFunction, ImportanceGetter, ImputerConfig, PipelineConfiguration,
PowerTransformerConfig, QuantileTransformerConfig, ScoringMetric, TrainedStep,
};
#[derive(Debug, Clone)]
pub enum FeatureOrigin {
Original(usize),
Engineered {
source_features: Vec<usize>,
operation: String,
},
Transformed {
source_feature: usize,
transformation: String,
},
}
#[derive(Debug, Clone)]
pub struct OutlierParams {
pub decision_function: Array1<f64>,
pub threshold: f64,
}
#[derive(Debug, Clone)]
pub struct PipelineInfo {
pub n_preprocessing_steps: usize,
pub n_feature_engineering_steps: usize,
pub n_selection_methods: usize,
pub has_dimensionality_reduction: bool,
pub has_model_selection: bool,
pub config: PipelineConfiguration,
}
#[derive(Debug, Clone)]
pub enum LoggingLevel {
None,
Error,
Warning,
Info,
Debug,
Trace,
}
#[derive(Debug, Clone)]
pub struct FeatureMapping {
pub original_features: usize,
pub final_features: usize,
pub feature_names: Vec<String>,
pub feature_origins: Vec<FeatureOrigin>,
pub transformation_history: Vec<TransformationStep>,
}
#[derive(Debug, Clone)]
pub enum CorrelationMethod {
Pearson,
Spearman,
Kendall,
}
#[derive(Debug, Clone)]
pub struct TransformationStep {
pub step_name: String,
pub input_features: usize,
pub output_features: usize,
pub transformation_type: TransformationType,
}
#[derive(Debug, Clone)]
pub struct PowerParams {
pub lambdas: Array1<f64>,
}
#[derive(Debug, Clone)]
pub enum PrefetchStrategy {
None,
Sequential,
Random,
Adaptive,
}
#[derive(Debug, Clone)]
pub enum OutlierMethod {
IsolationForest,
LocalOutlierFactor,
OneClassSVM,
EllipticEnvelope,
}
#[derive(Debug, Clone)]
pub enum TransformationType {
OneToOne,
OneToMany,
ManyToOne,
ManyToMany,
}
#[derive(Debug, Clone)]
pub enum WindowStatistic {
Mean,
Std,
Min,
Max,
Median,
Skewness,
Kurtosis,
}
#[derive(Debug, Clone)]
pub enum SelectionCount {
K(usize),
Percentile(f64),
FDR(f64),
FPR(f64),
FWER(f64),
}
#[derive(Debug, Clone)]
pub struct OutlierConfig {
pub method: OutlierMethod,
pub threshold: f64,
pub contamination: f64,
}
#[derive(Debug, Clone)]
pub enum PowerMethod {
YeoJohnson,
BoxCox,
}
#[derive(Debug, Clone)]
pub struct ScalerParams {
pub mean: Array1<f64>,
pub scale: Array1<f64>,
}
#[derive(Debug, Clone)]
pub struct OptimizationConfiguration {
pub use_simd: bool,
pub chunk_size: usize,
pub thread_pool_size: Option<usize>,
pub memory_pool_size: usize,
pub cache_size: usize,
pub prefetch_strategy: PrefetchStrategy,
pub vectorization_threshold: usize,
}
#[derive(Debug, Clone)]
pub struct RobustScalerParams {
pub center: Array1<f64>,
pub scale: Array1<f64>,
}
#[derive(Debug, Clone)]
pub enum ErrorHandling {
Strict,
Graceful,
Logging,
}
#[derive(Debug, Clone)]
pub enum MissingValueIndicator {
NaN,
Value(f64),
}
#[derive(Debug, Clone)]
pub enum PreprocessingStep {
StandardScaler {
config: StandardScalerConfig,
trained_params: Option<ScalerParams>,
},
RobustScaler {
config: RobustScalerConfig,
trained_params: Option<RobustScalerParams>,
},
MinMaxScaler {
config: MinMaxScalerConfig,
trained_params: Option<MinMaxScalerParams>,
},
QuantileTransformer {
config: QuantileTransformerConfig,
trained_params: Option<QuantileParams>,
},
PowerTransformer {
config: PowerTransformerConfig,
trained_params: Option<PowerParams>,
},
MissingValueImputer {
config: ImputerConfig,
trained_params: Option<ImputerParams>,
},
OutlierRemover {
config: OutlierConfig,
trained_params: Option<OutlierParams>,
},
}
#[derive(Debug, Clone)]
pub struct RobustScalerConfig {
pub with_centering: bool,
pub with_scaling: bool,
pub quantile_range: (f64, f64),
}
#[derive(Debug, Clone)]
pub struct MinMaxScalerConfig {
pub feature_range: (f64, f64),
pub clip: bool,
}
#[derive(Debug, Clone)]
pub struct StandardScalerConfig {
pub with_mean: bool,
pub with_std: bool,
}
#[derive(Debug, Clone)]
pub struct MinMaxScalerParams {
pub min: Array1<f64>,
pub scale: Array1<f64>,
}
#[derive(Debug, Clone)]
pub enum UnivariateMethod {
Chi2,
ANOVA,
MutualInfo,
Correlation,
}
#[derive(Debug, Clone)]
pub enum RFEEstimator {
SVM,
RandomForest,
LinearRegression,
LogisticRegression,
}
#[derive(Debug, Clone)]
pub struct PipelineMetadata {
pub total_training_time: Duration,
pub total_transform_time: Duration,
pub memory_usage_peak: usize,
pub feature_reduction_ratio: f64,
pub performance_metrics: HashMap<String, f64>,
pub validation_results: Option<ValidationResults>,
}
#[derive(Debug, Clone)]
pub enum TreeEstimatorType {
RandomForest,
ExtraTrees,
GradientBoosting,
AdaBoost,
}
#[derive(Debug, Clone)]
pub enum ValidationStrategy {
None,
Basic,
Comprehensive,
Statistical,
}
#[derive(Debug, Clone)]
pub enum MemoryOptimization {
None,
Conservative,
Aggressive,
}
#[derive(Debug, Clone)]
pub struct QuantileParams {
pub quantiles: Array2<f64>,
pub references: Array1<f64>,
}
#[derive(Debug, Clone)]
pub enum Distribution {
Uniform,
Normal,
}
#[derive(Debug, Clone)]
pub enum ModelSelectionStep {
CrossValidationSelection {
estimator: ModelEstimator,
cv_folds: usize,
scoring: ScoringMetric,
feature_scores: Option<Array1<f64>>,
},
ForwardSelection {
estimator: ModelEstimator,
max_features: usize,
scoring: ScoringMetric,
selected_features: Option<Vec<usize>>,
},
BackwardElimination {
estimator: ModelEstimator,
min_features: usize,
scoring: ScoringMetric,
remaining_features: Option<Vec<usize>>,
},
StepwiseSelection {
estimator: ModelEstimator,
direction: StepwiseDirection,
p_enter: f64,
p_remove: f64,
selected_features: Option<Vec<usize>>,
},
BayesianOptimization {
estimator: ModelEstimator,
acquisition_function: AcquisitionFunction,
n_calls: usize,
optimal_features: Option<Vec<usize>>,
},
}
#[derive(Debug, Clone)]
pub enum ICAAlgorithm {
Parallel,
Deflation,
}
#[derive(Debug, Clone)]
pub struct ImputerParams {
pub statistics: Array1<f64>,
}
#[derive(Debug, Clone)]
pub enum BinningStrategy {
Uniform,
Quantile,
KMeans,
}
#[derive(Debug, Clone)]
pub enum SelectionThreshold {
Mean,
Median,
Absolute(f64),
Percentile(f64),
Auto,
}
#[derive(Debug, Clone)]
pub struct ValidationResults {
pub cross_validation_scores: Vec<f64>,
pub stability_scores: Vec<f64>,
pub robustness_scores: Vec<f64>,
pub statistical_significance: bool,
}
#[derive(Debug, Clone)]
pub enum SelectionMethod {
UnivariateFilter {
method: UnivariateMethod,
k: SelectionCount,
score_func: UnivariateScoreFunction,
},
RecursiveFeatureElimination {
estimator: RFEEstimator,
n_features: SelectionCount,
step: f64,
importance_getter: ImportanceGetter,
},
SelectFromModel {
estimator: ModelEstimator,
threshold: SelectionThreshold,
prefit: bool,
max_features: Option<usize>,
},
VarianceThreshold {
threshold: f64,
feature_variance: Option<Array1<f64>>,
},
CorrelationFilter {
threshold: f64,
method: CorrelationMethod,
correlation_matrix: Option<Array2<f64>>,
},
MutualInformation {
k: SelectionCount,
discrete_features: Vec<bool>,
random_state: Option<u64>,
},
LASSO {
alpha: f64,
max_iter: usize,
tol: f64,
coefficients: Option<Array1<f64>>,
},
ElasticNet {
alpha: f64,
l1_ratio: f64,
max_iter: usize,
tol: f64,
coefficients: Option<Array1<f64>>,
},
TreeBased {
estimator_type: TreeEstimatorType,
n_estimators: usize,
max_depth: Option<usize>,
feature_importances: Option<Array1<f64>>,
},
GeneticAlgorithm {
population_size: usize,
n_generations: usize,
mutation_rate: f64,
crossover_rate: f64,
best_individuals: Option<Vec<Vec<bool>>>,
},
ParticleSwarmOptimization {
n_particles: usize,
n_iterations: usize,
inertia: f64,
cognitive: f64,
social: f64,
best_positions: Option<Vec<Vec<f64>>>,
},
SimulatedAnnealing {
initial_temp: f64,
cooling_rate: f64,
min_temp: f64,
max_iter: usize,
current_solution: Option<Vec<bool>>,
},
}
#[derive(Debug, Clone)]
pub enum UnivariateScoreFunction {
Chi2,
FClassif,
FRegression,
MutualInfoClassif,
MutualInfoRegression,
}
#[derive(Debug, Clone)]
pub enum SVDSolver {
Auto,
Full,
Arpack,
Randomized,
}
#[derive(Debug, Clone)]
pub enum SVDAlgorithm {
Randomized,
Arpack,
}
#[derive(Debug, Clone)]
pub enum StepwiseDirection {
Forward,
Backward,
Both,
}
#[derive(Debug, Clone)]
pub enum ImputationStrategy {
Mean,
Median,
Mode,
Constant,
KNN,
Iterative,
}
#[derive(Debug, Clone)]
pub enum ModelEstimator {
LinearRegression,
LogisticRegression,
RandomForest,
SVM,
XGBoost,
LightGBM,
}
#[derive(Debug)]
pub struct Trained {
_trained_steps: Vec<TrainedStep>,
_feature_mapping: FeatureMapping,
_pipeline_metadata: PipelineMetadata,
}