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)
ссылка на оригинал статьи https://habr.com/ru/articles/886344/
Добавить комментарий