samarth-kamble's picture
Create app.py
8c663ea verified
import pickle
import gradio as gr
# Load the trained model
with open("model.pkl", "rb") as f:
model = pickle.load(f)
# Mapping
diagnoses = {
0: "Negative",
1: "Hypothyroid",
2: "Hyperthyroid"
}
# Preprocess inputs
def preprocess_inputs(age, sex, on_thyroxine, query_on_thyroxine, on_antithyroid_meds, sick, pregnant,
thyroid_surgery, I131_treatment, query_hypothyroid, query_hyperthyroid, lithium,
goitre, tumor, hypopituitary, psych, TSH, T3, TT4, T4U, FTI):
binary_map = {'Yes': 1, 'No': 0, '': None}
on_thyroxine = binary_map[on_thyroxine]
query_on_thyroxine = binary_map[query_on_thyroxine]
on_antithyroid_meds = binary_map[on_antithyroid_meds]
sick = binary_map[sick]
pregnant = binary_map[pregnant]
thyroid_surgery = binary_map[thyroid_surgery]
I131_treatment = binary_map[I131_treatment]
query_hypothyroid = binary_map[query_hypothyroid]
query_hyperthyroid = binary_map[query_hyperthyroid]
lithium = binary_map[lithium]
goitre = binary_map[goitre]
tumor = binary_map[tumor]
hypopituitary = binary_map[hypopituitary]
psych = binary_map[psych]
sex = 1 if sex == 'F' else 0 if sex == 'M' else None
return [age, sex, on_thyroxine, query_on_thyroxine, on_antithyroid_meds, sick, pregnant,
thyroid_surgery, I131_treatment, query_hypothyroid, query_hyperthyroid, lithium,
goitre, tumor, hypopituitary, psych, TSH, T3, TT4, T4U, FTI]
# Predict function
def predict_diagnosis(age, sex, on_thyroxine, query_on_thyroxine, on_antithyroid_meds, sick, pregnant,
thyroid_surgery, I131_treatment, query_hypothyroid, query_hyperthyroid, lithium,
goitre, tumor, hypopituitary, psych, TSH, T3, TT4, T4U, FTI):
inputs = preprocess_inputs(age, sex, on_thyroxine, query_on_thyroxine, on_antithyroid_meds, sick,
pregnant, thyroid_surgery, I131_treatment, query_hypothyroid,
query_hyperthyroid, lithium, goitre, tumor, hypopituitary, psych,
TSH, T3, TT4, T4U, FTI)
output = model.predict([inputs])[0]
return diagnoses.get(output, "Unknown")
# Define Gradio interface
demo = gr.Interface(
fn=predict_diagnosis,
inputs=[
gr.Number(label="Age"),
gr.Radio(["M", "F"], label="Sex"),
gr.Radio(["Yes", "No"], label="On Thyroxine"),
gr.Radio(["Yes", "No"], label="Query on Thyroxine"),
gr.Radio(["Yes", "No"], label="On Antithyroid Meds"),
gr.Radio(["Yes", "No"], label="Sick"),
gr.Radio(["Yes", "No"], label="Pregnant"),
gr.Radio(["Yes", "No"], label="Thyroid Surgery"),
gr.Radio(["Yes", "No"], label="I131 Treatment"),
gr.Radio(["Yes", "No"], label="Query Hypothyroid"),
gr.Radio(["Yes", "No"], label="Query Hyperthyroid"),
gr.Radio(["Yes", "No"], label="Lithium"),
gr.Radio(["Yes", "No"], label="Goitre"),
gr.Radio(["Yes", "No"], label="Tumor"),
gr.Radio(["Yes", "No"], label="Hypopituitary"),
gr.Radio(["Yes", "No"], label="Psych"),
gr.Number(label="TSH"),
gr.Number(label="T3"),
gr.Number(label="TT4"),
gr.Number(label="T4U"),
gr.Number(label="FTI"),
],
outputs="text",
title="Thyroid Diagnosis Predictor",
description="Predict whether a patient has Hypothyroid, Hyperthyroid or is Negative using medical features."
)
# Launch app
if __name__ == "__main__":
demo.launch()