use model_selection_rs::splitters::{CvSplitter, TimeSeriesSplit};
fn show(name: &str, tss: &TimeSeriesSplit, n: usize) {
println!("== {name} ==");
for (f, (train, test)) in tss.split(n).unwrap().iter().enumerate() {
println!(
" fold {f}: train [{}..={}] ({} samples) -> test [{}..={}]",
train.first().unwrap(),
train.last().unwrap(),
train.len(),
test.first().unwrap(),
test.last().unwrap(),
);
}
println!();
}
fn main() {
let n = 20;
show(
"expanding window (n_splits=4)",
&TimeSeriesSplit::new(4).unwrap(),
n,
);
show(
"fixed window (max_train_size=5)",
&TimeSeriesSplit::new(4).unwrap().with_max_train_size(5),
n,
);
show(
"gapped (gap=2)",
&TimeSeriesSplit::new(3).unwrap().with_gap(2),
n,
);
println!("Note: samples are assumed to be in chronological row order; every");
println!("training index is strictly earlier than every test index in its fold.");
}