high77 commited on
Commit
9afc34e
·
verified ·
1 Parent(s): 474c281

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +23 -26
app.py CHANGED
@@ -2,13 +2,11 @@ import gradio as gr
2
  import numpy as np
3
  import joblib
4
 
5
- # Load models and encoder
6
  model_binary = joblib.load("model_binary_cv.pkl")
7
  model_multiclass = joblib.load("model_multiclass_cv.pkl")
8
- label_enc = joblib.load("label_encoder_multiclass.pkl")
9
-
10
- # Define scaler
11
  scaler = joblib.load("scaler.pkl")
 
12
 
13
  def predict_diabetes(
14
  Age,
@@ -26,15 +24,16 @@ def predict_diabetes(
26
  smoking_status,
27
  family_history_cardiovascular_disease
28
  ):
29
- # Convert inputs
30
  alcohol_consumption = int(alcohol_consumption)
31
  family_history_diabetes = int(family_history_diabetes)
32
 
 
33
  Gender_FEMALE = 1 if Gender == "Female" else 0
34
  Gender_MALE = 1 if Gender == "Male" else 0
35
 
36
  dietary_non_vegetarian = 1 if dietary_habits == "Non-vegetarian" else 0
37
- dietary_non_vegetarian_dup = 1 if dietary_habits == "Non-vegetarian" else 0 # duplicate column
38
  dietary_vegetarian = 1 if dietary_habits == "Vegetarian" else 0
39
 
40
  smoking_no = 1 if smoking_status == "No" else 0
@@ -43,12 +42,9 @@ def predict_diabetes(
43
  family_history_cvd_no = 1 if family_history_cardiovascular_disease == "No" else 0
44
  family_history_cvd_yes = 1 if family_history_cardiovascular_disease == "Yes" else 0
45
 
46
- patient_id = 0 # Dummy
47
- # No binary_status in input — it's what we're predicting
48
-
49
- # Construct input feature array for binary model (drop target fields)
50
  input_data = np.array([[
51
- patient_id,
52
  Age,
53
  Total_cholesterol,
54
  HDL,
@@ -70,29 +66,29 @@ def predict_diabetes(
70
  family_history_cvd_yes
71
  ]])
72
 
 
73
  input_scaled = scaler.transform(input_data)
74
 
75
- # Step 1: Binary prediction
76
- risk_pred = model_binary.predict(input_scaled)[0]
77
- if risk_pred == 0:
78
  return "✅ Prediction: No Diabetes Risk (Normal)"
79
 
80
- # Step 2: Multiclass prediction (only if at risk)
81
- status_pred_enc = model_multiclass.predict(input_scaled)[0]
82
- status_pred = label_enc.inverse_transform([status_pred_enc])[0]
83
 
84
- return f"⚠️ At Risk: {status_pred}"
85
 
86
- # Gradio Interface
87
  with gr.Blocks() as demo:
88
  gr.Markdown("# 🩺 Diabetes Risk and Type Predictor")
89
  gr.Markdown(
90
  """
91
  Developed by Dr. Vinod Kumar Yata's research group
92
- School of Allied and Healthcare Sciences, Malla Reddy University, Hyderabad, India
93
-
94
- ⚠️ **Note:** This tool predicts both diabetes **risk** and type.
95
- Not a substitute for medical advice.
96
  """
97
  )
98
 
@@ -115,16 +111,17 @@ with gr.Blocks() as demo:
115
  smoking_status = gr.Radio(label="Smoking status", choices=["No", "Yes"], value="No")
116
  family_history_cardiovascular_disease = gr.Radio(label="Family history of cardiovascular disease", choices=["No", "Yes"], value="No")
117
 
118
- submit_btn = gr.Button("Submit")
119
  output = gr.Textbox(label="Prediction")
 
120
 
121
  submit_btn.click(
122
  fn=predict_diabetes,
123
  inputs=[
124
  Age, Total_cholesterol, HDL, LDL, VLDL, TRIGLYCERIDES,
125
  before_random_blood_sugar, before_HbA1c,
126
- alcohol_consumption, family_history_diabetes, Gender,
127
- dietary_habits, smoking_status, family_history_cardiovascular_disease
 
128
  ],
129
  outputs=output
130
  )
 
2
  import numpy as np
3
  import joblib
4
 
5
+ # Load models, scaler, and label encoder
6
  model_binary = joblib.load("model_binary_cv.pkl")
7
  model_multiclass = joblib.load("model_multiclass_cv.pkl")
 
 
 
8
  scaler = joblib.load("scaler.pkl")
9
+ label_enc = joblib.load("label_encoder_multiclass.pkl")
10
 
11
  def predict_diabetes(
12
  Age,
 
24
  smoking_status,
25
  family_history_cardiovascular_disease
26
  ):
27
+ # Convert binary inputs to int
28
  alcohol_consumption = int(alcohol_consumption)
29
  family_history_diabetes = int(family_history_diabetes)
30
 
31
+ # One-hot encode categorical variables
32
  Gender_FEMALE = 1 if Gender == "Female" else 0
33
  Gender_MALE = 1 if Gender == "Male" else 0
34
 
35
  dietary_non_vegetarian = 1 if dietary_habits == "Non-vegetarian" else 0
36
+ dietary_non_vegetarian_dup = dietary_non_vegetarian # duplicate column in training data
37
  dietary_vegetarian = 1 if dietary_habits == "Vegetarian" else 0
38
 
39
  smoking_no = 1 if smoking_status == "No" else 0
 
42
  family_history_cvd_no = 1 if family_history_cardiovascular_disease == "No" else 0
43
  family_history_cvd_yes = 1 if family_history_cardiovascular_disease == "Yes" else 0
44
 
45
+ # Prepare input array (excluding 'binary_status' and matching training order)
 
 
 
46
  input_data = np.array([[
47
+ 0, # dummy Patient ID
48
  Age,
49
  Total_cholesterol,
50
  HDL,
 
66
  family_history_cvd_yes
67
  ]])
68
 
69
+ # Scale
70
  input_scaled = scaler.transform(input_data)
71
 
72
+ # Step 1: Binary classification
73
+ binary_pred = model_binary.predict(input_scaled)[0]
74
+ if binary_pred == 0:
75
  return "✅ Prediction: No Diabetes Risk (Normal)"
76
 
77
+ # Step 2: Multiclass prediction
78
+ multiclass_pred = model_multiclass.predict(input_scaled)[0]
79
+ status_label = label_enc.inverse_transform([multiclass_pred])[0]
80
 
81
+ return f"⚠️ At Risk: {status_label.capitalize()}"
82
 
83
+ # Gradio interface
84
  with gr.Blocks() as demo:
85
  gr.Markdown("# 🩺 Diabetes Risk and Type Predictor")
86
  gr.Markdown(
87
  """
88
  Developed by Dr. Vinod Kumar Yata's research group
89
+ School of Allied and Healthcare Sciences, Malla Reddy University, Hyderabad, India
90
+ ⚠️ **Note:** This tool predicts both diabetes **risk** and **type** (diabetes vs prediabetes).
91
+ This is a research prototype. Do not use it for medical diagnosis.
 
92
  """
93
  )
94
 
 
111
  smoking_status = gr.Radio(label="Smoking status", choices=["No", "Yes"], value="No")
112
  family_history_cardiovascular_disease = gr.Radio(label="Family history of cardiovascular disease", choices=["No", "Yes"], value="No")
113
 
 
114
  output = gr.Textbox(label="Prediction")
115
+ submit_btn = gr.Button("Submit")
116
 
117
  submit_btn.click(
118
  fn=predict_diabetes,
119
  inputs=[
120
  Age, Total_cholesterol, HDL, LDL, VLDL, TRIGLYCERIDES,
121
  before_random_blood_sugar, before_HbA1c,
122
+ alcohol_consumption, family_history_diabetes,
123
+ Gender, dietary_habits, smoking_status,
124
+ family_history_cardiovascular_disease
125
  ],
126
  outputs=output
127
  )