You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
2.4 KiB
49 lines
2.4 KiB
import streamlit as st
|
|
import sys
|
|
import os
|
|
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../../backend')))
|
|
from classification_strategy import perform_classification, make_prediction
|
|
|
|
st.header("Prediction: Classification")
|
|
|
|
if "data" in st.session_state:
|
|
data = st.session_state.data
|
|
|
|
with st.form("classification_form"):
|
|
st.subheader("Classification Parameters")
|
|
data_name = st.multiselect("Features", data.columns, key="classification_features")
|
|
target_name = st.selectbox("Target", data.columns, key="classification_target")
|
|
test_size = st.slider("Test Size", min_value=0.1, max_value=0.5, value=0.2, step=0.1, key="classification_test_size")
|
|
submitted = st.form_submit_button('Train and Predict')
|
|
|
|
if submitted and data_name and target_name:
|
|
try:
|
|
model, label_encoders, accuracy = perform_classification(data, data_name, target_name, test_size)
|
|
st.session_state.classification_model = model
|
|
st.session_state.classification_label_encoders = label_encoders
|
|
st.session_state.classification_accuracy = accuracy
|
|
st.session_state.classification_features_selected = data_name
|
|
st.session_state.classification_target_selected = target_name
|
|
except ValueError as e:
|
|
st.error(e)
|
|
|
|
if "classification_model" in st.session_state:
|
|
st.subheader("Model Accuracy")
|
|
st.write(f"Accuracy on test data: {st.session_state.classification_accuracy:.2f}")
|
|
|
|
st.subheader("Enter values for prediction")
|
|
input_values = []
|
|
for feature in st.session_state.classification_features_selected:
|
|
if feature in st.session_state.classification_label_encoders:
|
|
values = list(st.session_state.classification_label_encoders[feature].classes_)
|
|
value = st.selectbox(f"Value for {feature}", values, key=f"classification_input_{feature}")
|
|
else:
|
|
value = st.number_input(f"Value for {feature}", value=0.0, key=f"classification_input_{feature}")
|
|
input_values.append(value)
|
|
|
|
prediction = make_prediction(st.session_state.classification_model, st.session_state.classification_label_encoders, st.session_state.classification_features_selected, st.session_state.classification_target_selected, input_values)
|
|
|
|
st.write("Prediction:", prediction)
|
|
else:
|
|
st.error("File not loaded")
|