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

Введение

Давайте рассмотрим следующий сценарий: вы внедрили выдающуюся модель машинного обучения, которая предсказывает, страдает ли пациент палюдизмом или нет. Затем больницы в вашем городе захотят интегрировать вашу модель в свои системы для общего пользования. Но эти системы были разработаны на совершенно разных языках программирования. Означает ли это, что они больше не смогут использовать вашу модель? Ответ — «Нет», потому что с помощью служб RESTful ваша модель может быть доступна разработчикам приложений, независимо от того, какой язык программирования они используют.

Эта статья состоит из двух разделов:

  • Создайте модель машинного обучения, которая предсказывает, есть ли у данного пациента диабет или нет.
  • Пошаговое руководство по включению REST в вашу модель машинного обучения с помощью Django REST API.

Раздел 1: Построение модели

Цель состоит не в том, чтобы иметь причудливую модель, а в том, чтобы быстро получить модель и сериализовать ее, чтобы создать окончательный REST API.

На следующем изображении показано, как структурирован проект построения модели.

Предпосылки

Цель этого раздела — установить все библиотеки, необходимые для правильной реализации модели классификации.

1- Создайте и активируйте виртуальную среду

python3 -m venv mlAPIEnv   # Create the environment
source mlAPIEnv/bin/activate  # Activate the environment

2- Установите pandas для чтения данных.

pip install pandas

3. Установите sklearn, чтобы импортировать модели машинного обучения.

pip install -U scikit-learn

4- Установите joblib, чтобы сериализовать окончательную модель.

pip install joblib

Содержимое каждого файла

После запуска следующей команды вы получите изображение ниже, показывающее: первые 7 строк, последние 7 строк и производительность модели из отчета о классификации.

cd src # move to the scr folder
python3 run_training.py # Run the model training

Теперь вы должны найти новый файл diabete_detector_model.pkl в папке model.

Ваша модель машинного обучения готова. Теперь пришло время включить REST с помощью Django REST API.

Часть 2: Реализация API

Предпосылки

Цель этого раздела — установить все библиотеки, необходимые для правильной реализации REST API.

1- Установите Джанго

pip install django

2- Установите фреймворк Django REST

pip install djangorestframework

Проект Django и REST API

Все библиотеки установлены. Следующим шагом будет создание проекта Django и Django rest API.

1- Создайте свой проект Django из корневой папки проекта.

django-admin startproject diabete_deployment

Выполнение предыдущей инструкции создаст новую папку с именем diabete_deployment. Перейдите в эту папку и создайте свой API.

2- Создайте свою папку API

cd diabete_deployment # Move into the folder
django-admin startapp diabete_api # Create your API folder

На изображении ниже мы можем наблюдать предыдущие дополнительные папки с соответствующими им файлами.

Для создания нашего API важны файлы settings.py, diabete_api/views.py,иdiabete_deployment/urls.py. Позднее нам нужно будет создать дополнительные файлы и папки.

  • settings.py: используется для регистрации всех новых приложений/API, являющихся частью проекта. Эта новая информация регистрируется в переменной INSTALLED_APPS, как показано ниже (diabete_api и rest_framework).

Каждый раз, когда файл настроек обновляется, важно выполнять миграции, чтобы изменения распространялись на схему вашей базы данных. Убедитесь, что вы запускаете команду в папке diabete_deployment, где находится manage.py.

а- Запустите миграцию

python manage.py makemigrations

б- Перенести изменения

python manage.py migrate

Вот результат после запуска команды migrate

c- Запустите сервер, чтобы проверить, все ли работает правильно.

python manage.py runserver

Предыдущая команда генерирует следующую информацию для доступа к URL-адресу, ведущему к интерфейсу Django, что означает, что пока все работает правильно.

Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
November 29, 2021 - 03:47:18
Django version 3.2.9, using settings 'diabete_deployment.settings'
Starting development server at http://127.0.0.1:8000/

  • diabete_api/views.py: используется для реализации всех функций, которые будут запускаться при вызове определенного маршрута. В нашем случае реализация будет на функции предсказания. Нашей функции нужно будет загрузить модель, чтобы делать прогнозы. Для этого нам нужно создать новую папку static/model в основной папке diabete_deployment, которая будет содержать сериализованная модель .pkl.
  • Создайте новый файл diabete_api/urls.pyсо следующим содержимым
  • diabete_deployment/urls.py: используется для связывания всех URL-адресов с соответствующими функциями, реализованными в файле views.py.

Теперь, когда все важные файлы были обновлены и созданы новые, мы, наконец, готовы перезапустить URL-адрес и убедиться, что все работает нормально!

а- Запустить сервер

python manage.py runserver

Мы можем получить доступ к URL-адресу, сгенерированному предыдущей командной строкой.

System check identified no issues (0 silenced).
November 29, 2021 - 16:23:24
Django version 3.2.9, using settings 'diabete_deployment.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

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

На этой странице отображается сообщение HTTP 200 OK, означающее, что запрос страницы выполнен успешно.

На этой странице мы наконец можем вызвать функцию прогнозирования, добавив /predict к URL-адресу.

На предыдущей странице мы можем эмулировать прогноз, вставив следующие данные JSON в раздел содержимого.

На предыдущем изображении мы наблюдаем общее взаимодействие, от запроса до прогноза.

Протестируйте свой потрясающий API с помощью CURL

Вот синтаксис почтового запроса, который мы делаем

curl -d "param1=val1&param2=val2...paramN=valN" [URL]/funct_to_call
  • param1: первый параметр и val1 — соответствующее значение.
  • param2: второй параметр и val2 — соответствующее значение.
  • и т. д.
  • URL: используемый URL-адрес, в нашем случае это http://127.0.0.1:8000.
  • funct_to_call: функция для вызова запроса, в нашем случае это /predict

Суммируя все получаем следующий запрос:

curl -d  'pregnancies=6&glucose=148&bloodpressure=72&skinthickness=35&insulin=0&bmi=33.6&diabetespedigreefunction=0.627&age=50' http://127.0.0.1:8000/predict

Вот результат запроса:

{"info":"success","patient_status":1,"model_confidence_proba":63.36}

Конец статьи

Из этой статьи вы узнали, как построить модель машинного обучения и создать REST API с помощью Django. Теперь вы можете сделать свой API доступным больницам вашего города и спасать жизни 😃.

Дополнительные ресурсы

REST-фреймворк Джанго

Тестирование REST API с помощью Postman и curl

Пока пока 🏃🏾