ranimeree commited on
Commit
c4ca33e
·
verified ·
1 Parent(s): 5735f05

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +64 -81
app.py CHANGED
@@ -1,95 +1,78 @@
1
  import gradio as gr
 
2
  import pandas as pd
 
3
  import numpy as np
4
- import mlflow
5
- from sklearn.preprocessing import StandardScaler
6
- import sklearn
7
-
8
- print(f"Prediction environment scikit-learn version: {sklearn.__version__}")
9
-
10
- # Load model from MLflow artifacts
11
- model_path = "model.pkl"
12
- loaded_model = mlflow.sklearn.load_model(model_path)
13
-
14
- def preprocess_input(data_dict):
15
- """Preprocess input data to match the training format"""
16
- df = pd.DataFrame([data_dict])
17
-
18
- # Numeric features
19
- numeric_features = ['age', 'avg_glucose_level', 'bmi']
20
-
21
- # Scale numeric features
22
- scaler = StandardScaler()
23
- df[numeric_features] = scaler.fit_transform(df[numeric_features])
24
-
25
- # Create dummy variables for categorical features
26
- df = pd.get_dummies(df, columns=['gender', 'hypertension', 'heart_disease',
27
- 'ever_married', 'work_type', 'Residence_type',
28
- 'smoking_status'])
29
-
30
- # Ensure all expected columns are present
31
- expected_columns = [
32
- 'num__age', 'num__avg_glucose_level', 'num__bmi',
33
- 'cat__gender_Male', 'cat__gender_Other', 'cat__hypertension_1',
34
- 'cat__heart_disease_1', 'cat__ever_married_Yes',
35
- 'cat__work_type_Never_worked', 'cat__work_type_Private',
36
- 'cat__work_type_Self-employed', 'cat__work_type_children',
37
- 'cat__Residence_type_Urban', 'cat__smoking_status_formerly smoked',
38
- 'cat__smoking_status_never smoked', 'cat__smoking_status_smokes'
39
- ]
40
-
41
- for col in expected_columns:
42
- if col not in df.columns:
43
- df[col] = 0
44
-
45
- return df[expected_columns]
46
-
47
- def predict(gender, age, hypertension, ever_married, work_type, heart_disease,
48
- avg_glucose_level, bmi, smoking_status, Residence_type):
49
- """Make prediction using the loaded model"""
50
- # Create input dictionary
51
- input_data = {
52
- 'gender': gender,
53
- 'age': age,
54
- 'hypertension': 1 if hypertension == 'Yes' else 0,
55
- 'heart_disease': 1 if heart_disease == 'Yes' else 0,
56
- 'ever_married': ever_married,
57
- 'work_type': work_type,
58
- 'Residence_type': Residence_type,
59
- 'avg_glucose_level': avg_glucose_level,
60
- 'bmi': bmi,
61
- 'smoking_status': smoking_status
62
- }
63
-
64
- # Preprocess the input
65
- processed_input = preprocess_input(input_data)
66
-
67
- # Use the loaded model
68
- try:
69
- prediction = loaded_model.predict_proba(processed_input)[0][1]
70
- return f"The probability of stroke is {prediction:.2%}"
71
- except Exception as e:
72
- return f"Error making prediction: {str(e)}"
73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  # Create the Gradio interface
75
  iface = gr.Interface(
76
  fn=predict,
77
  inputs=[
78
- gr.Radio(choices=['Female', 'Male'], label="Gender"),
79
- gr.Slider(minimum=0, maximum=100, label="Age"),
80
- gr.Radio(choices=['Yes', 'No'], label="Hypertension"),
81
- gr.Radio(choices=['Yes', 'No'], label="Ever Married"),
82
- gr.Radio(choices=['Private', 'Self-employed', 'Govt_job', 'children', 'Never_worked'], label="Work Type"),
83
- gr.Radio(choices=['Yes', 'No'], label="Heart Disease"),
84
- gr.Number(label="Average Glucose Level"),
85
- gr.Slider(minimum=10, maximum=50, label="BMI"),
86
- gr.Radio(choices=['formerly smoked', 'never smoked', 'smokes', 'Unknown'], label="Smoking Status"),
87
- gr.Radio(choices=['Urban', 'Rural'], label="Residence Type")
88
  ],
89
  outputs='text',
90
  title='Stroke Probability Predictor',
91
  description='Predicts the probability of having a stroke based on input features.'
92
  )
93
 
94
- if __name__ == "__main__":
95
- iface.launch()
 
1
  import gradio as gr
2
+
3
  import pandas as pd
4
+
5
  import numpy as np
6
+ import pickle
7
+
8
+ def decode_file(file_path):
9
+ with open(file_path, 'rb') as file:
10
+ obj = pickle.load(file)
11
+ return obj
12
+
13
+ model = decode_file('/content/Project/metadata/mlflow/mlartifacts/adcdef59e0cb43ea9ecddb7fc1e29f86/artifacts/train/model/artifacts/sk_model/model.pkl')
14
+
15
+
16
+ def predict(gender, age, hypertension, ever_married, work_type, heart_disease, avg_glucose_level, bmi, smoking_status, Residence_type):
17
+ # Mapping for categorical variables
18
+ gender_mapping = {'Male': 1, 'Female': 0}
19
+ hypertension_mapping = {'Yes': 1, 'No': 0}
20
+ ever_married_mapping = {'Yes': 1, 'No': 0}
21
+ work_type_mapping = {'Private': 2, 'Self-employed': 4, 'Govt_job': 3, 'children': 1, 'Never_worked': 0}
22
+ heart_disease_mapping = {'Yes': 1, 'No': 0}
23
+ smoking_status_mapping = {'formerly smoked': 3, 'smokes': 1, 'never smoked': 2, 'Unknown': 0}
24
+ Residence_type_mapping = {'Urban': 1, 'Rural': 0}
25
+
26
+ # Map categorical variables to their corresponding numerical values
27
+ gender = gender_mapping[gender]
28
+ hypertension = hypertension_mapping[hypertension]
29
+ ever_married = ever_married_mapping[ever_married]
30
+ work_type = work_type_mapping[work_type]
31
+ heart_disease = heart_disease_mapping[heart_disease]
32
+ smoking_status = smoking_status_mapping[smoking_status]
33
+ Residence_type = Residence_type_mapping[Residence_type]
34
+
35
+ inputs = [gender, age, hypertension, ever_married, work_type, heart_disease, avg_glucose_level, bmi, smoking_status, Residence_type]
36
+ input_labels = ['gender', 'age', 'hypertension', 'ever_married', 'work_type', 'heart_disease', 'avg_glucose_level', 'bmi', 'smoking_status', 'Residence_type']
37
+
38
+ # Convert the input into a pandas DataFrame
39
+ input_df = pd.DataFrame([inputs], columns=input_labels)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
 
41
+ # Predict the stroke probability
42
+ prediction = model.predict_proba(input_df)[0][1]
43
+
44
+ # Return the prediction
45
+ result = "The probability of stroke is {:.2f}%".format(prediction * 100) # to give a percentage
46
+ return result
47
+
48
+
49
+
50
+
51
+
52
+
53
+ input_labels = [
54
+ 'gender', 'age', 'hypertension', 'ever_married', 'work_type',
55
+ 'heart_disease', 'avg_glucose_level', 'bmi', 'smoking_status', 'Residence_type'
56
+ ]
57
  # Create the Gradio interface
58
  iface = gr.Interface(
59
  fn=predict,
60
  inputs=[
61
+ gr.components.Radio(choices=['Female', 'Male'], label="Gender"),
62
+ gr.components.Slider(label="Age"),
63
+ gr.components.Radio(choices=['Yes', 'No'], label="Hypertension"),
64
+ gr.components.Radio(choices=['Yes', 'No'], label="Ever Married"),
65
+ gr.components.Radio(choices=['Private', 'Self-employed', 'Govt_job', 'children', 'Never_worked'], label="Work Type"),
66
+ gr.components.Radio(choices=['Yes', 'No'], label="Heart Disease"),
67
+ gr.components.Number(label="Average Glucose Level"),
68
+ gr.components.Slider(label="BMI"),
69
+ gr.components.Radio(choices=['formerly smoked', 'never smoked', 'smokes', 'Unknown'], label="Smoking Status"),
70
+ gr.components.Radio(choices=['Urban', 'Rural'], label="Residence Type")
71
  ],
72
  outputs='text',
73
  title='Stroke Probability Predictor',
74
  description='Predicts the probability of having a stroke based on input features.'
75
  )
76
 
77
+
78
+ iface.launch()