sklears_kernel_approximation/
lib.rs

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