Внедрение вашей первой модели машинного обучения

Изучение основ моделирования с использованием машинного обучения

Введение

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

  1. Стекла с обработкой плавления для строительных окон
  2. Стекла без обработки для строительных окон
  3. Стекла с обработкой плавления для автомобильных окон
  4. Стекла без обработки для автомобильных окон (отсутствует в наборе данных)
  5. Контейнеры
  6. Посуда
  7. Фары

Кроме того, мы узнаем:

  • Skops: делитесь своими моделями, основанными на scikit-learn, и развертывайте их в продакшн.
  • Gradio: рамка для веб-приложений на основе машинного обучения.
  • HuggingFace Spaces: бесплатная платформа размещения моделей и приложений машинного обучения.

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

Обучение и сохранение модели

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

Набор данных

Мы загрузили набор данных и перемешали его для равномерного распределения меток.

import pandas as pdglass_df = pd.read_csv("glass.csv")glass_df = glass_df.sample(frac = 1)glass_df.head(3)

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

from sklearn.model_selection import train_test_splitX = glass_df.drop("Type",axis=1)y = glass_df.TypeX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=125)

Машинное обучение

Наша модельный конвейер прост. Сначала мы обрабатываем наши признаки с помощью импутера, затем нормализуем их с помощью стандартного шкалировщика. Наконец, мы передаем обработанные данные в классификатор случайного леса.

После обучения конвейера на обучающем наборе данных мы используем `.score ()` для определения точности на тестовом наборе данных.

Оценка является средней, и я доволен результатами. Хотя мы могли бы улучшить модель с помощью ансамблей или использования различных методов оптимизации, наша цель – другая.

from sklearn.ensemble import RandomForestClassifierfrom sklearn.preprocessing import StandardScalerfrom sklearn.impute import SimpleImputerfrom sklearn.pipeline import Pipelinepipe = Pipeline(    steps=[        ("imputer", SimpleImputer()),        ("scaler", StandardScaler()),        ("model", RandomForestClassifier(n_estimators=100, random_state=125)),    ])pipe.fit(X_train, y_train)pipe.score(X_test, y_test)>>> 0.7538461538461538

Отчет классификации также выглядит хорошо.

from sklearn.metrics import classification_reporty_pred = pipe.predict(X_test)print(classification_report(y_test,y_pred))

precision    recall  f1-score   support           1       0.65      0.73      0.69        15           2       0.82      0.79      0.81        29           3       0.40      0.50      0.44         4           5       1.00      0.80      0.89         5           6       1.00      0.67      0.80         3           7       0.78      0.78      0.78         9    accuracy                           0.75        65   macro avg       0.77      0.71      0.73        65weighted avg       0.77      0.75      0.76        65

Сохранение модели

Skops – отличная библиотека для развертывания моделей scikit-learn в продукты. Мы будем использовать ее для сохранения модели и ее последующей загрузки в производство.

import skops.io as siosio.dump(pipe, "glass_pipeline.skops")

Как видно, всего одной строкой кода мы можем загружать весь конвейер.

sio.load("glass_pipeline.skops", trusted=True)

Создание веб-приложения

В этой части мы узнаем, как использовать Gradio для создания простого пользовательского интерфейса классификации.

  • Загрузите модель, используя skops.
  • Создайте массив названий классов и оставьте первый пустым или “None” в качестве нашего числового классификатор.
  • Напишите классификационную функцию на языке Python, которая берет входные данные от пользователя и предсказывает класс с использованием конвейера.
  • Создайте входные данные для каждой функции с помощью ползунков. Пользователи могут использовать мышь для выбора числовых значений.
  • Создайте вывод с помощью метки (Label). Он будет отображать метку полужирным текстом сверху.
  • Добавьте заголовок и описание приложения.
  • Наконец, объедините все это с помощью `gradio.Interface`
import gradio as grimport skops.io as siopipe = sio.load("glass_pipeline.skops", trusted=True)classes = [    "None",    "Building Windows Float Processed",    "Building Windows Non Float Processed",    "Vehicle Windows Float Processed",    "Vehicle Windows Non Float Processed",    "Containers",    "Tableware",    "Headlamps",]def classifier(RI, Na, Mg, Al, Si, K, Ca, Ba, Fe):    pred_glass = pipe.predict([[RI, Na, Mg, Al, Si, K, Ca, Ba, Fe]])[0]    label = f"Предсказанная метка стекла: **{classes[pred_glass]}**"    return labelinputs = [    gr.Slider(1.51, 1.54, step=0.01, label="Показатель преломления"),    gr.Slider(10, 17, step=1, label="Натрий"),    gr.Slider(0, 4.5, step=0.5, label="Магний"),    gr.Slider(0.3, 3.5, step=0.1, label="Алюминий"),    gr.Slider(69.8, 75.4, step=0.1, label="Кремний"),    gr.Slider(0, 6.2, step=0.1, label="Калий"),    gr.Slider(5.4, 16.19, step=0.1, label="Кальций"),    gr.Slider(0, 3, step=0.1, label="Барий"),    gr.Slider(0, 0.5, step=0.1, label="Железо"),]outputs = [gr.Label(num_top_classes=7)]title = "Классификация стекла"description = "Введите данные для правильной идентификации типа стекла"gr.Interface(    fn=classifier,    inputs=inputs,    outputs=outputs,    title=title,    description=description,).launch()

Разворачивание модели машинного обучения

В последней части мы создадим пространства в Hugging Face и добавим нашу модель и файл приложения.

Чтобы создать пространства, вы должны войти на https://huggingface.co. Затем щелкните на изображение своего профиля в верхнем правом углу и выберите «+ New Space».

Введите название вашего приложения, выберите SDK и нажмите кнопку «Create Space».

Затем создайте файл `requirements.txt`. Вы можете добавить или создать файл, перейдя на вкладку «Files» и выбрав кнопку «+Add file».

В файле `requirements.txt` вам нужно добавить skops и scikit-learn.

После этого добавьте модель и файл, перетащив их из вашей локальной папки в пространство. После этого закоммитьте.

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

Изображение из Spaces

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

Изображение из Классификация стекла

Вывод

В этом руководстве мы пройдемся по всему процессу создания, обучения и развертывания модели машинного обучения в виде веб-приложения. Мы использовали набор данных для классификации стекла для обучения простой модели классификации с несколькими классами. После обучения модели в scikit-learn, мы использовали skops и Gradio для упаковки и развертывания модели в виде веб-приложения на платформе HuggingFace Spaces.

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

Спасибо за внимание! Дайте мне знать, если у вас есть еще вопросы, когда вы продолжаете свое путешествие в области машинного обучения. Abid Ali Awan (@1abidaliawan) – это сертифицированный специалист-данный ученый, который любит создавать модели машинного обучения. В настоящее время он уделяет внимание созданию контента и написанию технических блогов о технологиях машинного обучения и науки о данных. Абид имеет степень магистра по технологическому менеджменту и степень бакалавра по телекоммуникационной инженерии. Его цель – создать продукт искусственного интеллекта, используя графовые нейронные сети, для студентов, страдающих от психических расстройств.