Spaces:
Sleeping
Sleeping
import gradio as gr | |
import pandas as pd | |
import numpy as np | |
import joblib | |
# Load the model and scaler | |
model = joblib.load('catboost_model.pkl') | |
scaler = joblib.load('scaler.pkl') | |
# Define feature lists (make sure the order is consistent with training) | |
cat_features = ['Gender', 'Race', 'Education', 'Smoke', 'Alcohol'] | |
num_features = ['Age', 'BMI', 'PIR', 'MPAH', 'PFDE', 'PFHxS', 'PFNA', 'PFOA', 'PFOS', 'PFUA'] | |
# Define the prediction function | |
def predict_ra(gender, race, education, smoke, alcohol, age, bmi, pir, mpah, pfde, pfhxs, pfna, pfoa, pfos, pfua): | |
""" | |
Predicts Rheumatoid arthritis risk based on input features. | |
""" | |
# 1. Create a DataFrame | |
input_data = pd.DataFrame({ | |
'Gender': [gender], | |
'Race': [race], | |
'Education': [education], | |
'Smoke': [smoke], | |
'Alcohol': [alcohol], | |
'Age': [age], | |
'BMI': [bmi], | |
'PIR': [pir], | |
'MPAH': [mpah], | |
'PFDE': [pfde], | |
'PFHxS': [pfhxs], | |
'PFNA': [pfna], | |
'PFOA': [pfoa], | |
'PFOS': [pfos], | |
'PFUA': [pfua] | |
}) | |
# 2. Standardize numerical features | |
input_data[num_features] = scaler.transform(input_data[num_features]) | |
# 3. Make a prediction | |
prediction = model.predict(input_data)[0] | |
probability = model.predict_proba(input_data)[0][1] | |
# 4. Format the output | |
if prediction == 1: | |
result_text = "Prediction: Rheumatoid arthritis" | |
else: | |
result_text = "Prediction: Healthy" | |
return f"{result_text}\nRisk Probability: {probability:.2%}" | |
# Define the Gradio interface using gr.Blocks() for layout flexibility | |
with gr.Blocks() as iface: | |
gr.Markdown("# Rheumatoid arthritis Risk Prediction Calculator") # Title | |
gr.Markdown("Enter patient information to predict Rheumatoid arthritis risk.") # Description | |
with gr.Row(): # Layout: Use Rows and Columns for organization | |
with gr.Column(): | |
gr.Markdown("## Basic Information") | |
gender = gr.Radio([1, 2], label="Gender", info="1: Male, 2: Female", value=1) | |
race = gr.Dropdown([1, 2, 3, 4, 5], label="Race", info="1: Mexican American, 2: Other Hispanic, 3: Non-Hispanic White, 4: Non-Hispanic Black, 5: Other Race", value=1) | |
education = gr.Radio([0, 1], label="Education Level", info="0: High school or below, 1: Above high school", value=0) | |
smoke = gr.Checkbox(label="Smoking", info="Does the patient smoke?") | |
alcohol = gr.Checkbox(label="Alcohol Consumption", info="Does the patient consume alcohol?") | |
with gr.Column(): | |
gr.Markdown("## Physical Indicators") | |
age = gr.Number(label="Age", value=30) | |
bmi = gr.Number(label="BMI", value=22.0) | |
pir = gr.Number(label="PIR", value=2.0) | |
mpah = gr.Number(label="MPAH (ng/mL)", value=0.5) | |
pfde = gr.Number(label="PFDE (ng/mL)", value=0.5) | |
pfhxs = gr.Number(label="PFHxS (ng/mL)", value=1.0) | |
pfna = gr.Number(label="PFNA (ng/mL)", value=0.5) | |
pfoa = gr.Number(label="PFOA (ng/mL)", value=2.0) | |
pfos = gr.Number(label="PFOS (ng/mL)", value=5.0) | |
pfua = gr.Number(label="PFUA (ng/mL)", value=0.5) | |
predict_button = gr.Button("Predict") # Prediction button | |
output_textbox = gr.Textbox(label="Prediction Result") # Output text box | |
predict_button.click(predict_ra, | |
inputs=[gender, race, education, smoke, alcohol, age, bmi, pir, mpah, pfde, pfhxs, pfna, pfoa, pfos, pfua], | |
outputs=output_textbox) | |
# Launch the Gradio app | |
iface.launch() |