Streamlit — это фреймворк для языка программирования Python с открытым исходным кодом, который позволяет создавать интерактивные панели и приложения на базе машинного обучения и делиться ими.
С помощью Streamlit можно быстро превратить модель машинного обучения или обычную программу в одностраничное веб-приложение и управлять им. Фреймворк преобразует результат работы модели в вид, понятный человеку и подходящий для загрузки на сайт.
Некоторые возможности Streamlit:
Быстрое развёртывание. Несколько десятков строк кода — и веб-приложение готово, отрисовано и работает.
Интерактивные скрипты. Каждый раз, когда пользователь взаимодействует с веб-интерфейсом или разработчик меняет что-то в коде, Streamlit сам обновляет и перерисовывает нужные части страницы.
Виджеты и визуализация. В Streamlit есть встроенные стандартные виджеты для частых действий, например ползунки или поля для ввода текста. Ещё можно отрисовать график или картинку, вывести результат работы программы в виде схемы или таблицы.
import streamlit as st
import pandas as pd
import pickle
from sklearn.metrics.pairwise import cosine_similarity
# Создание интерфейса Streamlit
st.title("Рекомендация отелей")
# Инструкция
st.markdown("""
### Инструкция:
1. Введите текст в поле ниже.
2. Нажмите кнопку "Предсказать".
3. Результат предсказания для всех отелей появится сразу ниже.
4. Вы можете очистить ввод и попробовать снова.
""")
# Ввод текста
user_input = st.text_area("Введите запрос:", "")
# Кнопка предсказания
if st.button("Предсказать"):
if user_input:
prediction = model(user_input)
st.write("Рекомендуемые отели:")
for i, hotel in enumerate(prediction):
st.write(f"{i+1}: {hotel}")
import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder
from collections import Counter
import phik
from phik.report import plot_correlation_matrix
from sklearn.model_selection import train_test_split
from sklearn.metrics import f1_score
import matplotlib.pyplot as plt
# варианты моделей
from catboost import CatBoostClassifier
from xgboost import XGBRFClassifier
from sklearn.ensemble import RandomForestClassifier
from lightgbm import LGBMClassifier
from lightautoml import automl
from lightautoml.automl.presets.tabular_presets import TabularAutoML
from lightautoml.tasks import Task
# pyboost
# для ансамблирования
from sklearn.ensemble import VotingClassifier
# заморозка сидов
import torch
import random
def set_seed(seed):
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
if torch.cuda.is_available():
torch.cuda.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
set_seed(1001)
df = pd.read_csv('train_1.csv', index_col = 0)
df
df.sort_index(inplace=True)
df
pred_df = pd.read_csv('test_1.csv', index_col = 0)
pred_df
pred_df.sort_index(inplace=True)
pred_df
set(df.columns) - set(pred_df.columns)
print(df.info())
df
df.isna().sum().sum()
pred_df.isna().sum().sum()
# сравнить показатели датафреймов
Counter(df.machine_type), Counter(pred_df.machine_type)
Counter(df['failure_flag'])
le = LabelEncoder()
df['machine_type'] = le.fit_transform(df['machine_type'])
df
pred_df['machine_type'] = le.fit_transform(pred_df['machine_type'])
phik_matrix = df.phik_matrix()
plot_correlation_matrix(phik_matrix.values,
x_labels = phik_matrix.columns,
y_labels = phik_matrix.index,
title = 'phik correlation matrix',
fontsize_factor=0.8, figsize=(11, 6)
)
# удалить колонки с слишком высокой корреляцией
phik_matrix = pred_df.phik_matrix()
plot_correlation_matrix(phik_matrix.values,
x_labels = phik_matrix.columns,
y_labels = phik_matrix.index,
title = 'phik correlation matrix',
fontsize_factor=0.8, figsize=(11, 6)
)
# сравнить корредяции в датафреймах
X = df.drop(columns = ['failure_flag'])
X
y = df.failure_flag
y
# подобрать метод валидации
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.33, random_state=42, stratify=y)
model1 = CatBoostClassifier(iterations=200, depth=6, learning_rate=0.1, verbose=0)
model2 = CatBoostClassifier(iterations=300, depth=8, learning_rate=0.05, verbose=0)
model1.fit(X_train, y_train)
feature_importance = model1.feature_importances_
sorted_idx = np.argsort(feature_importance)
fig = plt.figure(figsize=(15, 10))
plt.barh(range(len(sorted_idx)), feature_importance[sorted_idx], align='center')
plt.yticks(range(len(sorted_idx)), np.array(X_test.columns)[sorted_idx])
plt.title('Feature Importance')
# Создание ансамбля с голосованием
model = VotingClassifier(
estimators=[
('cat1', model1),
('cat2', model2)
],
verbose=True,
# n_jobs = -1,
voting='hard' # Можно использовать 'hard' или 'soft'
)
model.fit(X_train, y_train)
f1_score(y_test, model.predict(X_test), average='macro')
pred = model.predict(pred_df)
pred
pred_df['failure_flag'] = pred
pred_df.to_csv('sub.csv', index=False)