Fouzanjaved's picture
Update app.py
115725e verified
import pandas as pd
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import load_model
from sklearn.preprocessing import MinMaxScaler
import gradio as gr
import joblib
# Load pre-trained model and scaler
model = load_model('diabetes_model.h5')
scaler = joblib.load('scaler.pkl')
def predict_diabetes(pregnancies, glucose, insulin, bmi, age):
"""Predict diabetes probability from input features"""
# Create input array
input_data = np.array([[pregnancies, glucose, insulin, bmi, age]])
# Scale features
scaled_data = scaler.transform(input_data)
# Make prediction
probability = model.predict(scaled_data, verbose=0)[0][0]
# Interpret results
status = "Diabetic" if probability >= 0.5 else "Not Diabetic"
confidence = probability if probability >= 0.5 else 1 - probability
# Create explanation
explanation = f"""
### Prediction: {status}
Confidence: {confidence:.1%}
#### Key factors contributing to this prediction:
- Glucose level: **{'High' if glucose > 140 else 'Normal'}** ({glucose} mg/dL)
- BMI: **{'Obese' if bmi >= 30 else 'Overweight' if bmi >= 25 else 'Normal'}** ({bmi})
- Age: {age} years
- Insulin: {insulin} μU/mL
- Pregnancies: {pregnancies}
"""
# Create bar chart of feature importance
features = ['Pregnancies', 'Glucose', 'Insulin', 'BMI', 'Age']
importance = [0.15, 0.45, 0.10, 0.20, 0.10] # Example weights
return {
"probability": float(probability),
"status": status,
"explanation": explanation,
"importance": (features, importance)
}
# Create Gradio interface
inputs = [
gr.Slider(0, 15, step=1, label="Number of Pregnancies"),
gr.Slider(50, 200, value=120, label="Glucose Level (mg/dL)"),
gr.Slider(0, 300, value=80, label="Insulin Level (μU/mL)"),
gr.Slider(15, 50, value=32, label="BMI (kg/m²)"),
gr.Slider(20, 100, value=33, label="Age (years)")
]
outputs = [
gr.Label(label="Diabetes Probability"),
gr.Markdown(label="Explanation"),
gr.BarPlot(x="Feature", y="Importance", label="Feature Importance")
]
title = "Diabetes Prediction App"
description = "Early detection of diabetes using machine learning. Based on research: Khanam, J.J. & Foo, S.Y. (2021)"
article = """
**About this model**:
- Trained on Pima Indians Diabetes Dataset
- Neural Network with 88.6% accuracy
- Predicts diabetes risk using 5 key health parameters
"""
gr.Interface(
fn=predict_diabetes,
inputs=inputs,
outputs=outputs,
title=title,
description=description,
article=article,
examples=[
[0, 90, 80, 24, 25],
[3, 150, 95, 32, 35],
[6, 180, 150, 38, 45]
]
).launch()