sklears_kernel_approximation/
lib.rs

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