1#![allow(dead_code)]
2#![allow(non_snake_case)]
3#![allow(missing_docs)]
4#![allow(deprecated)]
5#![allow(clippy::needless_range_loop)]
6#![allow(clippy::derivable_impls)]
7#![allow(clippy::needless_borrow)]
8#[cfg(feature = "admm")]
18pub mod admm;
19#[cfg(feature = "gpu")]
20pub mod advanced_gpu_acceleration;
21#[cfg(feature = "bayesian")]
22pub mod bayesian;
23pub mod builder_enhancements;
24#[cfg(feature = "feature-selection")]
25pub mod categorical_encoding;
26#[cfg(feature = "chunked-processing")]
27pub mod chunked_processing;
28#[cfg(feature = "diagnostics")]
29pub mod classification_diagnostics;
30#[cfg(feature = "constrained-optimization")]
31#[cfg(feature = "convergence-analysis")]
34pub mod convergence_visualization;
35#[cfg(feature = "coordinate-descent")]
36pub mod coordinate_descent;
37#[cfg(feature = "cross-validation")]
38pub mod cross_validation;
39#[cfg(feature = "early-stopping")]
40pub mod early_stopping;
41#[cfg(feature = "elastic-net")]
42pub mod elastic_net_cv;
43pub mod errors;
44#[cfg(feature = "feature-selection")]
45pub mod feature_scaling;
46#[cfg(feature = "feature-selection")]
47pub mod feature_selection;
48#[cfg(feature = "glm")]
49#[cfg(feature = "gpu")]
52pub mod gpu_acceleration;
53#[cfg(feature = "huber")]
54pub mod huber;
55pub mod irls;
56#[cfg(feature = "lasso")]
57pub mod lars;
58#[cfg(feature = "lasso")]
59pub mod lasso_cv;
60#[cfg(feature = "lasso")]
61pub mod lasso_lars;
62#[cfg(feature = "linear-regression")]
63pub mod linear_regression;
64#[cfg(feature = "logistic-regression")]
65pub mod logistic_regression;
66#[cfg(feature = "memory-mapping")]
70pub mod memory_efficient_ops;
71#[cfg(feature = "memory-mapping")]
72pub mod mmap_arrays;
73#[cfg(any(feature = "multi-task", feature = "all-algorithms"))]
74#[cfg(feature = "multi-task-elastic-net")]
77pub mod multi_task_elastic_net;
78#[cfg(feature = "multi-task-elastic-net")]
79pub mod multi_task_elastic_net_cv;
80#[cfg(feature = "multi-task")]
81pub mod multi_task_feature_selection;
82#[cfg(feature = "multi-task-lasso")]
83pub mod multi_task_lasso;
84#[cfg(feature = "multi-task-lasso")]
85pub mod multi_task_lasso_cv;
86#[cfg(feature = "multi-task")]
87pub mod multi_task_shared_representation;
88#[cfg(feature = "lasso")]
89pub mod omp;
90#[cfg(feature = "online-learning")]
91pub mod online_learning;
92pub mod optimizer;
93#[cfg(feature = "sgd")]
94pub mod passive_aggressive;
95#[cfg(feature = "regularization-path")]
96pub mod paths;
97#[cfg(feature = "sgd")]
98pub mod perceptron;
99#[cfg(feature = "feature-selection")]
100pub mod polynomial_features;
101#[cfg(feature = "quantile-regression")]
102#[cfg(feature = "ransac")]
105pub mod ransac;
106#[cfg(feature = "feature-selection")]
107pub mod recursive_feature_elimination;
108#[cfg(feature = "residual-analysis")]
109pub mod residual_analysis;
110#[cfg(feature = "ridge")]
111pub mod ridge_classifier;
112#[cfg(feature = "ridge")]
113pub mod ridge_cv;
114#[cfg(feature = "serde")]
115#[cfg(feature = "sgd")]
118pub mod sgd;
119pub mod solver;
123#[cfg(feature = "sparse")]
124pub mod sparse;
125#[cfg(feature = "sparse")]
126pub mod sparse_linear_regression;
127#[cfg(feature = "sparse")]
128pub mod sparse_regularized;
129#[cfg(feature = "feature-selection")]
130pub mod stability_selection;
131#[cfg(feature = "streaming")]
132pub mod streaming_algorithms;
133pub mod utils;
134
135pub mod large_scale_variational_inference;
137pub mod loss_functions;
138pub mod modular_framework;
139pub mod regularization_schemes;
140pub mod solver_implementations;
141pub mod type_safety;
142pub mod uncertainty_quantification;
143
144#[cfg(feature = "theil-sen")]
145pub mod theil_sen;
146
147#[cfg(test)]
149#[cfg(feature = "admm")]
151pub use admm::{AdmmConfig, AdmmSolution, AdmmSolver};
152
153#[cfg(feature = "bayesian")]
154pub use bayesian::{
155 ARDRegression, ARDRegressionConfig, BayesianRidge, BayesianRidgeConfig,
156 VariationalBayesianConfig, VariationalBayesianRegression,
157};
158pub use builder_enhancements::{
159 EnhancedLinearRegressionBuilder, ModelPreset, ModelValidation, ValidationConfig,
160};
161
162#[cfg(feature = "logistic-regression")]
163pub use builder_enhancements::EnhancedLogisticRegressionBuilder;
164
165#[cfg(feature = "feature-selection")]
166pub use categorical_encoding::{
167 CategoricalEncoder, CategoricalEncodingConfig, CategoricalEncodingResult,
168 CategoricalEncodingStrategy, CategoricalFeatureInfo, UnknownHandling,
169};
170
171#[cfg(feature = "chunked-processing")]
172pub use chunked_processing::{
173 ChunkProcessingConfig, ChunkProcessingResult, ChunkedDataIterator, ChunkedLinearRegression,
174 ChunkedMatrixProcessor, ChunkedProcessingUtils, ChunkedProcessor, MemoryStats,
175 ParallelChunkedProcessor,
176};
177
178#[cfg(feature = "diagnostics")]
179pub use classification_diagnostics::{
180 CalibrationResult, ClassImbalanceResult, ClassificationDiagnostics,
181 ClassificationDiagnosticsConfig, DecisionBoundaryResult, FeatureImportanceMethod,
182 FeatureImportanceResult,
183};
184
185#[cfg(feature = "constrained-optimization")]
186#[cfg(feature = "convergence-analysis")]
193pub use convergence_visualization::{
194 ComparisonResult, ConvergenceAnalysis, ConvergenceConfig, ConvergenceCriteria,
195 ConvergenceCriterion, ConvergenceMetric, ConvergenceReport, ConvergenceStatus,
196 ConvergenceTracker, MetricHistory, MetricSummary, PlotData,
197};
198
199#[cfg(feature = "coordinate-descent")]
200pub use coordinate_descent::{CoordinateDescentSolver, ValidationInfo};
201
202#[cfg(feature = "cross-validation")]
203pub use cross_validation::{
204 cross_validate_with_early_stopping, CVStrategy, CrossValidationResult,
205 CrossValidatorWithEarlyStopping, StratifiedKFold,
206};
207
208#[cfg(feature = "early-stopping")]
209pub use early_stopping::{
210 train_validation_split, EarlyStopping, EarlyStoppingCallback, EarlyStoppingConfig,
211 StoppingCriterion,
212};
213
214#[cfg(feature = "elastic-net")]
215pub use elastic_net_cv::{ElasticNetCV, ElasticNetCVConfig};
216pub use errors::{
217 ConfigurationError, ConfigurationErrorKind, ConvergenceInfo, CrossValidationError,
218 CrossValidationErrorKind, DataError, DataErrorKind, ErrorBuilder, ErrorSeverity, FeatureError,
219 FeatureErrorKind, FoldInfo, LinearModelError, MatrixError, MatrixErrorKind, MatrixInfo,
220 NumericalError, NumericalErrorKind, OptimizationError, OptimizationErrorKind, ResourceError,
221 ResourceErrorKind, ResourceInfo, StateError, StateErrorKind,
222};
223#[cfg(feature = "feature-selection")]
224pub use feature_scaling::{
225 FeatureScaler, FeatureScalerBuilder, FeatureScalingConfig, FeatureStats, PowerTransformMethod,
226 ScalingMethod,
227};
228#[cfg(feature = "feature-selection")]
229pub use feature_selection::{
230 FeatureScore, FeatureSelectionConfig, FeatureSelector, ModelBasedEstimator, UnivariateScoreFunc,
231};
232#[cfg(feature = "glm")]
233#[cfg(feature = "huber")]
236pub use huber::{HuberRegressor, HuberRegressorConfig};
237#[cfg(feature = "lasso")]
240pub use lars::{Lars, LarsConfig};
241#[cfg(feature = "lasso")]
242pub use lasso_cv::{LassoCV, LassoCVConfig};
243#[cfg(feature = "lasso")]
244pub use lasso_lars::{LassoLars, LassoLarsConfig};
245#[cfg(feature = "linear-regression")]
246pub use linear_regression::{LinearRegression, LinearRegressionConfig};
247#[cfg(feature = "logistic-regression")]
248pub use logistic_regression::{LogisticRegression, LogisticRegressionConfig};
249#[cfg(feature = "memory-mapping")]
253pub use memory_efficient_ops::{
254 MemoryEfficiencyConfig, MemoryEfficientCoordinateDescent, MemoryEfficientOps, MemoryOperation,
255 NormType,
256};
257#[cfg(feature = "memory-mapping")]
258pub use mmap_arrays::{
259 MmapAdvice, MmapConfig, MmapMatrix, MmapMatrixMut, MmapUtils, MmapVector, MmapVectorMut,
260};
261#[cfg(any(feature = "multi-task", feature = "all-algorithms"))]
262#[cfg(feature = "multi-task-elastic-net")]
268pub use multi_task_elastic_net::{MultiTaskElasticNet, MultiTaskElasticNetConfig};
269#[cfg(feature = "multi-task-elastic-net")]
270pub use multi_task_elastic_net_cv::{MultiTaskElasticNetCV, MultiTaskElasticNetCVConfig};
271#[cfg(feature = "multi-task")]
272pub use multi_task_feature_selection::{
273 FeatureSelectionResult, FeatureSelectionStrategy, MultiTaskFeatureSelectionConfig,
274 MultiTaskFeatureSelector, SelectionSummary,
275};
276#[cfg(feature = "multi-task-lasso")]
277pub use multi_task_lasso::{MultiTaskLasso, MultiTaskLassoConfig};
278#[cfg(feature = "multi-task-lasso")]
279pub use multi_task_lasso_cv::{MultiTaskLassoCV, MultiTaskLassoCVConfig};
280#[cfg(feature = "multi-task")]
281pub use multi_task_shared_representation::{
282 MultiTaskSharedRepresentation, SharedRepresentationBuilder, SharedRepresentationConfig,
283 SharedRepresentationStrategy,
284};
285#[cfg(feature = "lasso")]
286pub use omp::{OrthogonalMatchingPursuit, OrthogonalMatchingPursuitConfig};
287#[cfg(feature = "online-learning")]
288pub use online_learning::{
289 LearningRateSchedule, MiniBatchConfig, MiniBatchIterator, OnlineCoordinateDescent,
290 OnlineLearningConfig, OnlineLinearRegression, OnlineLogisticRegression, SGDVariant,
291};
292pub use optimizer::{
293 FistaOptimizer, LbfgsOptimizer, NesterovAcceleratedGradient, ProximalGradientOptimizer,
294 SagOptimizer, SagaOptimizer,
295};
296#[cfg(feature = "sgd")]
297pub use passive_aggressive::{
298 PassiveAggressiveClassifier, PassiveAggressiveClassifierConfig, PassiveAggressiveLoss,
299 PassiveAggressiveRegressor, PassiveAggressiveRegressorConfig,
300};
301#[cfg(feature = "sgd")]
302pub use perceptron::{Perceptron, PerceptronConfig, PerceptronPenalty};
303#[cfg(feature = "feature-selection")]
304pub use polynomial_features::{
305 FeatureInfo, PolynomialConfig, PolynomialFeatures, PolynomialFeaturesBuilder, PolynomialUtils,
306};
307#[cfg(feature = "quantile-regression")]
308#[cfg(feature = "ransac")]
311pub use ransac::{RANSACLoss, RANSACRegressor, RANSACRegressorConfig};
312#[cfg(feature = "feature-selection")]
313pub use recursive_feature_elimination::{
314 RFEConfig, RFEEstimator, RFEFeatureInfo, RFEResult, RecursiveFeatureElimination, ScoringMetric,
315};
316#[cfg(feature = "residual-analysis")]
317pub use residual_analysis::{
318 AssumptionResult, AssumptionTests, InfluenceMeasures, OutlierAnalysis, ResidualAnalysisConfig,
319 ResidualAnalysisResult, ResidualAnalyzer, ResidualStats, StatisticalTests, TestResult,
320};
321#[cfg(feature = "ridge")]
322pub use ridge_classifier::{RidgeClassifier, RidgeClassifierConfig};
323#[cfg(feature = "ridge")]
324pub use ridge_cv::{RidgeCV, RidgeCVConfig};
325#[cfg(feature = "serde")]
326#[cfg(feature = "sgd")]
334pub use sgd::{
335 SGDClassifier, SGDClassifierConfig, SGDLoss, SGDPenalty, SGDRegressor, SGDRegressorConfig,
336};
337#[cfg(feature = "theil-sen")]
343pub use theil_sen::{TheilSenRegressor, TheilSenRegressorConfig};
344pub use modular_framework::{
346 create_modular_linear_regression, BayesianPredictionProvider, CompositeObjective,
347 LinearPredictionProvider, ModularConfig, ModularFramework, ModularLinearModel, Objective,
348 ObjectiveData, ObjectiveMetadata, OptimizationResult, OptimizationSolver, PredictionProvider,
349 PredictionWithConfidence, PredictionWithUncertainty, ProbabilisticPredictionProvider,
350 SolverInfo, SolverRecommendations,
351};
352pub use solver::Solver;
353#[cfg(feature = "feature-selection")]
354pub use stability_selection::{
355 BaseSelector, BootstrapResult, StabilityPath, StabilitySelection, StabilitySelectionConfig,
356 StabilitySelectionResult,
357};
358#[cfg(feature = "streaming")]
359pub use streaming_algorithms::{
360 DataStreamIterator, StreamingConfig, StreamingLasso, StreamingLinearRegression,
361 StreamingLinearRegressionBuilder, StreamingUtils,
362};
363
364pub use loss_functions::{
365 AbsoluteLoss, EpsilonInsensitiveLoss, HingeLoss, HuberLoss, LogisticLoss, LossFactory,
366 QuantileLoss, SquaredHingeLoss, SquaredLoss,
367};
368
369pub use regularization_schemes::{
370 CompositeRegularization, ElasticNetRegularization, GroupLassoRegularization, L1Regularization,
371 L2Regularization, RegularizationFactory,
372};
373
374pub use modular_framework::Regularization;
375
376pub use solver_implementations::{
377 BacktrackingConfig, CoordinateDescentConfig, CoordinateDescentResult, GradientDescentConfig,
378 GradientDescentResult, GradientDescentSolver, LineSearchConfig, ProximalGradientConfig,
379 ProximalGradientResult, ProximalGradientSolver, SolverFactory,
380};
381
382pub use type_safety::{
383 problem_type, solver_capability, ComputationalComplexity, ConfigurationHints,
384 ConfigurationValidator, FeatureValidator, FixedSizeOps, L1Scheme, L2Scheme,
385 LargeLinearRegression, MediumLinearRegression, MemoryRequirements, RegularizationConstraint,
386 RegularizationScheme, SmallLinearRegression, SolverConstraint, Trained, TypeSafeConfig,
387 TypeSafeFit, TypeSafeLinearModel, TypeSafeModelBuilder, TypeSafePredict,
388 TypeSafeSolverSelector, Untrained,
389};
390
391pub use large_scale_variational_inference::{
392 ARDConfiguration, LargeScaleVariationalConfig, LargeScaleVariationalRegression,
393 LearningRateDecay, PriorConfiguration, VariationalPosterior,
394};
395
396pub use uncertainty_quantification::{
397 CalibrationMetrics, UncertaintyCapable, UncertaintyConfig, UncertaintyMethod,
398 UncertaintyQuantifier, UncertaintyResult,
399};
400
401#[cfg(feature = "regularization-path")]
403pub use paths::{
404 enet_path, enet_path_enhanced, lars_path, lars_path_gram, lasso_path, ElasticNetPathConfig,
405 ElasticNetPathResult,
406};
407
408pub use crate::utils::{
410 accurate_condition_number, adaptive_least_squares, condition_number,
411 diagnose_numerical_stability, enhanced_ridge_regression, orthogonal_mp, orthogonal_mp_gram,
412 qr_ridge_regression, rank_revealing_qr, ridge_regression, solve_with_iterative_refinement,
413 stable_normal_equations, stable_ridge_regression, svd_ridge_regression, NumericalDiagnostics,
414};
415
416#[cfg(feature = "sparse")]
418pub use sparse::{
419 Either, SparseConfig, SparseCoordinateDescentSolver, SparseMatrix, SparseMatrixCSR,
420 SparsityAnalysis,
421};
422
423#[cfg(feature = "sparse")]
424pub use sparse_linear_regression::{SparseLinearRegression, SparseLinearRegressionConfig};
425
426#[cfg(feature = "sparse")]
427pub use sparse_regularized::{
428 SparseElasticNet, SparseElasticNetConfig, SparseLasso, SparseLassoConfig,
429};
430
431#[cfg(not(feature = "sparse"))]
433pub fn sparse_feature_disabled_error() -> sklears_core::error::SklearsError {
434 sklears_core::error::SklearsError::InvalidParameter {
435 name: "sparse".to_string(),
436 reason: "Sparse matrix support requires the 'sparse' feature".to_string(),
437 }
438}
439
440#[cfg(not(feature = "sparse"))]
441pub fn sparse_linear_regression_disabled_error() -> sklears_core::error::SklearsError {
442 sklears_core::error::SklearsError::InvalidParameter {
443 name: "sparse-linear-regression".to_string(),
444 reason: "Sparse linear regression requires the 'sparse' feature".to_string(),
445 }
446}
447
448#[cfg(not(feature = "sparse"))]
449pub fn sparse_regularized_disabled_error() -> sklears_core::error::SklearsError {
450 sklears_core::error::SklearsError::InvalidParameter {
451 name: "sparse-regularized".to_string(),
452 reason: "Sparse regularized models require the 'sparse' feature".to_string(),
453 }
454}
455
456#[derive(Debug, Clone, Copy, PartialEq, Default)]
458pub enum Penalty {
459 #[default]
461 None,
462 L1(f64),
464 L2(f64),
466 ElasticNet { l1_ratio: f64, alpha: f64 },
468}