## A Complete Rust Example To run this example, add the following code to your `Cargo.toml` file. ```toml [dependencies] forust-ml = "0.4.8" polars = "0.28" reqwest = { version = "0.11", features = ["blocking"] } ``` The following is a runable example using `polars` for data processing. The actual data manipulation can be performed with any tool, the only vital part, is the data be in column major format. ```rust use forust_ml::{GradientBooster, Matrix}; use polars::prelude::*; use reqwest::blocking::Client; use std::error::Error; use std::io::Cursor; fn main() -> Result<(), Box> { let data: Vec = Client::new() .get("https://raw.githubusercontent.com/mwaskom/seaborn-data/master/titanic.csv") .send()? .text()? .bytes() .collect(); let df = CsvReader::new(Cursor::new(data)) .has_header(true) .finish()? .select(["survived", "pclass", "age", "sibsp", "parch", "fare"])?; // Get data in column major format... let id_vars: Vec<&str> = Vec::new(); let mdf = df.melt(id_vars, ["pclass", "age", "sibsp", "parch", "fare"])?; let data: Vec = mdf .select_at_idx(1) .expect("Invalid column") .f64()? .into_iter() .map(|v| v.unwrap_or(f64::NAN)) .collect(); let y: Vec = df .column("survived")? .cast(&DataType::Float64)? .f64()? .into_iter() .map(|v| v.unwrap_or(f64::NAN)) .collect(); // Create Matrix from ndarray. let matrix = Matrix::new(&data, y.len(), 5); // Create booster. // To provide parameters generate a default booster, and then use // the relevant `set_` methods for any parameters you would like to // adjust. let mut model = GradientBooster::default().set_learning_rate(0.3); model.fit_unweighted(&matrix, &y, None)?; // Predict output. println!("{:?} ...", &model.predict(&matrix, true)[0..10]); Ok(()) } ``` ``` [-1.275806741323322, 0.9178487278986722, -1.4758225567638874, 1.0830510996747762, -1.7252372093498707, -1.4195771454833448, -0.27499967138282955, -0.9451315118931234, -0.08839774504303932, 1.374593096319586] ... ``` We first read in the data, and then, generate a contiguous matrix, that is used for training the booster. At this point, we can then instantiate out gradient booster, using the default parameters. These can be adjusted using the relevant `set_` methods, for any parameters of interest ([see here](src/gradientbooster.rs#L278) for all such methods).