| name | bio-machine-learning-prediction-explanation |
| description | Explains machine learning predictions on omics data using SHAP values and LIME for feature attribution. Identifies which genes or features drive classifier decisions. Use when interpreting biomarker classifiers or understanding model predictions. |
| tool_type | python |
| primary_tool | shap |
Model Interpretation for Omics Classifiers
SHAP TreeExplainer (v0.47+ API)
import shap
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
explainer = shap.TreeExplainer(model)
shap_values = explainer(X_test)
print(f'SHAP values shape: {shap_values.values.shape}')
Summary Plot (Global Feature Importance)
import shap
import matplotlib.pyplot as plt
shap.plots.beeswarm(shap_values, max_display=20, show=False)
plt.tight_layout()
plt.savefig('shap_summary.png', dpi=150, bbox_inches='tight')
plt.close()
shap.plots.bar(shap_values, max_display=20, show=False)
plt.savefig('shap_bar.png', dpi=150, bbox_inches='tight')
Force Plot (Individual Prediction)
sample_idx = 0
shap.plots.force(shap_values[sample_idx], matplotlib=True, show=False)
plt.savefig('shap_force_single.png', dpi=150, bbox_inches='tight')
shap.plots.waterfall(shap_values[sample_idx], max_display=15, show=False)
plt.savefig('shap_waterfall.png', dpi=150, bbox_inches='tight')
SHAP for XGBoost
from xgboost import XGBClassifier
import shap
xgb = XGBClassifier(n_estimators=100, random_state=42, eval_metric='logloss')
xgb.fit(X_train, y_train)
explainer = shap.TreeExplainer(xgb)
shap_values = explainer(X_test)
shap.plots.beeswarm(shap_values, max_display=20)
LIME (Local Interpretable Model-agnostic Explanations)
from lime.lime_tabular import LimeTabularExplainer
import numpy as np
explainer = LimeTabularExplainer(
X_train.values,
feature_names=X_train.columns.tolist(),
class_names=['control', 'disease'],
mode='classification'
)
sample_idx = 0
exp = explainer.explain_instance(
X_test.iloc[sample_idx].values,
model.predict_proba,
num_features=20
)
exp.save_to_file('lime_explanation.html')
Extract Top Features from SHAP
import pandas as pd
import numpy as np
mean_shap = np.abs(shap_values.values).mean(axis=0)
feature_importance = pd.DataFrame({
'feature': X_test.columns,
'mean_shap': mean_shap
}).sort_values('mean_shap', ascending=False)
top_features = feature_importance.head(20)
top_features.to_csv('shap_top_features.csv', index=False)
Dependence Plot (Feature Interactions)
shap.plots.scatter(shap_values[:, 'GENE1'], color=shap_values, show=False)
plt.savefig('shap_dependence.png', dpi=150, bbox_inches='tight')
Multi-class SHAP
explainer = shap.TreeExplainer(model)
shap_values = explainer(X_test)
class_idx = 1
shap.plots.beeswarm(shap_values[:, :, class_idx], max_display=20)
Related Skills
- machine-learning/omics-classifiers - Train models to interpret
- machine-learning/biomarker-discovery - Compare with selection-based importance
- data-visualization/heatmaps-clustering - Visualize SHAP values as heatmap