import os import pandas as pd import numpy as np import pickle import streamlit as st import st_pages from utils.code_utils import show_code from urllib.error import URLError def prediction(scaler, classifier, sepal_length, sepal_width, petal_length, petal_width): X_infer = scaler.transform([[sepal_length, sepal_width, petal_length, petal_width]]) prediction = classifier.predict(X_infer) prob_pre = np.max(classifier.predict_proba(X_infer),axis=1) return prediction[0], f"{(prob_pre[0] * 100):.2f} %" # str({(prob_pre[0] * 100):.2f}) + "%" def load_models(): model_file = open('saved_models/rf_clf.pkl', 'rb') scaler_file = open('saved_models/scaler.pkl', 'rb') classifier = pickle.load(model_file) scaler = pickle.load(scaler_file) return scaler, classifier def update_slider(*pass_key): st.session_state[pass_key[0]] = float(st.session_state[pass_key[1]]) def update_numin(*pass_key): st.session_state[pass_key[1]] = str(st.session_state[pass_key[0]]) def ml_inference(): st.title("Model Inference") classifier, scaler = load_models() # here we define some of the front end elements of the web page like # the font and background color, the padding and the text to be displayed html_temp = """

Streamlit IRIS Classifier ML App

""" # this line allows us to display the front end aspects we have # defined in the above code # loading in the model to predict on the data st.markdown(html_temp, unsafe_allow_html = True) sepal_length_s = st.slider(label=f"**Sepal length**", key = 'sepal_length_s', on_change=update_numin, args=('sepal_length_s','sepal_length'), min_value=4.3, max_value=7.9, value=5.4, step=0.05) sepal_length = st.text_input(label="Sepal length i", label_visibility="hidden", key = 'sepal_length', value=5.4, placeholder="Type Sepal length here", on_change = update_slider, args=('sepal_length_s','sepal_length')) sepal_width_s = st.slider(label=f"**Sepal width**", key = 'sepal_width_s', on_change= update_numin, args=('sepal_width_s','sepal_width'), min_value=2.0, max_value=4.4, value=3.4, step=0.05) sepal_width = st.text_input(label="Sepal width i", label_visibility="hidden", key = 'sepal_width', value=3.4, placeholder="Type Sepal width here", on_change = update_slider, args=('sepal_width_s','sepal_width')) petal_length_s = st.slider(label=f"**Petal length**", key = 'petal_length_s', on_change= update_numin, args=('petal_length_s','petal_length'), min_value=1.0, max_value=6.9, value=3.4, step=0.1) petal_length = st.text_input(label="Petal length i", label_visibility="hidden", key = 'petal_length', value=3.4, placeholder="Type Petal length here", on_change = update_slider, args=('petal_length_s','petal_length')) petal_width_s = st.slider(label=f"**Petal width**", key = 'petal_width_s', on_change= update_numin, args=('petal_width_s','petal_width'), min_value=0.1, max_value=2.5, value=1.4, step=0.1) petal_width = st.text_input(label="Petal width i", label_visibility="hidden", key = 'petal_width', value=1.4, placeholder="Type Petal width here", on_change = update_slider, args=('petal_width_s','petal_width')) result ="" if st.button("Predict"): scaler, classifier = load_models() pre, prob = prediction(scaler, classifier, sepal_length, sepal_width, petal_length, petal_width) st.success(f'The output is {pre} with confidence is {prob}') ml_inference() show_code(ml_inference) # if __name__=='__main__': # aa = MLInference() # aa.ml_inference()