Loading skill
Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 16% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 126% | 0% |
| case-14 | ✓→✓ | = Same ✓ | 59% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 42% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 63% | 0% |
<!--
#
#
-->
pythonimport shap from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier(n_estimators=100, random_state=42) model.fit(X_train, y_train) explainer = shap.TreeExplainer(model) # CORRECT (v0.47+): Call explainer directly, NOT .shap_values() shap_values = explainer(X_test) # shap_values is an Explanation object # .values has shape (n_samples, n_features) for binary # .base_values has expected value print(f'SHAP values shape: {shap_values.values.shape}')
pythonimport shap import matplotlib.pyplot as plt # Beeswarm plot: shows impact direction and magnitude 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() # Bar plot: mean absolute SHAP values shap.plots.bar(shap_values, max_display=20, show=False) plt.savefig('shap_bar.png', dpi=150, bbox_inches='tight')
python# Explain single 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') # Waterfall plot (cleaner alternative) shap.plots.waterfall(shap_values[sample_idx], max_display=15, show=False) plt.savefig('shap_waterfall.png', dpi=150, bbox_inches='tight')
pythonfrom 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) # For XGBoost, shap_values contains log-odds contributions shap.plots.beeswarm(shap_values, max_display=20)
pythonfrom 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' ) # Explain single instance 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') # Or get as list: exp.as_list()
pythonimport pandas as pd import numpy as np # Mean absolute SHAP value per feature 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)
python# Shows how SHAP value varies with feature value # Automatically colors by interacting feature shap.plots.scatter(shap_values[:, 'GENE1'], color=shap_values, show=False) plt.savefig('shap_dependence.png', dpi=150, bbox_inches='tight')
pythonexplainer = shap.TreeExplainer(model) shap_values = explainer(X_test) # For multi-class, shap_values.values has shape (n_samples, n_features, n_classes) # Access class-specific values: class_idx = 1 shap.plots.beeswarm(shap_values[:, :, class_idx], max_display=20)
<!-- AUTHOR_SIGNATURE: 9a7f3c2e-MD-BABU-MIA-2026-MSSM-SECURE -->
Other measured skills in the registry, with their headline benchmark lift.