Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import numpy as np | |
from sklearn.preprocessing import StandardScaler | |
import pickle | |
import joblib | |
# Загрузка сохраненной модели и других необходимых объектов | |
def load_model(): | |
model = joblib.load('model.joblib') | |
scaler = joblib.load('scaler.joblib') | |
feature_list = joblib.load('features.joblib') | |
return model, scaler, feature_list | |
model, scaler, feature_list = load_model() | |
st.title('Классификатор пациентов') | |
# Создание формы ввода для всех необходимых признаков | |
def get_user_input(): | |
input_data = {} | |
# Числовые признаки | |
st.subheader('Числовые параметры') | |
for feature in feature_list: | |
if feature not in categorical_features: # список категориальных признаков нужно определить | |
input_data[feature] = st.number_input(f'{feature}', value=0.0) | |
# Категориальные признаки | |
st.subheader('Категориальные параметры') | |
for feature in feature_list: | |
if feature in categorical_features: # список категориальных признаков | |
options = categorical_options[feature] # словарь с возможными значениями для каждого признака | |
input_data[feature] = st.selectbox(f'{feature}', options) | |
return input_data | |
# Получение данных от пользователя | |
user_input = get_user_input() | |
# Кнопка для выполнения предсказания | |
if st.button('Выполнить классификацию'): | |
# Преобразование входных данных | |
input_df = pd.DataFrame([user_input]) | |
# One-hot encoding для категориальных признаков | |
input_df_encoded = pd.get_dummies(input_df, columns=categorical_features) | |
# Убедитесь, что все необходимые столбцы присутствуют | |
for col in feature_list: | |
if col not in input_df_encoded.columns: | |
input_df_encoded[col] = 0 | |
# Масштабирование числовых признаков | |
numeric_cols = [col for col in input_df_encoded.columns if col not in categorical_features] | |
input_df_encoded[numeric_cols] = scaler.transform(input_df_encoded[numeric_cols]) | |
# Получение предсказания | |
prediction = model.predict(input_df_encoded[feature_list]) | |
# Отображение результата | |
group_names = {0: 'контр', 1: 'топирамат', 2: 'леветирацетам'} | |
st.success(f'Предсказанная группа: {group_names[prediction[0]]}') |