shap-rs 0.1.0

Native Rust implementations of model-agnostic, linear, and TreeSHAP explainers
Documentation
use crate::{Explanation, Result, ShapError};
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct WaterfallItem {
    pub feature: usize,
    pub value: f64,
    pub contribution: f64,
}
pub fn data(e: &Explanation, sample: usize, output: usize) -> Result<Vec<WaterfallItem>> {
    if sample >= e.n_samples() {
        return Err(ShapError::InvalidSampleIndex {
            index: sample,
            n_samples: e.n_samples(),
        });
    }
    if output >= e.n_outputs() {
        return Err(ShapError::InvalidOutputIndex {
            index: output,
            n_outputs: e.n_outputs(),
        });
    }
    let mut r = (0..e.n_features())
        .map(|j| WaterfallItem {
            feature: j,
            value: e.data()[[sample, j]],
            contribution: e.values()[[sample, j, output]],
        })
        .collect::<Vec<_>>();
    r.sort_by(|a, b| b.contribution.abs().total_cmp(&a.contribution.abs()));
    Ok(r)
}