stroke_predict / app.py
ranimeree's picture
Update app.py
c3cfea7 verified
raw
history blame
2.92 kB
import gradio as gr
import dill
import pandas as pd
import xgboost as xgb
import numpy as np
import pickle
def decode_file(file_path):
with open(file_path, 'rb') as file:
obj = pickle.load(file)
return obj
model = decode_file('model.pkl')
def predict(gender, age, hypertension, ever_married, work_type, heart_disease, avg_glucose_level, bmi, smoking_status, Residence_type):
gender_mapping = {'Male': 1, 'Female': 0}
hypertension_mapping = {'Yes': 1, 'No': 0}
ever_married_mapping = {'Yes': 1, 'No': 0}
work_type_mapping = {'Private': 2, 'Self-employed': 4, 'Govt_job': 3, 'children': 1, 'Never_worked': 0}
heart_disease_mapping = {'Yes': 1, 'No': 0}
smoking_status_mapping = {'formerly smoked': 3, 'smokes': 1, 'never smoked': 2, 'Unknown': 0}
Residence_type_mapping = {'Urban': 1, 'Rural': 0}
gender = gender_mapping[gender]
hypertension = hypertension_mapping[hypertension]
ever_married = ever_married_mapping[ever_married]
work_type = work_type_mapping[work_type]
heart_disease = heart_disease_mapping[heart_disease]
smoking_status = smoking_status_mapping[smoking_status]
Residence_type = Residence_type_mapping[Residence_type]
inputs = [gender, age, hypertension, ever_married, work_type, heart_disease, avg_glucose_level, bmi, smoking_status, Residence_type]
input_labels = ['gender', 'age', 'hypertension', 'ever_married', 'work_type', 'heart_disease', 'avg_glucose_level', 'bmi', 'smoking_status', 'Residence_type']
input_df = pd.DataFrame([inputs], columns=input_labels)
prediction = model.predict_proba(input_df)[0][1]
result = "The probability of stroke is {:.2f}%".format(prediction * 100) # to give a percentage
return result
input_labels = [
'gender', 'age', 'hypertension', 'ever_married', 'work_type',
'heart_disease', 'avg_glucose_level', 'bmi', 'smoking_status', 'Residence_type'
]
iface = gr.Interface(
fn=predict,
inputs=[
gr.components.Radio(choices=['Female', 'Male'], label="Gender"),
gr.components.Slider(label="Age"),
gr.components.Radio(choices=['Yes', 'No'], label="Hypertension"),
gr.components.Radio(choices=['Yes', 'No'], label="Ever Married"),
gr.components.Radio(choices=['Private', 'Self-employed', 'Govt_job', 'children', 'Never_worked'], label="Work Type"),
gr.components.Radio(choices=['Yes', 'No'], label="Heart Disease"),
gr.components.Number(label="Average Glucose Level"),
gr.components.Slider(label="BMI"),
gr.components.Radio(choices=['formerly smoked', 'never smoked', 'smokes', 'Unknown'], label="Smoking Status"),
gr.components.Radio(choices=['Urban', 'Rural'], label="Residence Type")
],
outputs='text',
title='Stroke Probability Predictor',
description='Predicts the probability of having a stroke based on input features.'
)
iface.launch()