File size: 2,904 Bytes
de2bb03
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import streamlit as st
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
import pickle
import joblib

# Загрузка сохраненной модели и других необходимых объектов
@st.cache_resource
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]]}')