File size: 3,581 Bytes
8c663ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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()