v0.1.0¶
Release Date: 2025-03-09
Initial release of SHAP-Go, a Go-native implementation of SHAP (SHapley Additive exPlanations) for machine learning model explainability.
Features¶
Core Framework¶
- Explanation Types (
explanation/): Core types for representing SHAP explanations with feature attributions, base values, and predictions - Model Interface (
model/): Generic model interface withFuncModelwrapper for easy integration of any prediction function - Masker Package (
masker/): Feature masking strategies for SHAP computation IndependentMasker: Assumes feature independence, samples from background distribution- Background Dataset (
background/): Background dataset management for reference distributions
Explainers¶
- PermutationSHAP (
explainer/permutation/): Black-box explainer using permutation-based Shapley computation - Antithetic sampling for variance reduction
- Guarantees local accuracy (SHAP values sum to prediction - base value)
- SamplingSHAP (
explainer/sampling/): Monte Carlo approximation for faster estimates - Configurable sample count for speed/accuracy tradeoff
Model Integration¶
- ONNX Runtime (
model/onnx/): Integration with ONNX Runtime for inference - Support for ONNX models exported from scikit-learn, XGBoost, LightGBM, PyTorch, etc.
Visualization¶
- Render Package (
render/): SHAP visualization output formats - ChartIR JSON output for integration with visualization tools
- Support for waterfall, bar, and beeswarm chart types
Utilities¶
- Permutation Utilities (
internal/rand/): Efficient permutation generation for SHAP computation
Examples¶
examples/linear/: Linear model example demonstrating basic SHAP usage
Installation¶
Quick Start¶
package main
import (
"context"
"fmt"
"github.com/plexusone/shap-go/background"
"github.com/plexusone/shap-go/explainer/permutation"
"github.com/plexusone/shap-go/masker"
"github.com/plexusone/shap-go/model"
)
func main() {
// Define a simple model
predict := func(X [][]float64) []float64 {
results := make([]float64, len(X))
for i, x := range X {
results[i] = 0.5*x[0] + 0.3*x[1] + 0.2*x[2]
}
return results
}
// Wrap the prediction function
m := model.NewFuncModel(predict, 3)
// Create background dataset and masker
bg := background.New(trainingData)
msk, _ := masker.NewIndependentMasker(bg.Data())
// Create explainer
exp, _ := permutation.New(m, msk)
// Explain a prediction
instance := []float64{1.0, 2.0, 3.0}
explanation, _ := exp.Explain(context.Background(), instance)
fmt.Printf("SHAP values: %v\n", explanation.Values)
}