Внедрение вашей первой модели машинного обучения
Изучение основ моделирования с использованием машинного обучения
Введение
В этом учебнике мы узнаем, как создать простую модель мультиклассификации, используя набор данных Классификация стекла. Нашей целью является разработка и развертывание веб-приложения, которое может предсказывать различные типы стекла, такие как:
- Возникновение Искусственного Интеллекта-Управляемого Текстового Обмена в Бизнесе
- Эта искусственная интеллект статья представляет RMT Фьюжн RetNet и Transformer, Завоевывая новую эру эффективности и точности в компьютерном зрении
- Эта статья об искусственном интеллекте от Microsoft представляет новый подход к обучению языковых моделей имитирование чтения человеком для повышения эффективности в биомедицине, финансах и праве.
- Стекла с обработкой плавления для строительных окон
- Стекла без обработки для строительных окон
- Стекла с обработкой плавления для автомобильных окон
- Стекла без обработки для автомобильных окон (отсутствует в наборе данных)
- Контейнеры
- Посуда
- Фары
Кроме того, мы узнаем:
- 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) – это сертифицированный специалист-данный ученый, который любит создавать модели машинного обучения. В настоящее время он уделяет внимание созданию контента и написанию технических блогов о технологиях машинного обучения и науки о данных. Абид имеет степень магистра по технологическому менеджменту и степень бакалавра по телекоммуникационной инженерии. Его цель – создать продукт искусственного интеллекта, используя графовые нейронные сети, для студентов, страдающих от психических расстройств.