use xgboost_rust::{Booster, XGBoostResult};
fn main() -> XGBoostResult<()> {
println!("XGBoost Rust Bindings - Basic Usage Example");
println!("============================================\n");
let model_path = "iris_model.json";
println!("Loading model from: {}", model_path);
let booster = match Booster::load(model_path) {
Ok(b) => {
println!("✓ Model loaded successfully\n");
b
}
Err(e) => {
eprintln!("✗ Failed to load model: {}", e);
eprintln!("\nPlease create a model file first using the Python code in the example.");
return Err(e);
}
};
let num_features = booster.num_features()?;
println!("Model expects {} features\n", num_features);
let data = vec![
5.1, 3.5, 1.4, 0.2, 6.7, 3.0, 5.2, 2.3, 5.9, 3.0, 4.2, 1.5, ];
let num_rows = 3;
let num_features = 4;
println!("Making predictions on {} samples...", num_rows);
let predictions = booster.predict(&data, num_rows, num_features, 0, false)?;
println!("✓ Predictions complete\n");
println!("Predictions (probabilities for 3 classes):");
for i in 0..num_rows {
println!("Sample {}:", i + 1);
println!(" Class 0 (Setosa): {:.4}", predictions[i * 3]);
println!(" Class 1 (Versicolor): {:.4}", predictions[i * 3 + 1]);
println!(" Class 2 (Virginica): {:.4}", predictions[i * 3 + 2]);
let mut max_prob = predictions[i * 3];
let mut predicted_class = 0;
for j in 1..3 {
if predictions[i * 3 + j] > max_prob {
max_prob = predictions[i * 3 + j];
predicted_class = j;
}
}
println!(" → Predicted class: {}\n", predicted_class);
}
println!("Example completed successfully!");
Ok(())
}