nirs4all.api.explain module
Module-level explain() function for nirs4all.
This module provides a simple interface for generating SHAP explanations for trained nirs4all models. It wraps PipelineRunner.explain() with ergonomic defaults and returns a structured ExplainResult.
Example
>>> import nirs4all
>>> result = nirs4all.explain(
... model="exports/best_model.n4a",
... data=X_test,
... verbose=1
... )
>>> print(f"Top features: {result.top_features[:5]}")
- nirs4all.api.explain.explain(model: Dict[str, Any] | str | Path, data: str | Path | ndarray | Dict[str, Any] | SpectroDataset | DatasetConfigs, *, name: str = 'explain_dataset', session: Session | None = None, verbose: int = 1, plots_visible: bool = True, n_samples: int | None = None, explainer_type: str = 'auto', **shap_params: Any) ExplainResult[source]
Generate SHAP explanations for a trained model.
This function provides a simple interface for computing SHAP values to explain model predictions. It supports various SHAP explainer types and generates visualizations.
- Parameters:
model – Trained model specification. Can be: - Prediction dict from
result.bestorresult.top()- Path to exported bundle:"exports/model.n4a"- Path to pipeline config directorydata – Data to explain. Can be: - Path to data folder:
"test_data/"- Numpy array:X_test(n_samples, n_features) - Dict:{"X": X, "metadata": meta}- SpectroDataset instancename – Name for the explanation dataset (for logging). Default: “explain_dataset”
session – Optional Session for resource reuse. If provided, uses the session’s runner.
verbose – Verbosity level (0=quiet, 1=info, 2=debug). Default: 1
plots_visible – Whether to display plots interactively. Default: True
n_samples – Number of background samples for SHAP. If None, uses default (typically 100-200).
explainer_type – SHAP explainer type. Options: - “auto”: Automatically select best explainer - “tree”: TreeExplainer (for tree-based models) - “kernel”: KernelExplainer (model-agnostic) - “deep”: DeepExplainer (for neural networks) - “linear”: LinearExplainer (for linear models) Default: “auto”
**shap_params – Additional SHAP configuration parameters. Common options: - feature_names: List of feature names - background_samples: Number of background samples - max_display: Max features to show in plots
- Returns:
- shap_values: SHAP values array or Explanation object
feature_names: Names/labels of features
base_value: Expected value (baseline prediction)
visualizations: Paths to generated plots
mean_abs_shap: Mean absolute SHAP per feature
top_features: Features sorted by importance
Use
result.get_feature_importance()for importance ranking, orresult.to_dataframe()for pandas DataFrame output.- Return type:
ExplainResult containing
- Raises:
ValueError – If model specification is invalid.
FileNotFoundError – If model bundle or data path doesn’t exist.
ImportError – If SHAP is not installed.
Examples
Explain an exported model:
>>> import nirs4all >>> >>> result = nirs4all.explain( ... model="exports/wheat_model.n4a", ... data=X_test ... ) >>> print(f"Top 5 features: {result.top_features[:5]}") >>> importance = result.get_feature_importance(top_n=10)
Explain using a result from a previous run:
>>> # Training >>> train_result = nirs4all.run(pipeline, train_data) >>> >>> # Explain best model >>> explain_result = nirs4all.explain( ... model=train_result.best, ... data=X_test, ... explainer_type="kernel" ... )
Get SHAP values as DataFrame:
>>> result = nirs4all.explain(model, data) >>> df = result.to_dataframe() >>> df.to_csv("shap_values.csv")
Get per-sample explanations:
>>> result = nirs4all.explain(model, data) >>> sample_0_shap = result.get_sample_explanation(0) >>> for feature, value in list(sample_0_shap.items())[:5]: ... print(f"{feature}: {value:.4f}")
See also
nirs4all.run(): Train a pipelinenirs4all.predict(): Make predictionsnirs4all.api.result.ExplainResult: Result class