ravali-maddela's picture
Update app.py
6d4537d verified
raw
history blame contribute delete
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')