Spaces:
Sleeping
Sleeping
File size: 1,721 Bytes
cf40bc6 1b4fadc cf40bc6 1b4fadc 113bc30 1b4fadc cf40bc6 1b4fadc cf40bc6 113bc30 cf40bc6 113bc30 cf40bc6 113bc30 1613eae 1b4fadc 113bc30 1b4fadc cf40bc6 113bc30 cf40bc6 1b4fadc cf40bc6 113bc30 1613eae 1b4fadc 1613eae 1b4fadc cf40bc6 1b4fadc 113bc30 1b4fadc 113bc30 1b4fadc 113bc30 1b4fadc 113bc30 1b4fadc 113bc30 1b4fadc 1613eae 113bc30 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
import gradio as gr
import shap
import xgboost as xgb
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# -----------------------------
# 1. Train a simple clean model
# -----------------------------
np.random.seed(0)
X = pd.DataFrame({
"age": np.random.randint(20, 80, 200),
"bmi": np.random.uniform(18, 40, 200),
"bp": np.random.uniform(80, 160, 200)
})
y = 0.3 * X["age"] + 0.5 * X["bmi"] + 0.2 * X["bp"] + np.random.normal(0, 3, 200)
model = xgb.XGBRegressor(
n_estimators=100,
max_depth=3,
learning_rate=0.1,
objective="reg:squarederror"
)
model.fit(X, y)
# Use TreeExplainer ONLY with XGBoost <= 1.7.6
explainer = shap.TreeExplainer(model)
# -----------------------------
# 2. Prediction + SHAP plot
# -----------------------------
def predict_and_explain(age, bmi, bp):
df = pd.DataFrame([{"age": age, "bmi": bmi, "bp": bp}])
pred = float(model.predict(df)[0])
shap_values = explainer(df)
# Make SHAP waterfall plot
plt.figure(figsize=(8, 5))
shap.plots.waterfall(shap_values[0], show=False)
plt.tight_layout()
plt.savefig("shap_plot.png")
plt.close()
return pred, "shap_plot.png"
# -----------------------------
# 3. Gradio UI
# -----------------------------
inputs = [
gr.Number(label="Age"),
gr.Number(label="BMI"),
gr.Number(label="Blood Pressure"),
]
outputs = [
gr.Number(label="Prediction"),
gr.Image(label="SHAP Explanation"),
]
app = gr.Interface(
fn=predict_and_explain,
inputs=inputs,
outputs=outputs,
title="XGBoost + SHAP Deployment Fix",
description="Guaranteed working version for Hugging Face Spaces."
)
if __name__ == "__main__":
app.launch(share=True) |