Spaces:
Sleeping
Sleeping
# -*- coding: utf-8 -*- | |
"""app.ipynb | |
Automatically generated by Colab. | |
Original file is located at | |
https://colab.research.google.com/drive/1oJP09Coya1D16dQ_7fpVGlbuLnCWxHTN | |
""" | |
import gradio as gr | |
import joblib | |
import numpy as np | |
from tensorflow.keras.models import load_model | |
# Load models | |
svr_model = joblib.load('SVR_model.joblib') | |
rf_model = joblib.load('RandomForestRegressor_model.joblib') | |
dt_model = joblib.load('best_DecisionTreeRegressor_model.joblib') | |
dl_model = load_model('best_DeepLearning_model.h5') | |
# Load preprocessing objects | |
label_encoder = joblib.load('label_encoder.joblib') | |
column_transformer = joblib.load('column_transformer.joblib') | |
def predict_warfarin_dose(gender, race, age, height, weight, diabetes, | |
simvastatin, amiodarone, inr_reported, | |
cyp2c9, vkorc1, model_choice): | |
try: | |
# Encode Age | |
age_encoded = label_encoder.transform([age]) | |
# Create input list | |
inputs = [ | |
str(gender), | |
str(race), | |
str(age), | |
float(height) if height is not None else 0.0, | |
float(weight) if weight is not None else 0.0, | |
float(diabetes), | |
float(simvastatin), | |
float(amiodarone), | |
float(inr_reported) if inr_reported is not None else 0.0, | |
str(cyp2c9), | |
str(vkorc1) | |
] | |
# Transform inputs | |
inputs_transformed = column_transformer.transform([inputs]) | |
inputs_transformed[0][-7] = age_encoded[0] | |
input_data = np.array(inputs_transformed, dtype=np.float32) | |
# Make prediction based on model choice | |
if model_choice == 'Deep Learning': | |
prediction = dl_model.predict(input_data)[0][0] | |
elif model_choice == 'Support Vector Regression': | |
prediction = svr_model.predict(input_data)[0] | |
elif model_choice == 'Random Forest': | |
prediction = rf_model.predict(input_data)[0] | |
else: | |
prediction = dt_model.predict(input_data)[0] | |
return f"Predicted Warfarin Dose: {prediction:.2f} mg/week" | |
except Exception as e: | |
return f"Error in prediction: {str(e)}" | |
# Create the Gradio interface | |
iface = gr.Interface( | |
fn=predict_warfarin_dose, | |
inputs=[ | |
gr.Radio(["male", "female"], label="Gender"), | |
gr.Dropdown(["Asian", "Black", "White", "Unknown", "Mixed or Missing"], label="Race"), | |
gr.Dropdown(["0-9", "10-19", "20-29", "30-39", "40-49", "50-59", "60-69", | |
"70-79", "80-89", "90+"], label="Age"), | |
gr.Number(label="Height (cm)"), | |
gr.Number(label="Weight (kg)"), | |
gr.Radio([0.0, 1.0], label="Diabetes"), | |
gr.Radio([0.0, 1.0], label="Simvastatin (Zocor)"), | |
gr.Radio([0.0, 1.0], label="Amiodarone (Cordarone)"), | |
gr.Number(label="INR on Reported Therapeutic Dose of Warfarin"), | |
gr.Dropdown(["*1/*1", "*1/*2", "*1/*3", "*2/*2", "*2/*3", "*3/*3"], | |
label="Cyp2C9 genotypes"), | |
gr.Radio(["A/A", "A/G", "G/G"], label="VKORC1 genotypes"), | |
gr.Dropdown(['Decision Tree', 'Support Vector Regression', | |
'Random Forest', 'Deep Learning'], label="Model Selection") | |
], | |
outputs=gr.Textbox(label="Prediction Result"), | |
title="Warfarin Dosage Prediction System", | |
description="""This system predicts the optimal warfarin dosage based on patient characteristics. | |
Enter the required information below and select a model for prediction.""", | |
examples=[ | |
["male", "Asian", "50-59", 170, 70, 0.0, 0.0, 0.0, 2.5, "*1/*1", "A/G", "Random Forest"], | |
["female", "White", "60-69", 165, 65, 1.0, 1.0, 0.0, 2.8, "*1/*2", "G/G", "Deep Learning"] | |
], | |
theme="default" | |
) | |
# Launch the interface | |
if __name__ == "__main__": | |
iface.launch() |