Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import numpy as np | |
import pickle | |
import json | |
# Загрузка сохраненной модели и других необходимых объектов | |
def load_model(): | |
with open('model.pkl', 'rb') as file: | |
model = pickle.load(file) | |
with open('scaler.pkl', 'rb') as file: | |
scaler = pickle.load(file) | |
with open('data.json', 'r', encoding='utf-8') as f: | |
data = json.load(f) | |
return model, scaler, data | |
model, scaler, data = load_model() | |
feature_list = data['features'] | |
categorical_features = data['categorical_features'] | |
numeric_features = data['numeric_features'] | |
categorical_options = data['categorical_options'] | |
group_names = data['group_names'] | |
st.title('Классификатор пациентов') | |
# Создание формы ввода для всех необходимых признаков | |
def get_user_input(): | |
input_data = {} | |
# Числовые признаки | |
st.subheader('Числовые параметры') | |
for feature in feature_list: | |
if feature in numeric_features: | |
input_data[feature] = st.number_input(f'{feature}', value=0.0) | |
# Категориальные признаки | |
st.subheader('Категориальные параметры') | |
for 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) | |
# Масштабирование числовых признаков | |
if numeric_features: | |
input_df_encoded[numeric_features] = scaler.transform(input_df_encoded[numeric_features]) | |
# Убедитесь, что все необходимые столбцы присутствуют | |
for col in feature_list: | |
if col not in input_df_encoded.columns: | |
input_df_encoded[col] = 0 | |
# Получение предсказания | |
X_pred = input_df_encoded[feature_list] | |
prediction = model.predict(X_pred) | |
probabilities = model.predict_proba(X_pred)[0] | |
# Отображение результата | |
st.success(f'Предсказанная группа: {group_names[str(prediction[0])]}') | |
# Вывод вероятностей | |
st.write('Вероятности для каждой группы:') | |
for i, prob in enumerate(probabilities): | |
st.write(f'{group_names[str(i)]}: {prob:.2f}') | |
# Добавим вывод введенных данных для проверки | |
st.write("\nВведенные данные:") | |
st.write(input_df) |