Diabetes_Predictor / ml_app.py
leofilo's picture
Upload 10 files
3294074 verified
import streamlit as st
import joblib
import os
import numpy as np
attrib_info = """
#### Attribute Information:
- Age 1.20-65
- Sex 1. Male, 2.Female
- Polyuria 1.Yes, 2.No.
- Polydipsia 1.Yes, 2.No.
- sudden weight loss 1.Yes, 2.No.
- weakness 1.Yes, 2.No.
- Polyphagia 1.Yes, 2.No.
- Genital thrush 1.Yes, 2.No.
- visual blurring 1.Yes, 2.No.
- Itching 1.Yes, 2.No.
- Irritability 1.Yes, 2.No.
- delayed healing 1.Yes, 2.No.
- partial paresis 1.Yes, 2.No.
- muscle sti ness 1.Yes, 2.No.
- Alopecia 1.Yes, 2.No.
- Obesity 1.Yes, 2.No.
- Class 1.Positive, 2.Negative.
"""
label_dict = {"No":0,"Yes":1}
gender_map={"Female":0, "Male":1}
target_label_map = {"Negative":0,"Positive":1}
def get_fvalue(val):
feature_dict={"No":0, "Yes":1}
for key, value in feature_dict.items():
if val==key:
return value
def get_value(val, my_dict):
for key, value in my_dict.items():
if val==key:
return value
@st.cache_data
def load_model(model_file):
loaded_model=joblib.load(open(os.path.join(model_file), "rb"))
return loaded_model
def run_ml_app():
st.subheader("From ML Prediction")
with st.expander("Attribute Info"):
st.markdown(attrib_info)
col1, col2= st.columns(2)
with col1:
age = st.number_input("Age",10,100)
gender = st.radio("Gender",("Female","Male"))
polyuria = st.radio("Polyuria",["No","Yes"])
polydipsia = st.radio("Polydipsia",["No","Yes"])
sudden_weight_loss = st.selectbox("Sudden_weight_loss",["No","Yes"])
weakness = st.radio("weakness",["No","Yes"])
polyphagia = st.radio("polyphagia",["No","Yes"])
genital_thrush = st.selectbox("Genital_thrush",["No","Yes"])
with col2:
visual_blurring = st.selectbox("Visual_blurring",["No","Yes"])
itching = st.radio("itching",["No","Yes"])
irritability = st.radio("irritability",["No","Yes"])
delayed_healing = st.radio("delayed_healing",["No","Yes"])
partial_paresis = st.selectbox("Partial_paresis",["No","Yes"])
muscle_stiffness = st.radio("muscle_stiffness",["No","Yes"])
alopecia = st.radio("alopecia",["No","Yes"])
obesity = st.select_slider("obesity",["No","Yes"])
with st.expander("Your Selected Options"):
result={"Age":age,
"gender":gender,
"polyuria":polyuria,
"polydipsia":polydipsia,
"sudden_weight_loss":sudden_weight_loss,
"weakness":weakness,
"polyphagia":polyphagia,
"genital_thrush":genital_thrush,
"visual_blurring":visual_blurring,
"itching":itching,
"irritability": irritability,
"delayed_healing":delayed_healing,
"partial_paresis":partial_paresis,
"muscle_stiffness":muscle_stiffness,
"alopecia":alopecia,
"obesity":obesity}
st.write("In JSON format:")
st.write(result)
encoded_result=[]
for i in result.values():
if type(i)==int:
encoded_result.append(i)
elif i in ["Female","Male"]:
res=get_value(i,gender_map)
encoded_result.append(res)
else:
encoded_result.append(get_fvalue(i))
st.write("In LIST format")
st.write(encoded_result)
with st.expander("Prediction Results"):
single_sample=np.array(encoded_result).reshape(1,-1)
st.write(single_sample)
model=load_model("models/logistic_regression_model_diabetes_21_oct_2020.pkl")
prediction=model.predict(single_sample)
pred_prob=model.predict_proba(single_sample)
st.write(prediction)
st.write(pred_prob)
if prediction==1:
st.warning("Positive Risk {}".format(prediction[0]))
pred_probability_score={"Negative DM Risk":round(pred_prob[0][0]*100,2), "Positive DM Risk":round(pred_prob[0][1]*100,2)}
st.write(pred_probability_score)
else:
st.success("Negative Risk {}".format(prediction[0]))
pred_probability_score={"Negative DM Risk":round(pred_prob[0][0]*100,2), "Positive DM Risk":round(pred_prob[0][1]*100,2)}
st.write(pred_probability_score)