1 unstable release

new 0.1.0-alpha.1 Apr 12, 2025

#1174 in Machine learning

Apache-2.0

1MB
17K SLoC

scirs2-transform

This crate provides data transformation utilities for the SciRS2 library, designed to mimic the functionality of scikit-learn's preprocessing and decomposition modules.

Features

Data Normalization and Standardization

  • Min-max scaling
  • Z-score standardization (mean 0, std 1)
  • Max-absolute scaling
  • L1 and L2 normalization
  • Normalizer class for fitting and transforming
use ndarray::array;
use scirs2_transform::normalize::{normalize_array, NormalizationMethod};

// Normalize columns using min-max normalization
let data = array![[1.0, 2.0, 3.0], 
                 [4.0, 5.0, 6.0],
                 [7.0, 8.0, 9.0]];
let normalized = normalize_array(&data, NormalizationMethod::MinMax, 0).unwrap();

// Using the Normalizer for fit-transform workflows
let mut normalizer = Normalizer::new(NormalizationMethod::ZScore, 0);
let train_data = normalizer.fit_transform(&training_data).unwrap();
let test_data = normalizer.transform(&test_data).unwrap();

Feature Engineering

  • Polynomial features generation
  • Binarization
  • Discretization (equal-width and equal-frequency binning)
  • Power transformations (Box-Cox and Yeo-Johnson)
  • Log transformations
use ndarray::array;
use scirs2_transform::features::{PolynomialFeatures, binarize};

// Generate polynomial features
let data = array![[1.0, 2.0], [3.0, 4.0]];
let poly = PolynomialFeatures::new(2, false, true);
let poly_features = poly.transform(&data).unwrap();

// Binarize features with a threshold
let data = array![[1.0, -1.0, 2.0], [2.0, 0.0, -3.0]];
let binary = binarize(&data, 0.0).unwrap();

Dimensionality Reduction

  • Principal Component Analysis (PCA)
  • Truncated Singular Value Decomposition (SVD)
  • Linear Discriminant Analysis (LDA)
use ndarray::array;
use scirs2_transform::reduction::PCA;

// Reduce dimensionality with PCA
let data = array![[1.0, 2.0, 3.0], 
                 [4.0, 5.0, 6.0],
                 [7.0, 8.0, 9.0],
                 [10.0, 11.0, 12.0]];
                 
let mut pca = PCA::new(2, true, false);
let reduced = pca.fit_transform(&data).unwrap();

// Access explained variance ratio
let explained_variance = pca.explained_variance_ratio().unwrap();
println!("Explained variance ratio: {:?}", explained_variance);

Usage

Add this to your Cargo.toml:

[dependencies]
scirs2-transform = "0.1.0"

Examples

See the documentation for detailed examples of each transformation.

License

This project is licensed under the same license as the SciRS2 library.

Dependencies

~7.5MB
~132K SLoC