beet_ml 0.0.8

Machine Learning actions built upon beet_flow
#[derive(Debug, Clone)]
pub struct Evaluation {
	pub total_steps: u128,
	pub mean: f32,
	pub std: f32,
}

impl Evaluation {
	pub fn new(rewards: Vec<f32>, total_steps: u128) -> Self {
		let mean = mean(&rewards).unwrap();
		let std = variance(&rewards).unwrap();
		Self {
			mean,
			std,
			total_steps,
		}
	}
}

fn mean(data: &[f32]) -> Option<f32> {
	let len = data.len();
	if len == 0 {
		return None;
	}
	Some(data.iter().sum::<f32>() / len as f32)
}


fn variance(data: &[f32]) -> Option<f32> {
	let len = data.len();
	if len < 2 {
		return None;
	}

	let mean = data.iter().sum::<f32>() / len as f32;
	let var = data.iter().map(|value| (value - mean).powi(2)).sum::<f32>()
		/ (len - 1) as f32;
	Some(var)
}