Encoders
Categorical encoding transformers. Live in datarust::encoder.
LabelEncoder
1-D string ↔ int mapping for target labels. Implements LabelTransformer.
#![allow(unused)]
fn main() {
use datarust::encoder::LabelEncoder;
use datarust::traits::LabelTransformer;
let labels = vec!["cat".to_string(), "dog".to_string(), "cat".to_string()];
let mut le = LabelEncoder::new();
let codes = le.fit_transform(&labels)?; // [0, 1, 0]
let back = le.inverse_transform(&codes)?; // ["cat", "dog", "cat"]
}
OneHotEncoder
Encode categorical features as a one-hot numeric matrix. Supports dense and CSR sparse output.
#![allow(unused)]
fn main() {
use datarust::encoder::{OneHotEncoder, HandleUnknown};
let mut ohe = OneHotEncoder::new()
.handle_unknown(HandleUnknown::Ignore) // or Error
.sparse_output(true); // CSR SparseMatrix output
let out = ohe.fit_transform(&str_matrix)?;
}
The CSR SparseMatrix output stores only the 1.0 positions, saving significant memory for high-cardinality columns.
OrdinalEncoder
Encode categorical features as integer codes with optional user-defined ordering.
#![allow(unused)]
fn main() {
use datarust::encoder::{OrdinalEncoder, OrdinalCategories};
// Auto-detect categories from data:
let mut oe = OrdinalEncoder::new();
// Or specify explicit ordering (e.g. "low" < "medium" < "high"):
let mut oe = OrdinalEncoder::new()
.categories(OrdinalCategories::Manual(vec![vec!["low".into(), "medium".into(), "high".into()]]));
}
TargetEncoder
Supervised encoder: replaces categories with the smoothed mean of the target. Useful for high-cardinality features. Implements TargetTransformer — requires y during fit.
#![allow(unused)]
fn main() {
use datarust::encoder::{TargetEncoder, UnknownTarget};
let mut te = TargetEncoder::new()
.smoothing(1.0)
.handle_unknown(UnknownTarget::GlobalMean); // or NaN, Error
let out = te.fit_transform(&str_matrix, &y)?;
}
FrequencyEncoder
Replace categories with their count or proportion in the training data.
#![allow(unused)]
fn main() {
use datarust::encoder::{FrequencyEncoder, UnknownFrequency};
let mut fe = FrequencyEncoder::new()
.proportion(true) // proportion vs raw count
.handle_unknown(UnknownFrequency::Zero); // or Error
}
Choosing an encoder
| Situation | Encoder |
|---|---|
| Target labels (1-D) | LabelEncoder |
| Low-cardinality features | OneHotEncoder |
| High-cardinality features | TargetEncoder |
| Ordinal relationships | OrdinalEncoder (with manual ordering) |
| Count-based signal | FrequencyEncoder |