Skip to main content

shap_rs/explainers/
additive.rs

1use crate::{Explainer, Explanation, Result};
2use ndarray::{Array2, Array3, ArrayView2};
3/// Explainer for generalized additive models. The callback returns base values
4/// and already-separated per-feature term contributions.
5pub struct AdditiveExplainer<F> {
6    decompose: F,
7}
8impl<F> AdditiveExplainer<F> {
9    pub fn new(decompose: F) -> Self {
10        Self { decompose }
11    }
12}
13impl<F> Explainer for AdditiveExplainer<F>
14where
15    F: Fn(ArrayView2<'_, f64>) -> Result<(Array2<f64>, Array3<f64>)>,
16{
17    fn explain(&self, x: ArrayView2<'_, f64>) -> Result<Explanation> {
18        let (base, values) = (self.decompose)(x)?;
19        Explanation::new(values, base, x.to_owned())
20    }
21}