sklears_kernel_approximation/
lib.rs

1#![allow(dead_code)]
2#![allow(non_snake_case)]
3#![allow(missing_docs)]
4#![allow(deprecated)]
5#![allow(clippy::all)]
6#![allow(clippy::pedantic)]
7#![allow(clippy::nursery)]
8#![allow(clippy::type_complexity)]
9#![allow(clippy::too_many_arguments)]
10#![allow(clippy::only_used_in_recursion)]
11#![allow(clippy::needless_range_loop)]
12#![allow(clippy::manual_clamp)]
13#![allow(clippy::ptr_arg)]
14#![allow(clippy::single_match)]
15#![allow(clippy::if_same_then_else)]
16#![allow(clippy::incompatible_msrv)]
17//! Kernel approximation methods
18//!
19//! This module is part of sklears, providing scikit-learn compatible
20//! machine learning algorithms in Rust.
21
22// #![warn(missing_docs)]
23
24pub mod adaptive_bandwidth_rbf;
25pub mod adaptive_dimension;
26pub mod adaptive_nystroem;
27pub mod advanced_testing;
28pub mod anisotropic_rbf;
29pub mod benchmarking;
30pub mod bioinformatics_kernels;
31pub mod budget_constrained;
32pub mod cache_optimization;
33pub mod causal_kernels;
34pub mod chi2_samplers;
35pub mod computer_vision_kernels;
36pub mod cross_validation;
37pub mod custom_kernel;
38pub mod deep_learning_kernels;
39pub mod distributed_kernel;
40pub mod ensemble_nystroem;
41pub mod error_bounded;
42pub mod fastfood;
43pub mod feature_generation;
44pub mod finance_kernels;
45pub mod gpu_acceleration;
46pub mod gradient_kernel_learning;
47pub mod graph_kernels;
48pub mod homogeneous_polynomial;
49pub mod incremental_nystroem;
50pub mod information_theoretic;
51pub mod kernel_framework;
52pub mod kernel_ridge_regression;
53pub mod memory_efficient;
54pub mod meta_learning_kernels;
55pub mod middleware;
56pub mod multi_kernel_learning;
57pub mod multi_scale_rbf;
58pub mod nlp_kernels;
59pub mod numerical_stability;
60pub mod nystroem;
61pub mod optimal_transport;
62pub mod out_of_core;
63pub mod parameter_learning;
64pub mod plugin_architecture;
65pub mod polynomial_count_sketch;
66pub mod polynomial_features;
67pub mod progressive;
68pub mod quantum_kernel_methods;
69pub mod quasi_random_features;
70pub mod rbf_sampler;
71pub mod robust_kernels;
72pub mod scientific_computing_kernels;
73// SIMD modules now use SciRS2-Core (stable Rust compatible)
74pub mod simd_kernel;
75// #[cfg(feature = "nightly-simd")]
76// pub mod simd_optimizations;
77pub mod simple_test;
78pub mod sparse_gp;
79pub mod sparse_polynomial;
80pub mod streaming_kernel;
81pub mod string_kernels;
82pub mod structured_random_features;
83pub mod tensor_polynomial;
84pub mod time_series_kernels;
85pub mod type_safe_kernels;
86pub mod type_safety;
87pub mod unsafe_optimizations;
88pub mod validation;
89
90pub use adaptive_bandwidth_rbf::{
91    AdaptiveBandwidthRBFSampler, BandwidthSelectionStrategy, ObjectiveFunction,
92};
93pub use adaptive_dimension::{
94    AdaptiveDimensionConfig, AdaptiveRBFSampler, DimensionSelectionResult,
95    FittedAdaptiveRBFSampler, QualityMetric as AdaptiveQualityMetric, SelectionStrategy,
96};
97pub use adaptive_nystroem::{
98    AdaptiveNystroem, ComponentSelectionStrategy, ErrorBoundMethod as AdaptiveErrorBoundMethod,
99};
100pub use advanced_testing::{
101    ApproximationError, BaselineMethod, BoundType as TestingBoundType, BoundValidation,
102    ConvergenceAnalyzer, ConvergenceResult, ErrorBoundsResult, ErrorBoundsValidator,
103    QualityAssessment, QualityMetric as TestingQualityMetric, QualityResult, ReferenceMethod,
104};
105pub use anisotropic_rbf::{
106    AnisotropicRBFSampler, FittedAnisotropicRBF, FittedMahalanobisRBF, FittedRobustAnisotropicRBF,
107    MahalanobisRBFSampler, RobustAnisotropicRBFSampler, RobustEstimator,
108};
109pub use benchmarking::{
110    BenchmarkConfig, BenchmarkDataset, BenchmarkResult, BenchmarkSummary,
111    BenchmarkableKernelMethod, BenchmarkableTransformer, KernelApproximationBenchmark,
112    PerformanceMetric, QualityMetric,
113};
114pub use bioinformatics_kernels::{
115    GenomicKernel, MetabolicNetworkKernel, MultiOmicsKernel, OmicsIntegrationMethod,
116    PhylogeneticKernel, ProteinKernel,
117};
118pub use budget_constrained::{
119    BudgetConstrainedConfig, BudgetConstrainedNystroem, BudgetConstrainedRBFSampler,
120    BudgetConstraint, BudgetOptimizationResult, BudgetUsage, FittedBudgetConstrainedNystroem,
121    FittedBudgetConstrainedRBFSampler, OptimizationStrategy,
122};
123pub use cache_optimization::{
124    AlignedBuffer, CacheAwareTransform, CacheConfig, CacheFriendlyMatrix, MemoryLayout,
125};
126pub use causal_kernels::{CausalKernel, CausalKernelConfig, CausalMethod, CounterfactualKernel};
127pub use chi2_samplers::{AdditiveChi2Sampler, SkewedChi2Sampler};
128pub use computer_vision_kernels::{
129    ActivationFunction, ConvolutionalKernelFeatures, FittedConvolutionalKernelFeatures,
130    FittedScaleInvariantFeatures, FittedSpatialPyramidFeatures, FittedTextureKernelApproximation,
131    PoolingMethod, ScaleInvariantFeatures, SpatialPyramidFeatures, TextureKernelApproximation,
132};
133pub use cross_validation::{
134    CVSplitter, CVStrategy, CrossValidationConfig, CrossValidationResult as CVResult,
135    CrossValidator, KFoldSplitter, MonteCarloCVSplitter, ScoringMetric, TimeSeriesSplitter,
136};
137pub use custom_kernel::{
138    CustomExponentialKernel, CustomKernelSampler, CustomLaplacianKernel, CustomPolynomialKernel,
139    CustomRBFKernel, KernelFunction,
140};
141pub use deep_learning_kernels::{
142    Activation as DeepLearningActivation, DKLConfig, DeepKernelLearning, InfiniteWidthKernel,
143    NTKConfig, NeuralTangentKernel,
144};
145pub use distributed_kernel::{
146    AggregationMethod, CommunicationPattern, DistributedConfig, DistributedNystroem,
147    DistributedRBFSampler, PartitionStrategy, Worker,
148};
149pub use ensemble_nystroem::{
150    EnsembleMethod, EnsembleNystroem, QualityMetric as EnsembleQualityMetric,
151};
152pub use error_bounded::{
153    ErrorBound, ErrorBoundMethod, ErrorBoundedConfig, ErrorBoundedNystroem, ErrorBoundedRBFSampler,
154    FittedErrorBoundedNystroem, FittedErrorBoundedRBFSampler,
155};
156pub use fastfood::{FastfoodKernel, FastfoodKernelParams, FastfoodTransform};
157pub use feature_generation::{
158    CompositeGenerator, FeatureGenerator, FeatureGeneratorBuilder, PolynomialGenerator,
159    RandomFourierGenerator,
160};
161pub use finance_kernels::{
162    EconometricKernel, FinancialKernel, PortfolioKernel, RiskKernel, VolatilityKernel,
163    VolatilityModel,
164};
165pub use gpu_acceleration::{
166    FittedGpuNystroem, FittedGpuRBFSampler, GpuBackend, GpuConfig, GpuContext, GpuDevice,
167    GpuNystroem, GpuProfiler, GpuRBFSampler, MemoryStrategy, Precision,
168};
169pub use gradient_kernel_learning::{
170    GradientConfig, GradientKernelLearner, GradientMultiKernelLearner, GradientOptimizer,
171    GradientResult, KernelObjective,
172};
173pub use graph_kernels::{
174    FittedRandomWalkKernel, FittedShortestPathKernel, FittedSubgraphKernel,
175    FittedWeisfeilerLehmanKernel, Graph, RandomWalkKernel, ShortestPathKernel, SubgraphKernel,
176    WeisfeilerLehmanKernel,
177};
178pub use homogeneous_polynomial::{
179    CoefficientMethod, HomogeneousPolynomialFeatures, NormalizationMethod,
180};
181pub use incremental_nystroem::{IncrementalNystroem, UpdateStrategy};
182pub use information_theoretic::{
183    EntropyFeatureSelector, EntropySelectionMethod, FittedEntropyFeatureSelector,
184    FittedInformationBottleneckExtractor, FittedKLDivergenceKernel, FittedMutualInformationKernel,
185    InformationBottleneckExtractor, KLDivergenceKernel, KLReferenceDistribution,
186    MutualInformationKernel,
187};
188pub use kernel_framework::{
189    ApproximationQuality, BoundType as FrameworkBoundType,
190    CombinationStrategy as FrameworkCombinationStrategy, Complexity, CompositeKernelMethod,
191    ErrorBound as FrameworkErrorBound, FeatureMap, KMeansSampling, KernelAlignmentMetric,
192    KernelMethod, KernelType as FrameworkKernelType, SamplingStrategy as SamplingStrategyTrait,
193    UniformSampling,
194};
195pub use kernel_ridge_regression::{
196    ApproximationMethod as KRRApproximationMethod, KernelRidgeRegression,
197    MultiTaskKernelRidgeRegression, OnlineKernelRidgeRegression, RobustKernelRidgeRegression,
198    RobustLoss, Solver, TaskRegularization,
199};
200pub use memory_efficient::{
201    FittedMemoryEfficientNystroem, FittedMemoryEfficientRBFSampler, MemoryConfig,
202    MemoryEfficientNystroem, MemoryEfficientRBFSampler, MemoryMonitor,
203};
204pub use meta_learning_kernels::{
205    DatasetMetaFeatures, MetaKernelType, MetaLearningConfig, MetaLearningKernelSelector,
206    MetaLearningStrategy, PerformanceMetric as MetaPerformanceMetric, TaskMetadata,
207};
208pub use middleware::{
209    Hook, HookContext, LoggingHook, Middleware, NormalizationMiddleware, PerformanceHook, Pipeline,
210    PipelineBuilder, PipelineStage, ValidationHook,
211};
212pub use multi_kernel_learning::{
213    ApproximationMethod as MKLApproximationMethod, BaseKernel,
214    CombinationStrategy as MKLCombinationStrategy, KernelStatistics, MultiKernelConfig,
215    MultipleKernelLearning, WeightLearningAlgorithm,
216};
217pub use multi_scale_rbf::{BandwidthStrategy, CombinationStrategy, MultiScaleRBFSampler};
218pub use nlp_kernels::{
219    AggregationMethod as NLPAggregationMethod, DocumentKernelApproximation,
220    FittedDocumentKernelApproximation, FittedSemanticKernelApproximation,
221    FittedSyntacticKernelApproximation, FittedTextKernelApproximation, SemanticKernelApproximation,
222    SimilarityMeasure, SyntacticKernelApproximation, TextKernelApproximation, TreeKernelType,
223};
224pub use numerical_stability::{
225    stable_kernel_matrix, NumericalStabilityMonitor, StabilityConfig, StabilityMetrics,
226    StabilityWarning,
227};
228pub use nystroem::{Kernel, Nystroem, SamplingStrategy};
229pub use optimal_transport::{
230    EMDKernelSampler, GWLossFunction, GromovWassersteinSampler, GroundMetric, TransportMethod,
231    WassersteinKernelSampler,
232};
233pub use out_of_core::{
234    OutOfCoreConfig, OutOfCoreKernelPipeline, OutOfCoreLoader, OutOfCoreNystroem,
235    OutOfCoreRBFSampler, OutOfCoreStrategy,
236};
237pub use parameter_learning::{
238    ObjectiveFunction as ParameterObjectiveFunction, OptimizationResult, ParameterBounds,
239    ParameterLearner, ParameterLearningConfig, ParameterSet, SearchStrategy,
240};
241pub use plugin_architecture::{
242    create_global_plugin_instance, list_global_plugins, register_global_plugin,
243    FittedPluginWrapper, KernelApproximationInstance, KernelApproximationPlugin,
244    LinearKernelInstance, LinearKernelPlugin, PluginConfig, PluginError, PluginFactory,
245    PluginMetadata, PluginWrapper,
246};
247pub use polynomial_count_sketch::PolynomialCountSketch;
248pub use polynomial_features::PolynomialFeatures;
249pub use progressive::{
250    FittedProgressiveNystroem, FittedProgressiveRBFSampler, ProgressiveConfig, ProgressiveNystroem,
251    ProgressiveQualityMetric, ProgressiveRBFSampler, ProgressiveResult, ProgressiveStep,
252    ProgressiveStrategy, StoppingCriterion,
253};
254pub use quantum_kernel_methods::{
255    EntanglementPattern, QuantumFeatureMap, QuantumKernelApproximation, QuantumKernelConfig,
256};
257pub use quasi_random_features::{QuasiRandomRBFSampler, QuasiRandomSequence};
258pub use rbf_sampler::{ArcCosineSampler, LaplacianSampler, PolynomialSampler, RBFSampler};
259pub use robust_kernels::{
260    BreakdownPointAnalysis, InfluenceFunctionDiagnostics, RobustEstimator as RobustKernelEstimator,
261    RobustKernelConfig, RobustLoss as RobustKernelLoss, RobustNystroem, RobustRBFSampler,
262};
263pub use scientific_computing_kernels::{
264    MultiscaleKernel, PhysicalSystem, PhysicsInformedConfig, PhysicsInformedKernel,
265};
266// #[cfg(feature = "nightly-simd")]
267// pub use simd_optimizations::{
268//     FittedSimdRBFSampler, SimdBenchmarks, SimdOptimizations, SimdRBFSampler,
269// };
270pub use sparse_gp::{
271    simd_sparse_gp, FittedSKI, FittedSparseGP, FittedTensorSKI, InducingPointSelector,
272    InducingPointStrategy, InterpolationMethod, KernelOps, LanczosMethod, MaternKernel,
273    PreconditionedCG, PreconditionerType, RBFKernel as SparseRBFKernel, ScalableInference,
274    ScalableInferenceMethod, SparseApproximation, SparseApproximationMethods,
275    SparseGaussianProcess, SparseKernel, StochasticVariationalInference,
276    StructuredKernelInterpolation, TensorSKI, VariationalFreeEnergy, VariationalParams,
277};
278pub use sparse_polynomial::{
279    SparseFormat, SparseMatrix, SparsePolynomialFeatures, SparsityStrategy,
280};
281pub use streaming_kernel::{
282    BufferStrategy, FeatureStatistics, ForgettingMechanism, StreamingConfig, StreamingNystroem,
283    StreamingRBFSampler, StreamingSample, UpdateFrequency,
284};
285pub use string_kernels::{
286    EditDistanceKernel, FittedEditDistanceKernel, FittedMismatchKernel, FittedNGramKernel,
287    FittedSpectrumKernel, FittedSubsequenceKernel, MismatchKernel, NGramKernel, NGramMode,
288    SpectrumKernel, SubsequenceKernel,
289};
290pub use structured_random_features::{
291    FastWalshHadamardTransform, StructuredMatrix, StructuredRFFHadamard, StructuredRandomFeatures,
292};
293pub use tensor_polynomial::{ContractionMethod, TensorOrdering, TensorPolynomialFeatures};
294pub use time_series_kernels::{
295    AutoregressiveKernelApproximation, DTWConfig, DTWDistanceMetric, DTWKernelApproximation,
296    DTWStepPattern, DTWWindowType, GlobalAlignmentKernelApproximation, SpectralKernelApproximation,
297    TimeSeriesKernelConfig, TimeSeriesKernelType,
298};
299pub use type_safe_kernels::{
300    ArcCosineKernel as TypeSafeArcCosineKernel, FastfoodMethod as TypeSafeFastfoodMethod,
301    FittedTypeSafeKernelApproximation, FittedTypeSafeLaplacianRandomFourierFeatures,
302    FittedTypeSafePolynomialNystrom, FittedTypeSafeRBFFastfood, FittedTypeSafeRBFNystrom,
303    FittedTypeSafeRBFRandomFourierFeatures, KernelType as TypeSafeKernelType,
304    LaplacianKernel as TypeSafeLaplacianKernel, NystromMethod as TypeSafeNystromMethod,
305    PolynomialKernel as TypeSafePolynomialKernel, QualityMetrics as TypeSafeQualityMetrics,
306    RBFKernel as TypeSafeRBFKernel, RandomFourierFeatures as TypeSafeRandomFourierFeatures,
307    Trained as TypeSafeTrained, TypeSafeKernelApproximation,
308    TypeSafeLaplacianRandomFourierFeatures, TypeSafePolynomialNystrom, TypeSafeRBFFastfood,
309    TypeSafeRBFNystrom, TypeSafeRBFRandomFourierFeatures, Untrained as TypeSafeUntrained,
310};
311pub use type_safety::{
312    ApproximationMethod,
313    ApproximationParameters,
314    ApproximationState,
315    ArcCosineKernel,
316    ComplexityClass,
317    FastfoodMethod,
318    FittableKernel,
319    FittableMethod,
320    FittedLaplacianRandomFourierFeatures,
321    FittedRBFNystrom,
322    FittedRBFRandomFourierFeatures,
323    // New exports for enhanced features
324    KernelPresets,
325    KernelType,
326    KernelTypeWithBandwidth,
327    LaplacianKernel,
328    LaplacianRandomFourierFeatures,
329    NystromMethod,
330    OptimizationLevel,
331    PolynomialKernel,
332    PolynomialKernelType,
333    PolynomialNystrom,
334    ProfileGuidedConfig,
335    QualityMetrics,
336    RBFFastfood,
337    RBFKernel,
338    RBFNystrom,
339    RBFRandomFourierFeatures,
340    RandomFourierFeatures,
341    SerializableFittedParams,
342    SerializableKernelApproximation,
343    SerializableKernelConfig,
344    TargetArchitecture,
345    Trained,
346    TransformationParameters,
347    Untrained,
348};
349pub use unsafe_optimizations::{
350    batch_rbf_kernel_fast, dot_product_unrolled, elementwise_op_fast, fast_cosine_features,
351    matvec_multiply_fast, rbf_kernel_fast, safe_dot_product, safe_matvec_multiply,
352};
353pub use validation::{
354    BoundFunction, BoundType, CrossValidationResult, DimensionDependencyAnalysis,
355    KernelApproximationValidator, SampleComplexityAnalysis, StabilityAnalysis, TheoreticalBound,
356    ValidatableKernelMethod, ValidatedFittedMethod, ValidationConfig, ValidationResult,
357};
358
359#[allow(non_snake_case)]
360#[cfg(test)]
361mod tests {
362    use super::*;
363    use scirs2_core::ndarray::array;
364    use sklears_core::traits::{Fit, Transform};
365
366    #[test]
367    fn test_kernel_approximation_integration() {
368        let x = array![[1.0, 2.0], [2.0, 3.0], [3.0, 4.0], [4.0, 5.0],];
369
370        // Test RBF sampler
371        let rbf = RBFSampler::new(100);
372        let fitted_rbf = rbf.fit(&x, &()).unwrap();
373        let x_rbf = fitted_rbf.transform(&x).unwrap();
374        assert_eq!(x_rbf.shape(), &[4, 100]);
375
376        // Test Laplacian sampler
377        let laplacian = LaplacianSampler::new(50);
378        let fitted_laplacian = laplacian.fit(&x, &()).unwrap();
379        let x_laplacian = fitted_laplacian.transform(&x).unwrap();
380        assert_eq!(x_laplacian.shape(), &[4, 50]);
381
382        // Test Additive Chi2 sampler (stateless)
383        let chi2 = AdditiveChi2Sampler::new(2);
384        let x_chi2 = chi2.transform(&x.mapv(|v| v.abs())).unwrap();
385        assert_eq!(x_chi2.shape(), &[4, 6]); // 2 features * (2*2-1) = 6
386
387        // Test Polynomial sampler
388        let poly = PolynomialSampler::new(30).degree(3).gamma(1.0).coef0(1.0);
389        let fitted_poly = poly.fit(&x, &()).unwrap();
390        let x_poly = fitted_poly.transform(&x).unwrap();
391        assert_eq!(x_poly.shape(), &[4, 30]);
392
393        // Test Arc-cosine sampler
394        let arc_cosine = ArcCosineSampler::new(25).degree(1);
395        let fitted_arc = arc_cosine.fit(&x, &()).unwrap();
396        let x_arc = fitted_arc.transform(&x).unwrap();
397        assert_eq!(x_arc.shape(), &[4, 25]);
398    }
399}