ravali-maddela's picture
Update app.py
6d4537d verified
raw
history blame
No virus
3.8 kB
import gradio as gr
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import joblib
import numpy as np
# Define the model architecture
model = joblib.load('Keras.pkl')
manual_encoding = {
"Gender": {"Male": 1, "Female": 0, "-99": -99},
"Race (Reported)": {"White": 0, "Other Mixed Race": 1, "African-American": 2, "Black": 3, "Hispanic": 4, "Japanese": 5, "Han Chinese": 6, "other": 7, "Asian": 8, "Korean": 9, "Caucasian": 10, "Black or African American": 11, "Other": 12, "Intermediate": 13, "Malay": 14, "Chinese": 15, "Indian": 16, "Black Caribbean": 17, "Other (Hungarian)": 18, "Other (Black British)": 19, "Black African": 20, "Black other": 21},
"Age": {"90+": 6, "80 - 89": 5, "70 - 79": 4, "60 - 69": 3, "50 - 59": 2, "40 - 49": 1, "30 - 39": 0, "20 - 29": 7, "10 - 19": 8},
"Diabetes": {1: 1, 0: 0},
"Simvastatin (Zocor)": {1: 1, 0: 0},
"Amiodarone (Cordarone)": {1: 1, 0: 0},
"Target INR": {3.5: 5, 3.25: 5, 3.0: 5, 2.8: 5, 2.7: 5, 2.6: 5, 2.5: 5, 2.3: 5, 2.2: 5, 2.0: 5, 1.75: 5, 1.3: 5},
"Cyp2C9 genotypes": {"*1/*1": 0, "*1/*3": 1, "*1/*2": 2, "*2/*2": 3, "*2/*3": 4, "*3/*3": 5, "*1/*5": 6, "*1/*13": 7, "*1/*14": 8, "*1/*11": 9, "*1/*6": 10},
"VKORC1 genotype: -1639 G>A (3673); chr16:31015190; rs9923231; C/T": {"A/A": 0, "A/G": 1, "G/G": 2}
}
def apply_encoding(input_data):
encoded_data = {}
for key, value in input_data.items():
if key in manual_encoding:
encoded_data[key] = manual_encoding[key][value]
else:
encoded_data[key] = value
return encoded_data
def predict_warfarin_dose(gender, race, age_group, height, weight, diabetes, simvastatin, amiodarone, target_inr, inr_on_reported_dose, cyp2c9, vkorc1):
# Encode input data
encoded_data = apply_encoding({
"Gender": gender,
"Race (Reported)": race,
"Age": age_group,
"Height": height,
"Weight": weight,
"Diabetes": diabetes,
"Simvastatin (Zocor)": simvastatin,
"Amiodarone (Cordarone)": amiodarone,
"Target INR": target_inr,
"INR on Reported Therapeutic Dose of Warfarin": inr_on_reported_dose,
"Cyp2C9 genotypes": cyp2c9,
"VKORC1 genotype: -1639 G>A (3673); chr16:31015190; rs9923231; C/T": vkorc1
})
# Convert encoded data to a format compatible with the model
input_data = [encoded_data[key] for key in encoded_data]
input_data = np.array(input_data).reshape(1, -1)
# Make prediction using the trained model
predicted_dose = model.predict(input_data)[0][0]
return str(-1*predicted_dose)
iface = gr.Interface(
fn=predict_warfarin_dose,
inputs=[
gr.Dropdown(["Male", "Female", "-99"], label="Gender"),
gr.Dropdown(list(manual_encoding["Race (Reported)"].keys()), label="Race"),
gr.Dropdown(list(manual_encoding["Age"].keys()), label="Age Group"),
gr.Number(label="Height (cm)"),
gr.Number(label="Weight (kg)"),
gr.Dropdown([1, 0], label="Diabetes"),
gr.Dropdown([1, 0], label="Simvastatin"),
gr.Dropdown([1, 0], label="Amiodarone"),
gr.Dropdown(list(manual_encoding["Target INR"].keys()), label="Target INR"),
gr.Number(label="INR on Reported Therapeutic Dose of Warfarin"),
gr.Dropdown(list(manual_encoding["Cyp2C9 genotypes"].keys()), label="CYP2C9 Genotypes"),
gr.Dropdown(list(manual_encoding["VKORC1 genotype: -1639 G>A (3673); chr16:31015190; rs9923231; C/T"].keys()), label="VKORC1 Genotype"),
],
outputs=gr.Textbox(label="Predicted Therapeutic Dose of Warfarin (mg/week)"),
title="Warfarin Dosing Prediction",
description="Enter patient information to predict the therapeutic dose of warfarin.",
)
iface.launch('share=True')