Implementation:SeldonIO Seldon core Alibi Explainer Training
Appearance
| Field | Value |
|---|---|
| Type | API Doc |
| Overview | Concrete tools for training model explainers provided by the alibi library. |
| Domains | Explainability, MLOps |
| Workflow | Model_Explainability |
| Related Principle | SeldonIO_Seldon_core_Explainer_Model_Training |
| Source | samples/scripts/explainers/make_test_models.py:L147-265, samples/scripts/models/income/train.py:L70-103
|
| Last Updated | 2026-02-13 00:00 GMT |
Code Reference
AnchorTabular for Income Classification
Source: samples/scripts/explainers/make_test_models.py:L163-228
def make_anchor_tabular_income(dirname=None):
np.random.seed(0)
adult = fetch_adult()
data = adult.data
target = adult.target
feature_names = adult.feature_names
category_map = adult.category_map
# Build classifier pipeline
ordinal_features = [x for x in range(len(feature_names)) if x not in list(category_map.keys())]
ordinal_transformer = Pipeline(steps=[('imputer', SimpleImputer(strategy='median')), ('scaler', StandardScaler())])
categorical_features = list(category_map.keys())
categorical_transformer = Pipeline(steps=[('imputer', SimpleImputer(strategy='median')), ('onehot', OneHotEncoder(handle_unknown='ignore'))])
preprocessor = ColumnTransformer(transformers=[('num', ordinal_transformer, ordinal_features), ('cat', categorical_transformer, categorical_features)])
clf = RandomForestClassifier(n_estimators=50)
model_pipeline = Pipeline(steps=[('preprocess', preprocessor), ('classifier', clf)])
model_pipeline.fit(X_train, Y_train)
explainer = AnchorTabular(model_pipeline.predict, feature_names, categorical_names=category_map, seed=1)
explainer.fit(X_train, disc_perc=[25, 50, 75])
if dirname is not None:
explainer.save(dirname)
return explainer
AnchorText for Movie Sentiment
Source: samples/scripts/explainers/make_test_models.py:L231-265
def make_anchor_text_moviesentiment(dirname=None):
movies = fetch_movie_sentiment()
data = movies.data
labels = movies.target
train, _, train_labels, test_labels = train_test_split(data, labels, test_size=.2, random_state=42)
vectorizer = CountVectorizer(min_df=1)
vectorizer.fit(train)
clf = LogisticRegression(solver='liblinear')
clf.fit(vectorizer.transform(train), train_labels)
predict_fn = lambda x: clf.predict(vectorizer.transform(x))
nlp = spacy.load('en_core_web_md')
explainer = AnchorText(predictor=predict_fn, sampling_strategy='unknown', nlp=nlp)
if dirname is not None:
explainer.save(dirname)
return explainer
KernelShap for Wine Classification
Source: samples/scripts/explainers/make_test_models.py:L44-78
def make_kernel_shap(dirname=None):
np.random.seed(0)
wine = load_wine()
X_train, X_test, y_train, y_test = train_test_split(wine.data, wine.target, test_size=0.2, random_state=0)
scaler = StandardScaler().fit(X_train)
X_train_norm = scaler.transform(X_train)
classifier = SVC(kernel='rbf', C=1, gamma=0.1, decision_function_shape='ovr', random_state=0)
classifier.fit(X_train_norm, y_train)
svm_explainer = KernelShap(classifier.decision_function)
svm_explainer.fit(X_train_norm)
if dirname is not None:
svm_explainer.save(dirname)
return svm_explainer
Key Parameters
| Constructor | Parameters | Description |
|---|---|---|
AnchorTabular |
predictor_fn, feature_names, categorical_names, seed |
Tabular anchor explainer; predictor_fn is the model's predict function, categorical_names maps column indices to category names |
AnchorTabular.fit |
X_train, disc_perc |
Fits discretization bins; disc_perc sets percentile boundaries (e.g., [25, 50, 75]) |
AnchorText |
predictor, sampling_strategy, nlp |
Text anchor explainer; sampling_strategy controls word replacement ('unknown' replaces with UNK tokens); nlp is a spaCy model |
KernelShap |
predictor_fn |
SHAP explainer; predictor_fn is the model's decision function or predict method |
KernelShap.fit |
X_train |
Fits background distribution for marginal expectations |
I/O Contract
Inputs
- Trained classifier: A model with a
predictordecision_functionmethod (or equivalent callable) - Training data: NumPy array of training features (
X_train) for AnchorTabular and KernelShap; list of text strings for AnchorText - Feature metadata: Feature names list, category map for categorical features (AnchorTabular); spaCy NLP model (AnchorText)
Outputs
- Serialized explainer artifacts: Written via
explainer.save(dirname)to a directory, producing files that can be uploaded to GCS and served by MLServer's Alibi-Explain runtime
External Dependencies
alibi(AnchorTabular, AnchorText, KernelShap)sklearn(Pipeline, StandardScaler, RandomForestClassifier, SVC, etc.)spacy(en_core_web_md model for AnchorText)numpy
Usage Examples
Training and Saving an AnchorTabular Explainer
from alibi.explainers import AnchorTabular
import numpy as np
# Assuming model_pipeline is already trained
explainer = AnchorTabular(model_pipeline.predict, feature_names, categorical_names=category_map, seed=1)
explainer.fit(X_train, disc_perc=[25, 50, 75])
explainer.save("/path/to/anchor-explainer")
Training and Saving a KernelShap Explainer
from alibi.explainers import KernelShap
svm_explainer = KernelShap(classifier.decision_function)
svm_explainer.fit(X_train_norm)
svm_explainer.save("/path/to/shap-explainer")
Knowledge Sources
- Repo: SeldonIO/seldon-core
- Doc: Alibi Explain Documentation
- Paper: Anchors: High-Precision Model-Agnostic Explanations
Related Pages
- SeldonIO_Seldon_core_Explainer_Model_Training - parent principle - Training model-agnostic explanation models.
- SeldonIO_Seldon_core_Seldon_Model_CRD_Explainer_Deploy - next step - Deploying the trained explainer artifacts.
- SeldonIO_Seldon_core_Seldon_Model_Load_For_Explainer - prerequisite - The base model must be deployed before the explainer.
- Environment:SeldonIO_Seldon_core_Python_ML_Dependencies_Environment
Page Connections
Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment