fn main() -> Result<(), Box> { let mut rdr = csv::ReaderBuilder::new() .has_headers(true) .from_path("data/data.csv")?; let mut x_train: Vec> = Vec::new(); let mut y_train: Vec = Vec::new(); for result in rdr.records() { let record = result?; let x1: f64 = record[0].parse()?; let x2: f64 = record[1].parse()?; let y: f64 = record[2].parse()?; x_train.push(vec![x1, x2]); y_train.push(y); } let gp_model = friedrich::gaussian_process::GaussianProcess::default(x_train, y_train); let x_test = vec![50.0, 70.0]; let y_mu = gp_model.predict(&x_test); let y_sigma = gp_model.predict_variance(&x_test).sqrt(); println!("y μ = {}", y_mu); println!("y σ = {}", y_sigma); println!("{:?}", gp_model.kernel); Ok(()) }