featrs 0.1.0

Feature engineering library for Rust, inspired by scikit-learn
Documentation

featrs

Feature engineering library for Rust, inspired by scikit-learn.

Built on Polars — works natively with DataFrames.

Status: Early development — API is unstable and incomplete.

Features

Component Status
Component Status
--- ---
StandardScaler
MinMaxScaler
RobustScaler
Normalizer
OneHotEncoder
LabelEncoder
OrdinalEncoder
Binarizer
SimpleImputer
PolynomialFeatures
Pipeline
ColumnTransformer
VarianceThreshold
SelectKBest

Usage

[dependencies]
featrs = "0.1"

StandardScaler

use featrs::preprocessing::scaler::StandardScaler;
use featrs::traits::{Fit, Transform};

let mut scaler = StandardScaler::new();
scaler.fit(df.clone(), target.clone())?;
let scaled = scaler.transform(df)?;

Pipeline

use featrs::pipeline::Pipeline;
use featrs::preprocessing::scaler::StandardScaler;
use featrs::preprocessing::polynomial_features::PolynomialFeatures;

let mut pipeline = Pipeline::new(vec![
    ("scaler".into(), Box::new(StandardScaler::new())),
    ("poly".into(), Box::new(PolynomialFeatures::new(2))),
]);
pipeline.fit(df.clone(), target)?;
let result = pipeline.transform(df)?;

ColumnTransformer

use featrs::pipeline::ColumnTransformer;
use featrs::pipeline::Remainder;
use featrs::preprocessing::scaler::StandardScaler;

let ct = ColumnTransformer::new(
    vec![("scale".into(), Box::new(StandardScaler::new()), vec!["feat_a".into()])],
    Remainder::Passthrough,
);

Feature Selection

use featrs::feature_selection::VarianceThreshold;
use featrs::feature_selection::SelectKBest;
use featrs::feature_selection::select_kbest::FClassif;

// Remove constant / low-variance features
let mut vt = VarianceThreshold::new(0.01);
vt.fit(features.clone(), target.clone())?;
let filtered = vt.transform(features)?;

// Select top k features by ANOVA F-value
let mut skb = SelectKBest::new(5, Box::new(FClassif::new()));
skb.fit(features.clone(), target)?;
let selected = skb.transform(features)?;

PolynomialFeatures

use featrs::preprocessing::polynomial_features::PolynomialFeatures;

let mut pf = PolynomialFeatures::new(3)
    .include_bias(true)
    .interaction_only(false);
pf.fit(df.clone(), target)?;
let result = pf.transform(df)?;

License

MIT