Введение

Алгоритмы машинного обучения теперь используются для анализа данных и решений на основе ИИ. Каждый заядлый читатель новостей технологий знает, какое внимание в последнее время уделяется этим темам.

С появлением машинного обучения (ML) были созданы передовые приложения для анализа данных, выявления закономерностей и прогнозирования будущих событий на основе исторических данных. Вместо того, чтобы полагаться на человеческий или ручной анализ, предприятия используют алгоритмы машинного обучения для автоматизированного анализа.

Алгоритм машинного обучения полностью реализовал свой потенциал при внедрении в производство. Получаются аналитические данные и проводятся тесты данных, поступающих в алгоритм. Существует множество инструментов для развертывания приложений машинного обучения в соответствии с вашими конкретными потребностями и требованиями. Некоторые из этих инструментов включают Streamlit, Gradio, Flask и FastAPI.

В этом контексте вам предлагается быстрое и простое решение. Однако рекомендуется внимательно прочитать этот блог и понять пошаговый процесс развертывания приложения машинного обучения с помощью Streamlit.

Начало работы со Стримлитом

Streamlit — это платформа приложений с открытым исходным кодом, которую используют инженеры по машинному обучению и другие члены группы специалистов по обработке и анализу данных. Это также удобный для начинающих метод развертывания алгоритмов машинного обучения. С помощью Streamlit можно легко превратить коды машинного обучения в общедоступные веб-приложения за считанные минуты, сняв при этом стресс, связанный с работой над интерфейсом приложения.

Команда Streamlit предоставила бесплатный и простой в использовании режим развертывания, чтобы вы не беспокоились о развертывании в облаке. Streamlit Cloud упрощает развертывание, управление и совместное использование вашего приложения ML со всеми.

При развертывании веб-приложения с помощью Streamlit команда Streamlit предоставляет виджеты, чтобы уменьшить нагрузку, связанную с написанием лишнего кода. В этом разделе объясняются некоторые из виджетов Streamlit вместе с их синтаксисом ниже:

  • st.form(): форма Streamlit используется с кнопкой form_submit_button, чтобы упростить пользователям ввод нескольких частей информации без необходимости перезагрузки после каждого ввода. Виджет Streamlit можно объявить с помощью оператора with.
with st.form(key = "form"):
    name = st.text_input( label="Name")
    tel = st.number_input(label="Telephone No.")

# submit button for the form
submit = st.form_submit_button(label="Submit Form")
if submit:
    st.write("Name:", name, "Phone Number:", tel) 
else:
    st.write("Kindly fill form")
"""
label = short explanation of what the inputted value is for 
NOTE: When using the form, it's important to add the else statement unless Python returns an UnBoundError.
"""
  • st.text_input(): виджет ввода текста получает текстовую информацию от пользователя.
name= st.text_input(label="Name:") st.write("My name is", name)
  • st.number_input(): Виджет ввода чисел получает целочисленные значения от конечного пользователя.
tel = st.number_input(label="Telephone Number:")
st.write("You can reach me on this number", tel)
  • st.slider(): этот виджет позволяет пользователям выбирать целочисленные значения, просто перемещая ползунок на число по своему выбору.
age = st.slider(label="Age",min_value= 0, max_value=100) 
st.write("I'm", age, "year old") 
""" 
where min_value = minimum value, 
max_value = maximum value 
"""
  • st.selectbox(): Виджет selectbox помогает конечному пользователю выбрать один из доступных вариантов.
gender = st.selectbox(label="Gender:", options=["Male", "Female"]) 
st.write("I'm a", gender, "patient")

Чтобы узнать больше о виджетах ввода Streamlit, вы можете использовать документацию Streamlit, чтобы получить больше информации о Streamlit.

Создание приложения для прогнозирования диабета.

Вот подробное объяснение процесса установки и развертывания. В этом разделе представлен пошаговый процесс создания приложения для прогнозирования диабета с использованием набора данных о диабете. Вы узнаете, как Streamlit создает и развертывает модель машинного обучения на локальном компьютере и в облаке Streamlit.

Предпосылки

Чтобы хорошо понять этот учебник, читатель должен иметь следующие знания:

  • Умение пользоваться языком программирования Python.
  • Очистка данных и споры.
  • Базовые знания о том, как создавать модели машинного обучения.
  • Понимание Git и GitHub.

Во время работы над этим проектом для выполнения учебного руководства можно использовать Anaconda или DataSpell от JetBrains. Вот краткое руководство по установке Anaconda.

Каталоги проектов

Для этого урока две папки, а именно; развертывание и папки моделей созданы. Папка развертывания содержит код Streamlit и файл рассола для сохранения обученной модели машинного обучения. Папка моделей содержит:

  • Папка набора данных, содержащая набор данных о диабете, сохраняется в папке моделей.
  • скрипт python для кода машинного обучения и
  • блокнот, содержащий тесты и споры, проведенные по данным о диабете.

Проект содержит другие файлы, такие как файл readme, в котором объясняется, что делает проект, и файл requirements.txt, в котором хранятся записи обо всех необходимых библиотеках, необходимых для бесперебойной работы кода Streamlit.

Монтаж

Для обеспечения эффективной работы развертывания требуются специальные библиотеки Python. Во-первых, библиотека Streamlit устанавливается с помощью pip, который устанавливается вместе с Anaconda. Код написан ниже;

pip install streamlit

Чтобы убедиться, что библиотека Streamlit была успешно установлена, вызовите streamlit hello, выходные данные которого отобразят домашнюю страницу Streamlit в браузере.

Он проверяет, что библиотека Streamlit была успешно установлена ​​и будет работать без сбоев, если не возникнет ошибка.

При работе с кодом машинного обучения важно установить используемый алгоритм. В случае этого руководства LGBMClassifier будет использоваться для выполнения задачи классификации диабета. Установите библиотеку с помощью pip, как и в предыдущем случае.

pip install lightgbm

Взгляд на ML Script

В этом руководстве мы быстро рассмотрим и объясним код машинного обучения. Мы должны организовать набор данных о диабете и можем добавлять новые функции по мере необходимости. Необходимая обработка данных должна быть выполнена, чтобы данные прошли через модель ML без каких-либо проблем. Полный код модели машинного обучения приведен ниже:

Импортируйте библиотеки, которые будут использоваться в наборе данных, включая:

  • панды для уборки и ссоры,
  • scikit-learn для нормализации данных, разделения данных и обучения модели.
  • Библиотека pickle используется для сохранения модели в файл pickle. В проекте используется библиотека pickle для импорта модели, которая будет использоваться при развертывании с помощью Streamlit.

С этого момента данные загружаются с помощью модуля pandas read_csv, а затем обрабатываются для замены неправильно записанных значений. Затем столбцы с объектными переменными обрабатываются с помощью класса OrdinalEncoding. Затем с помощью класса RobustScaler целые значения масштабируются для удаления выбросов, тем самым повышая производительность нашей модели.

Чтобы иметь возможность обучать нашу модель машинного обучения, мы разделили бы наши данные на данные обучения и данные тестирования. В этом уроке мы разделили наши данные, используя StratifiedShuffleSplit. Синтаксис для простого использования StratifiedShuffleSplit показан ниже:

splits = StratifiedShuffleSplit(n_splits= n_splits, random_state= random_state) 
for train_index, test_index in splits.split(X, y):
  X_train, X_test = X[train_index], X[test_index] 
  y_train, y_test = y[train_index], y[test_index] 
""" 
where n_splits = number of splits you would like, 
random_state = random number that is set to make results reproducible, 
X = data after preprocessing and dropping the target, 
y = target 
"""

После этого экземпляр LGBMClassifier сохраняется под именем по нашему выбору, в данном случае lgbm. Гиперпараметры LGBMClassifier также настроены для повышения точности. X_train и y_train после разделения используются для обучения модели. После обучения модели метрика производительности модели проверяется с помощью f1_score. f1_score получается после сравнения результата, полученного при прогнозировании значений X_test и y_test. На основе полученного f1_score после обучения нашей модели на наборе данных была получена точность примерно 96%.

Библиотека pickle сохраняет обученную модель. Сохраненная модель импортируется в код Streamlit для прогнозирования входных данных от конечных пользователей. Синтаксис сохранения модели с помощью pickle описан ниже:

import pickle 

var_name = open(file_name, "wb") 
pickle.dump(model_name, var_name) 
var_name.close() 
""" 
var_name = variable name of your choice. 
file_name = name pickle file is saved with e.g "lightgbm.pickle". 
model_name = name used for the model variable. 
"""

Скрипт приложения Streamlit.

Завершение кода машинного обучения — это первый шаг к достижению цели. Код машинного обучения предоставляет модель, которая будет использоваться при выполнении задачи классификации диабета. Получение информации от конечных пользователей в этом случае для медицинских работников является первоочередной задачей. Полученная информация используется для прогнозирования с использованием модели машинного обучения, обученной на существующих данных. Как упоминалось выше, Streamlit упростил написание общедоступного приложения с помощью Python без необходимости написания HTML или JavaScript.

Благодаря использованию Streamlit и знанию функций создается простой интерфейс, в котором конечные пользователи могут легко предоставить информацию о пациентах и ​​получить результат в течение 5 минут. Создайте файл Python и начните с импорта необходимых библиотек.

# importing important libraries
import streamlit as st
import joblib 
import numpy as np
import time

Библиотека streamlit и формы, которые повлечет за собой приложение, импортируются первыми. Затем импортируется joblib, который выполняет работу по дампу файла pickle, созданного в разделе ML Script. Использование numpy упрощает создание фрейма данных, содержащего информацию о пациентах, предоставленную конечными пользователями.

joblib содержит файл рассола, который был создан в разделе сценария ML и выгружается в имя переменной, которое будет использоваться при прогнозировании результатов для новых данных. Файл pickle сбрасывается с использованием следующего синтаксиса:

var_name = open(file_name, "wb") 
model = joblib.dump(var_name) 
""" 
file_name = name of pickle file as saved above. 
model = trained model from machine learning code. 
"""

Создание различных функций Python легко помогает получать информацию от конечных пользователей, а также предсказывать результаты. При работе над этим руководством очень важно получить некоторую информацию от конечных пользователей. Эти фрагменты информации являются функциями, которые будут использоваться при прогнозировании результата. Некоторые данные, необходимые для прогнозирования диабетического статуса пациентов, хранятся в имени переменной column_name ниже:

# column name for each feature in the diabetes dataset.
column_names = ['cholesterol', 'glucose', 'hdl_chol', 'chol_hdl_ratio',
'age', 'gender', 'weight', 'height', 'bmi', 'systolic_bp', 'diastolic_bp', 'waist', 'hip', 'waist_hip_ratio']

Чтобы получить эту информацию от конечных пользователей, используя виджеты ввода с потоковой подсветкой, о которых мы узнали, мы можем придумать средство получения данных от конечных пользователей. Это можно сделать эффективно, создав функцию для получения этих данных.

with st.form(key="diabetes_data"): 
  name = st.text_input("Patient's Name: ") 
  gender_obj = st.selectbox(label="Patient's Gender: ", options=["Male", "Female"]) 
  if gender_obj == "Male": 
    gender = 1 
  else: 
    gender = 0 
  age = st.slider(label="Patient's Age: ", min_value=0, max_value=100) 
  chol = st.slider(label="Patient's Cholesterol Level(mg/dL): ", min_value=40, max_value=400) 
  glucose = st.slider(label="Patient's Sugar Level(mg/dL): ", min_value=40, max_value=250) height_cm = st.number_input(label="Patient's Height(cm): ") 
  height = height_cm * 0.393701 
  weight_kg = st.number_input("Patient's Weight in(kg): ") 
  weight = weight_kg * 2.205 
  hdl_chol = st.slider(label="Patient's HDL Cholesterol(mg/dL): ", min_value=0, max_value=100) 
  waist = st.number_input("Patient's Waist Size(inches): ", step=1) 
  hip = st.number_input("Patient's Hip Size(inches): ", step=1) 
  systolic_bp = st.number_input(label="Patient's Systolic Blood Pressure(mmHg): ", step=1) 
  diastolic_bp = st.number_input(label="Patient's Diastolic Blood Pressure(mmHg): ", step=1) 
  submit = st.form_submit_button("Submit Test") 

  if submit: 
    bmi = weight_kg / ((height_cm / 100)**2) 
    chol_hdl_ratio = chol / hdl_chol 
    waist_hip_ratio = waist/hip 
    patient_data = [chol, glucose, hdl_chol, chol_hdl_ratio, age, gender, weight, height, bmi, systolic_bp, diastolic_bp, waist, hip, waist_hip_ratio] 
  else: patient_data = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
return patient_data

После проведения расчета, необходимого для некоторых признаков, эта функция сопоставляет все собранные данные в список, который затем используется при прогнозировании результата. Функция, которая сохраняет эти данные во фрейме данных, выполняет прогнозирование данных, предоставленных пользователем. Модуль numpy легко создает новый фрейм данных каждый раз, когда пользователь вводит новые данные.

# function to create a data frame and carry out prediction.
def predict(var_name):
    pred = [var_name]
    np_pred = np.array(pred)
    score = lgbm_model.predict(np_pred)
    return score

Обе функции, написанные выше, используются в новой функции — функции Streamlit. Функция Streamlit, которую мы будем писать, будет использоваться для запуска приложения Streamlit после завершения.

# function to run streamlit app
def run():
    st.title("Diabetes Test App")
    st.write("Diabetes is known as a very deadly disease if not diagnosed early. To make it easier for health practitioners to diagnose this disease early, previous data have been accumulated to predict an accurate result for new patients. The Doctor is to retrieve the necessary information from the patients to carry out this test. A diabetic patient should be notified early and should commence treatment immediately.")
    info = inputs()
    dia_score = predict(info)
    with st.spinner(text="Diagnosing....."):
        time.sleep(5)
    if dia_score == 0:
        st.error("Positive. Diabetes Diagnosed.")
    else:
        st.success("Negative. Diabetes not diagnosed.")

# running streamlit app.
if __name__ == "__main__":
    run()

Эта функция отображает имя создаваемого приложения Streamlit вместе с кратким объяснением его функциональности. Используется упомянутая функция ввода, а полученные данные передаются в функцию прогнозирования, которая делает прогноз о состоянии пациента. Пациент может быть проинформирован о результате с помощью функции в Streamlit, которая использует статус успеха или ошибки.

В следующем разделе мы подробно рассмотрим, как запустить полное приложение Streamlit на нашем локальном компьютере.

Запуск на локальной машине

Очень важно протестировать наше программное обеспечение Streamlit перед его развертыванием в облаке. Ошибки легко обнаруживаются в приложении во время тестирования, прежде чем оно будет окончательно выпущено в облаке. Без Интернета тестирование приложения на наших компьютерах теперь стало простым благодаря Streamlit.

Командная строка anaconda запускает и тестирует приложение, а каталог для папки проекта переключается после запуска командной строки Anaconda.

cd project_directory
""" 
where project_directory = directory for the project folder, 
in this case, directory = C:\Users\Testys\Documents\GitHub\Streamlit-Deployment 
"""

Поскольку наш потоковый код сохраняется в папке развертывания, его можно запустить из нашей командной строки с помощью streamlit run ./deployment/main.py.

Приложение Streamlit просматривается в интернет-браузере. Выходная диаграмма выглядит примерно так.

Приложение Streamlit выглядит в браузере так:

Развертывание в облаке Streamlit

Еще одна обязанность — широко распространять готовое потоковое приложение, и это можно сделать разными способами. Примеры этих методов включают Streamlit Cloud, HuggingFace и AWS Cloud. В этой статье будет использоваться Streamlit Cloud. Запуск готового приложения в Streamlit занимает всего пять минут. Ниже представлены процессы для правильного выполнения этой задачи:

Каталог проекта создается в облаке с помощью GitHub для простого доступа из Streamlit Cloud. Для этого у вас должна быть учетная запись GitHub. Более подробную информацию вы можете получить на этой странице

Учетная запись GitHub предназначена для создания репозитория, в который будет загружен файл. Имя репо может быть сохранено с любым именем на наше усмотрение.

Файлы проекта должны быть загружены на GitHub. При этом облако Streamlit подключается к скрипту приложения Streamlit.

Облако Streamlit в действии

Чтобы развернуть приложение Streamlit в Streamlit Cloud, необходимо зарегистрироваться в Streamlit Cloud. Страница регистрации находится на главной странице веб-сайта Streamlit. Страница регистрации Streamlit выглядит так:

Рекомендуется зарегистрироваться на GitHub, чтобы упростить подключение к репозиторию проекта. После создания учетной записи Streamlit Cloud следующая отображаемая страница — это страница приложения Streamlit, которое было успешно развернуто пользователем;

Чтобы развернуть новое приложение, мы можем просто нажать кнопку «Новое приложение», которая приведет нас на страницу, которая подключает наше приложение Streamlit на GitHub к Streamlit Cloud. На этой странице вы, как разработчик, можете управлять приложениями, к которым у вас есть доступ, то есть возможность удалять и редактировать URL-ссылку, а также получать доступ к аналитике сайта.

После нажатия кнопки нового приложения открывается страница, связанная с GitHub, где выбирается репозиторий для текущего проекта. После выбора репозитория он получает местоположение приложения Streamlit для развертывания.

В течение трех минут Streamlit Cloud развертывает приложение Streamlit. Пример того, как приложение Streamlit было построено во время этого руководства, показан ниже.

В заключение, конечной целью каждой модели является сбор данных от пользователей и создание прогнозов на основе прошлых закономерностей или событий. Веб-интерфейс для получения необходимых данных можно быстро создать с помощью Streamlit. Вы можете просто получить готовую веб-страницу для предыдущего урока здесь. Здесь также является ссылкой на структурированный репозиторий GitHub.

Чтобы узнать больше, хорошо практикуйтесь, делитесь и следите. После изучения руководства вы также можете предоставить ссылку на свое приложение Streamlit. Грасиас.

Первоначально опубликовано на https://writingtestys.hashnode.dev.