#![allow(dead_code)]
use treeboost::dataset::{BinnedDataset, FeatureInfo, FeatureType};
pub struct SimpleRng {
state: u64,
}
impl SimpleRng {
pub fn new(seed: u64) -> Self {
Self { state: seed }
}
pub fn next_f32(&mut self) -> f32 {
self.state = self.state.wrapping_mul(1103515245).wrapping_add(12345);
((self.state >> 16) & 0x7FFF) as f32 / 32767.0
}
pub fn next_range(&mut self, min: f32, max: f32) -> f32 {
min + self.next_f32() * (max - min)
}
}
pub fn extract_subset(dataset: &BinnedDataset, start_row: usize, end_row: usize) -> BinnedDataset {
let n_rows = end_row - start_row;
let n_features = dataset.num_features();
let mut features = Vec::with_capacity(n_rows * n_features);
for f in 0..n_features {
let col = dataset.feature_column(f);
for r in start_row..end_row {
features.push(col[r]);
}
}
let targets: Vec<f32> = dataset.targets()[start_row..end_row].to_vec();
let feature_info: Vec<FeatureInfo> = (0..n_features)
.map(|i| {
let info = dataset.feature_info(i);
FeatureInfo {
name: info.name.clone(),
feature_type: info.feature_type,
num_bins: info.num_bins,
bin_boundaries: info.bin_boundaries.clone(),
}
})
.collect();
BinnedDataset::new(n_rows, features, targets, feature_info)
}
pub fn create_feature_info(n_features: usize, prefix: &str) -> Vec<FeatureInfo> {
(0..n_features)
.map(|i| FeatureInfo {
name: format!("{}_{}", prefix, i),
feature_type: FeatureType::Numeric,
num_bins: 255,
bin_boundaries: vec![],
})
.collect()
}