1use std::collections::HashMap;
4use std::time::Duration;
5
6#[derive(Debug, Clone)]
8pub struct MLOptimizationConfig {
9 pub enable_ml_optimization: bool,
11 pub ml_models: Vec<MLModelType>,
13 pub training_config: MLTrainingConfig,
15 pub feature_engineering: FeatureEngineeringConfig,
17 pub online_learning: OnlineLearningConfig,
19 pub transfer_learning: TransferLearningConfig,
21}
22
23#[derive(Debug, Clone, PartialEq, Eq)]
25pub enum MLModelType {
26 NeuralNetwork,
27 RandomForest,
28 SupportVectorMachine,
29 GradientBoosting,
30 BayesianOptimization,
31 ReinforcementLearning,
32 GaussianProcess,
33 EnsembleModel,
34}
35
36#[derive(Debug, Clone, Default)]
38pub struct MLTrainingConfig {
39 pub training_data: TrainingDataConfig,
41 pub hyperparameters: ModelHyperparameters,
43 pub optimization: TrainingOptimizationConfig,
45 pub regularization: RegularizationConfig,
47 pub early_stopping: EarlyStoppingConfig,
49 pub cross_validation: CrossValidationConfig,
51}
52
53#[derive(Debug, Clone)]
55pub struct TrainingDataConfig {
56 pub min_training_samples: usize,
58 pub data_collection_strategy: DataCollectionStrategy,
60 pub preprocessing: DataPreprocessingConfig,
62 pub augmentation: DataAugmentationConfig,
64}
65
66#[derive(Debug, Clone, PartialEq, Eq)]
68pub enum DataCollectionStrategy {
69 Passive,
70 Active,
71 Adaptive,
72 Balanced,
73 Targeted,
74}
75
76#[derive(Debug, Clone)]
78pub struct DataPreprocessingConfig {
79 pub normalization: NormalizationMethod,
81 pub outlier_handling: OutlierHandling,
83 pub missing_value_strategy: MissingValueStrategy,
85 pub validation_rules: Vec<DataValidationRule>,
87}
88
89#[derive(Debug, Clone, PartialEq, Eq)]
91pub enum NormalizationMethod {
92 MinMax,
93 ZScore,
94 Robust,
95 Quantile,
96 None,
97}
98
99#[derive(Debug, Clone, PartialEq, Eq)]
101pub enum OutlierHandling {
102 Remove,
103 Cap,
104 Transform,
105 Ignore,
106}
107
108#[derive(Debug, Clone, PartialEq, Eq)]
110pub enum MissingValueStrategy {
111 Remove,
112 Impute,
113 Interpolate,
114 Forward,
115 Backward,
116}
117
118#[derive(Debug, Clone)]
120pub struct DataValidationRule {
121 pub name: String,
123 pub condition: ValidationCondition,
125 pub failure_action: ValidationFailureAction,
127}
128
129#[derive(Debug, Clone, PartialEq)]
131pub enum ValidationCondition {
132 RangeCheck(f64, f64),
133 NotNull,
134 UniqueValues,
135 Custom(String),
136}
137
138#[derive(Debug, Clone, PartialEq, Eq)]
140pub enum ValidationFailureAction {
141 Reject,
142 Warn,
143 Transform,
144 Ignore,
145}
146
147#[derive(Debug, Clone)]
149pub struct DataAugmentationConfig {
150 pub enable_augmentation: bool,
152 pub techniques: Vec<AugmentationTechnique>,
154 pub augmentation_ratio: f64,
156}
157
158#[derive(Debug, Clone, PartialEq, Eq)]
160pub enum AugmentationTechnique {
161 NoiseInjection,
162 Rotation,
163 Scaling,
164 Permutation,
165 Interpolation,
166 Synthetic,
167}
168
169#[derive(Debug, Clone)]
171pub struct ModelHyperparameters {
172 pub learning_rate: f64,
174 pub batch_size: usize,
176 pub epochs: usize,
178 pub model_specific: HashMap<String, f64>,
180 pub optimization: HyperparameterOptimization,
182}
183
184#[derive(Debug, Clone)]
186pub struct HyperparameterOptimization {
187 pub enable_optimization: bool,
189 pub strategy: HyperparameterStrategy,
191 pub search_space: SearchSpaceConfig,
193 pub optimization_budget: OptimizationBudget,
195}
196
197#[derive(Debug, Clone, PartialEq, Eq)]
199pub enum HyperparameterStrategy {
200 GridSearch,
201 RandomSearch,
202 BayesianOptimization,
203 GeneticAlgorithm,
204 HalvingSearch,
205}
206
207#[derive(Debug, Clone, Default)]
209pub struct SearchSpaceConfig {
210 pub parameter_ranges: HashMap<String, ParameterRange>,
212 pub categorical_parameters: HashMap<String, Vec<String>>,
214 pub constraints: Vec<ParameterConstraint>,
216}
217
218#[derive(Debug, Clone)]
220pub struct ParameterRange {
221 pub min: f64,
223 pub max: f64,
225 pub step: Option<f64>,
227 pub distribution: ParameterDistribution,
229}
230
231#[derive(Debug, Clone, PartialEq, Eq)]
233pub enum ParameterDistribution {
234 Uniform,
235 LogUniform,
236 Normal,
237 LogNormal,
238}
239
240#[derive(Debug, Clone)]
242pub struct ParameterConstraint {
243 pub name: String,
245 pub expression: String,
247 pub constraint_type: ConstraintType,
249}
250
251#[derive(Debug, Clone, PartialEq, Eq)]
253pub enum ConstraintType {
254 Equality,
255 Inequality,
256 Conditional,
257}
258
259#[derive(Debug, Clone)]
261pub struct OptimizationBudget {
262 pub max_evaluations: usize,
264 pub max_time: Duration,
266 pub early_stopping: EarlyStoppingCriteria,
268}
269
270#[derive(Debug, Clone)]
272pub struct EarlyStoppingCriteria {
273 pub patience: usize,
275 pub min_improvement: f64,
277 pub improvement_metric: String,
279}
280
281#[derive(Debug, Clone)]
283pub struct TrainingOptimizationConfig {
284 pub optimizer: OptimizerType,
286 pub lr_scheduling: LearningRateScheduling,
288 pub gradient_clipping: GradientClippingConfig,
290 pub loss_function: LossFunctionConfig,
292}
293
294#[derive(Debug, Clone, PartialEq, Eq)]
296pub enum OptimizerType {
297 SGD,
298 Adam,
299 RMSprop,
300 AdaGrad,
301 LBFGS,
302}
303
304#[derive(Debug, Clone)]
306pub struct LearningRateScheduling {
307 pub enable_scheduling: bool,
309 pub strategy: LRSchedulingStrategy,
311 pub parameters: HashMap<String, f64>,
313}
314
315#[derive(Debug, Clone, PartialEq, Eq)]
317pub enum LRSchedulingStrategy {
318 StepDecay,
319 ExponentialDecay,
320 CosineAnnealing,
321 ReduceOnPlateau,
322 Cyclical,
323}
324
325#[derive(Debug, Clone)]
327pub struct GradientClippingConfig {
328 pub enable_clipping: bool,
330 pub method: ClippingMethod,
332 pub threshold: f64,
334}
335
336#[derive(Debug, Clone, PartialEq, Eq)]
338pub enum ClippingMethod {
339 Norm,
340 Value,
341 Global,
342}
343
344#[derive(Debug, Clone)]
346pub struct LossFunctionConfig {
347 pub primary_loss: LossFunction,
349 pub auxiliary_losses: Vec<AuxiliaryLoss>,
351 pub weighting_scheme: LossWeightingScheme,
353}
354
355#[derive(Debug, Clone, PartialEq, Eq)]
357pub enum LossFunction {
358 MeanSquaredError,
359 MeanAbsoluteError,
360 Huber,
361 CrossEntropy,
362 FocalLoss,
363 Custom(String),
364}
365
366#[derive(Debug, Clone)]
368pub struct AuxiliaryLoss {
369 pub loss_function: LossFunction,
371 pub weight: f64,
373 pub scope: String,
375}
376
377#[derive(Debug, Clone, PartialEq, Eq)]
379pub enum LossWeightingScheme {
380 Static,
381 Dynamic,
382 Adaptive,
383 Uncertainty,
384}
385
386#[derive(Debug, Clone)]
388pub struct RegularizationConfig {
389 pub l1_strength: f64,
391 pub l2_strength: f64,
393 pub dropout_rate: f64,
395 pub batch_normalization: bool,
397 pub additional_techniques: Vec<RegularizationTechnique>,
399}
400
401#[derive(Debug, Clone, PartialEq, Eq)]
403pub enum RegularizationTechnique {
404 Dropout,
405 BatchNorm,
406 LayerNorm,
407 WeightDecay,
408 EarlyStop,
409 DataAugmentation,
410}
411
412#[derive(Debug, Clone)]
414pub struct EarlyStoppingConfig {
415 pub enable_early_stopping: bool,
417 pub patience: usize,
419 pub min_delta: f64,
421 pub monitor_metric: String,
423 pub improvement_direction: ImprovementDirection,
425}
426
427#[derive(Debug, Clone, PartialEq, Eq)]
429pub enum ImprovementDirection {
430 Maximize,
431 Minimize,
432}
433
434#[derive(Debug, Clone)]
436pub struct CrossValidationConfig {
437 pub enable_cv: bool,
439 pub folds: usize,
441 pub strategy: CVStrategy,
443 pub stratification: StratificationConfig,
445}
446
447#[derive(Debug, Clone, PartialEq, Eq)]
449pub enum CVStrategy {
450 KFold,
451 StratifiedKFold,
452 TimeSeriesSplit,
453 GroupKFold,
454 LeaveOneOut,
455}
456
457#[derive(Debug, Clone)]
459pub struct StratificationConfig {
460 pub enable_stratification: bool,
462 pub stratification_variable: String,
464 pub balance_strategy: BalanceStrategy,
466}
467
468#[derive(Debug, Clone, PartialEq, Eq)]
470pub enum BalanceStrategy {
471 None,
472 Oversample,
473 Undersample,
474 SMOTE,
475 Adaptive,
476}
477
478#[derive(Debug, Clone)]
480pub struct FeatureEngineeringConfig {
481 pub automatic_feature_engineering: bool,
483 pub feature_selection: Vec<FeatureSelectionMethod>,
485 pub feature_scaling: FeatureScalingMethod,
487 pub dimensionality_reduction: DimensionalityReductionConfig,
489 pub interaction_detection: InteractionDetectionConfig,
491}
492
493#[derive(Debug, Clone, PartialEq, Eq)]
495pub enum FeatureSelectionMethod {
496 VarianceThreshold,
497 UnivariateSelection,
498 RecursiveFeatureElimination,
499 FeatureImportance,
500 LassoRegularization,
501 MutualInformation,
502}
503
504#[derive(Debug, Clone, PartialEq, Eq)]
506pub enum FeatureScalingMethod {
507 StandardScaler,
508 MinMaxScaler,
509 RobustScaler,
510 Normalizer,
511 QuantileTransformer,
512 PowerTransformer,
513}
514
515#[derive(Debug, Clone)]
517pub struct DimensionalityReductionConfig {
518 pub enable_reduction: bool,
520 pub methods: Vec<DimensionalityReductionMethod>,
522 pub target_dimensions: Option<usize>,
524 pub variance_threshold: f64,
526}
527
528#[derive(Debug, Clone, PartialEq, Eq)]
530pub enum DimensionalityReductionMethod {
531 PCA,
532 ICA,
533 LDA,
534 TSNE,
535 UMAP,
536 FactorAnalysis,
537}
538
539#[derive(Debug, Clone)]
541pub struct InteractionDetectionConfig {
542 pub enable_detection: bool,
544 pub methods: Vec<InteractionDetectionMethod>,
546 pub interaction_order: usize,
548 pub significance_threshold: f64,
550}
551
552#[derive(Debug, Clone, PartialEq, Eq)]
554pub enum InteractionDetectionMethod {
555 Correlation,
556 MutualInformation,
557 ANOVA,
558 TreeBased,
559 Statistical,
560}
561
562#[derive(Debug, Clone)]
564pub struct OnlineLearningConfig {
565 pub enable_online_learning: bool,
567 pub learning_rate_adaptation: AdaptiveLearningRate,
569 pub update_frequency: UpdateFrequency,
571 pub concept_drift: ConceptDriftConfig,
573 pub memory_management: MemoryManagementConfig,
575}
576
577#[derive(Debug, Clone)]
579pub struct AdaptiveLearningRate {
580 pub initial_rate: f64,
582 pub adaptation_strategy: LRAdaptationStrategy,
584 pub parameters: HashMap<String, f64>,
586}
587
588#[derive(Debug, Clone, PartialEq, Eq)]
590pub enum LRAdaptationStrategy {
591 Constant,
592 InverseScaling,
593 Adaptive,
594 Performance,
595}
596
597#[derive(Debug, Clone)]
599pub struct UpdateFrequency {
600 pub trigger: UpdateTrigger,
602 pub min_interval: Duration,
604 pub max_interval: Duration,
606}
607
608#[derive(Debug, Clone, PartialEq, Eq)]
610pub enum UpdateTrigger {
611 TimeInterval,
612 DataVolume,
613 PerformanceDrift,
614 Manual,
615 Adaptive,
616}
617
618#[derive(Debug, Clone)]
620pub struct ConceptDriftConfig {
621 pub enable_detection: bool,
623 pub detection_methods: Vec<DriftDetectionMethod>,
625 pub sensitivity: f64,
627 pub response_strategy: DriftResponseStrategy,
629}
630
631#[derive(Debug, Clone, PartialEq, Eq)]
633pub enum DriftDetectionMethod {
634 StatisticalTest,
635 PerformanceMonitoring,
636 DistributionComparison,
637 EnsembleBased,
638}
639
640#[derive(Debug, Clone, PartialEq, Eq)]
642pub enum DriftResponseStrategy {
643 Retrain,
644 Adapt,
645 EnsembleUpdate,
646 ModelSwitch,
647}
648
649#[derive(Debug, Clone)]
651pub struct MemoryManagementConfig {
652 pub window_size: usize,
654 pub forgetting_factor: f64,
656 pub strategy: MemoryStrategy,
658}
659
660#[derive(Debug, Clone, PartialEq, Eq)]
662pub enum MemoryStrategy {
663 FixedWindow,
664 SlidingWindow,
665 FadingMemory,
666 Adaptive,
667}
668
669#[derive(Debug, Clone)]
671pub struct TransferLearningConfig {
672 pub enable_transfer_learning: bool,
674 pub transfer_strategies: Vec<TransferStrategy>,
676 pub source_domain: SourceDomainConfig,
678 pub domain_adaptation: DomainAdaptationConfig,
680}
681
682#[derive(Debug, Clone, PartialEq, Eq)]
684pub enum TransferStrategy {
685 FeatureExtraction,
686 FineTuning,
687 DomainAdaptation,
688 TaskSpecificLayers,
689 MetaLearning,
690}
691
692#[derive(Debug, Clone)]
694pub struct SourceDomainConfig {
695 pub domain_id: String,
697 pub similarity_metrics: Vec<SimilarityMetric>,
699 pub eligibility_criteria: EligibilityCriteria,
701}
702
703#[derive(Debug, Clone, PartialEq, Eq)]
705pub enum SimilarityMetric {
706 Statistical,
707 Distributional,
708 Performance,
709 Structural,
710}
711
712#[derive(Debug, Clone)]
714pub struct EligibilityCriteria {
715 pub min_similarity: f64,
717 pub performance_requirements: PerformanceRequirements,
719 pub data_requirements: DataRequirements,
721}
722
723#[derive(Debug, Clone)]
725pub struct PerformanceRequirements {
726 pub min_source_accuracy: f64,
728 pub expected_benefit: f64,
730}
731
732#[derive(Debug, Clone)]
734pub struct DataRequirements {
735 pub min_source_size: usize,
737 pub min_target_size: usize,
739 pub quality_requirements: DataQualityRequirements,
741}
742
743#[derive(Debug, Clone)]
745pub struct DataQualityRequirements {
746 pub min_completeness: f64,
748 pub max_noise_level: f64,
750 pub consistency_requirements: Vec<String>,
752}
753
754#[derive(Debug, Clone)]
756pub struct DomainAdaptationConfig {
757 pub methods: Vec<DomainAdaptationMethod>,
759 pub adaptation_strength: f64,
761 pub validation_strategy: AdaptationValidationStrategy,
763}
764
765#[derive(Debug, Clone, PartialEq, Eq)]
767pub enum DomainAdaptationMethod {
768 FeatureAlignment,
769 DistributionMatching,
770 AdversarialTraining,
771 CorrectionModels,
772}
773
774#[derive(Debug, Clone, PartialEq, Eq)]
776pub enum AdaptationValidationStrategy {
777 TargetValidation,
778 SourceValidation,
779 CombinedValidation,
780 UnsupervisedMetrics,
781}
782
783impl Default for MLOptimizationConfig {
786 fn default() -> Self {
787 Self {
788 enable_ml_optimization: true,
789 ml_models: vec![
790 MLModelType::NeuralNetwork,
791 MLModelType::BayesianOptimization,
792 ],
793 training_config: MLTrainingConfig::default(),
794 feature_engineering: FeatureEngineeringConfig::default(),
795 online_learning: OnlineLearningConfig::default(),
796 transfer_learning: TransferLearningConfig::default(),
797 }
798 }
799}
800
801impl Default for FeatureEngineeringConfig {
802 fn default() -> Self {
803 Self {
804 automatic_feature_engineering: true,
805 feature_selection: vec![
806 FeatureSelectionMethod::VarianceThreshold,
807 FeatureSelectionMethod::FeatureImportance,
808 ],
809 feature_scaling: FeatureScalingMethod::StandardScaler,
810 dimensionality_reduction: DimensionalityReductionConfig::default(),
811 interaction_detection: InteractionDetectionConfig::default(),
812 }
813 }
814}
815
816impl Default for OnlineLearningConfig {
817 fn default() -> Self {
818 Self {
819 enable_online_learning: true,
820 learning_rate_adaptation: AdaptiveLearningRate::default(),
821 update_frequency: UpdateFrequency::default(),
822 concept_drift: ConceptDriftConfig::default(),
823 memory_management: MemoryManagementConfig::default(),
824 }
825 }
826}
827
828impl Default for TransferLearningConfig {
829 fn default() -> Self {
830 Self {
831 enable_transfer_learning: true,
832 transfer_strategies: vec![TransferStrategy::FeatureExtraction],
833 source_domain: SourceDomainConfig::default(),
834 domain_adaptation: DomainAdaptationConfig::default(),
835 }
836 }
837}
838
839impl Default for TrainingDataConfig {
843 fn default() -> Self {
844 Self {
845 min_training_samples: 1000,
846 data_collection_strategy: DataCollectionStrategy::Adaptive,
847 preprocessing: DataPreprocessingConfig::default(),
848 augmentation: DataAugmentationConfig::default(),
849 }
850 }
851}
852
853impl Default for DataPreprocessingConfig {
854 fn default() -> Self {
855 Self {
856 normalization: NormalizationMethod::ZScore,
857 outlier_handling: OutlierHandling::Cap,
858 missing_value_strategy: MissingValueStrategy::Impute,
859 validation_rules: vec![],
860 }
861 }
862}
863
864impl Default for DataAugmentationConfig {
865 fn default() -> Self {
866 Self {
867 enable_augmentation: false,
868 techniques: vec![],
869 augmentation_ratio: 0.1,
870 }
871 }
872}
873
874impl Default for ModelHyperparameters {
875 fn default() -> Self {
876 Self {
877 learning_rate: 0.001,
878 batch_size: 32,
879 epochs: 100,
880 model_specific: HashMap::new(),
881 optimization: HyperparameterOptimization::default(),
882 }
883 }
884}
885
886impl Default for HyperparameterOptimization {
887 fn default() -> Self {
888 Self {
889 enable_optimization: false,
890 strategy: HyperparameterStrategy::RandomSearch,
891 search_space: SearchSpaceConfig::default(),
892 optimization_budget: OptimizationBudget::default(),
893 }
894 }
895}
896
897impl Default for OptimizationBudget {
898 fn default() -> Self {
899 Self {
900 max_evaluations: 100,
901 max_time: Duration::from_secs(3600),
902 early_stopping: EarlyStoppingCriteria::default(),
903 }
904 }
905}
906
907impl Default for EarlyStoppingCriteria {
908 fn default() -> Self {
909 Self {
910 patience: 20,
911 min_improvement: 0.001,
912 improvement_metric: "validation_loss".to_string(),
913 }
914 }
915}
916
917impl Default for TrainingOptimizationConfig {
918 fn default() -> Self {
919 Self {
920 optimizer: OptimizerType::Adam,
921 lr_scheduling: LearningRateScheduling::default(),
922 gradient_clipping: GradientClippingConfig::default(),
923 loss_function: LossFunctionConfig::default(),
924 }
925 }
926}
927
928impl Default for LearningRateScheduling {
929 fn default() -> Self {
930 Self {
931 enable_scheduling: false,
932 strategy: LRSchedulingStrategy::ReduceOnPlateau,
933 parameters: HashMap::new(),
934 }
935 }
936}
937
938impl Default for GradientClippingConfig {
939 fn default() -> Self {
940 Self {
941 enable_clipping: true,
942 method: ClippingMethod::Norm,
943 threshold: 1.0,
944 }
945 }
946}
947
948impl Default for LossFunctionConfig {
949 fn default() -> Self {
950 Self {
951 primary_loss: LossFunction::MeanSquaredError,
952 auxiliary_losses: vec![],
953 weighting_scheme: LossWeightingScheme::Static,
954 }
955 }
956}
957
958impl Default for RegularizationConfig {
959 fn default() -> Self {
960 Self {
961 l1_strength: 0.0,
962 l2_strength: 0.001,
963 dropout_rate: 0.1,
964 batch_normalization: true,
965 additional_techniques: vec![],
966 }
967 }
968}
969
970impl Default for EarlyStoppingConfig {
971 fn default() -> Self {
972 Self {
973 enable_early_stopping: true,
974 patience: 10,
975 min_delta: 0.001,
976 monitor_metric: "validation_loss".to_string(),
977 improvement_direction: ImprovementDirection::Minimize,
978 }
979 }
980}
981
982impl Default for CrossValidationConfig {
983 fn default() -> Self {
984 Self {
985 enable_cv: true,
986 folds: 5,
987 strategy: CVStrategy::KFold,
988 stratification: StratificationConfig::default(),
989 }
990 }
991}
992
993impl Default for StratificationConfig {
994 fn default() -> Self {
995 Self {
996 enable_stratification: false,
997 stratification_variable: String::new(),
998 balance_strategy: BalanceStrategy::None,
999 }
1000 }
1001}
1002
1003impl Default for DimensionalityReductionConfig {
1004 fn default() -> Self {
1005 Self {
1006 enable_reduction: false,
1007 methods: vec![DimensionalityReductionMethod::PCA],
1008 target_dimensions: None,
1009 variance_threshold: 0.95,
1010 }
1011 }
1012}
1013
1014impl Default for InteractionDetectionConfig {
1015 fn default() -> Self {
1016 Self {
1017 enable_detection: false,
1018 methods: vec![InteractionDetectionMethod::Correlation],
1019 interaction_order: 2,
1020 significance_threshold: 0.05,
1021 }
1022 }
1023}
1024
1025impl Default for AdaptiveLearningRate {
1026 fn default() -> Self {
1027 Self {
1028 initial_rate: 0.001,
1029 adaptation_strategy: LRAdaptationStrategy::Adaptive,
1030 parameters: HashMap::new(),
1031 }
1032 }
1033}
1034
1035impl Default for UpdateFrequency {
1036 fn default() -> Self {
1037 Self {
1038 trigger: UpdateTrigger::TimeInterval,
1039 min_interval: Duration::from_secs(300),
1040 max_interval: Duration::from_secs(3600),
1041 }
1042 }
1043}
1044
1045impl Default for ConceptDriftConfig {
1046 fn default() -> Self {
1047 Self {
1048 enable_detection: true,
1049 detection_methods: vec![DriftDetectionMethod::PerformanceMonitoring],
1050 sensitivity: 0.05,
1051 response_strategy: DriftResponseStrategy::Adapt,
1052 }
1053 }
1054}
1055
1056impl Default for MemoryManagementConfig {
1057 fn default() -> Self {
1058 Self {
1059 window_size: 10000,
1060 forgetting_factor: 0.99,
1061 strategy: MemoryStrategy::SlidingWindow,
1062 }
1063 }
1064}
1065
1066impl Default for SourceDomainConfig {
1067 fn default() -> Self {
1068 Self {
1069 domain_id: String::new(),
1070 similarity_metrics: vec![SimilarityMetric::Statistical],
1071 eligibility_criteria: EligibilityCriteria::default(),
1072 }
1073 }
1074}
1075
1076impl Default for EligibilityCriteria {
1077 fn default() -> Self {
1078 Self {
1079 min_similarity: 0.7,
1080 performance_requirements: PerformanceRequirements::default(),
1081 data_requirements: DataRequirements::default(),
1082 }
1083 }
1084}
1085
1086impl Default for PerformanceRequirements {
1087 fn default() -> Self {
1088 Self {
1089 min_source_accuracy: 0.8,
1090 expected_benefit: 0.1,
1091 }
1092 }
1093}
1094
1095impl Default for DataRequirements {
1096 fn default() -> Self {
1097 Self {
1098 min_source_size: 1000,
1099 min_target_size: 100,
1100 quality_requirements: DataQualityRequirements::default(),
1101 }
1102 }
1103}
1104
1105impl Default for DataQualityRequirements {
1106 fn default() -> Self {
1107 Self {
1108 min_completeness: 0.9,
1109 max_noise_level: 0.1,
1110 consistency_requirements: vec![],
1111 }
1112 }
1113}
1114
1115impl Default for DomainAdaptationConfig {
1116 fn default() -> Self {
1117 Self {
1118 methods: vec![DomainAdaptationMethod::FeatureAlignment],
1119 adaptation_strength: 0.5,
1120 validation_strategy: AdaptationValidationStrategy::CombinedValidation,
1121 }
1122 }
1123}