Научитесь встраивать свою модель машинного обучения в веб-приложение

Все мы сталкивались с различными веб-приложениями, использующими машинное обучение. Например, Netflix и YouTube используют ML, чтобы персонализировать ваш опыт, рекомендуя вам новый контент на основе вашей истории просмотров. Это помогает им принимать более обоснованные решения и понимать поведение пользователей при просмотре веб-страниц.

Даже вы можете создать такое приложение, в которое вы вводите свои входные данные, и оно прогнозирует выходные данные для вас, используя вашу модель машинного обучения. Создаваемые вами модели машинного обучения можно использовать лучше, если вы можете интегрировать свои модели в приложение. Это подчеркивает не только ваши знания машинного обучения, но и ваши навыки разработки приложений.

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

  1. Создайте свою модель машинного обучения
  2. Разработайте свое веб-приложение с помощью Flask и интегрируйте свою модель в приложение
  3. Разверните свое веб-приложение на Heroku Cloud Platform

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

1. Создайте свою модель машинного обучения.

Мы используем линейную регрессию для прогнозирования выбросов CO2 от транспортных средств. В наборе данных много столбцов, но мы используем только некоторые из них в качестве функций. Последний столбец представляет собой метку класса. В нашем наборе данных 1067 строк и 4 столбца.

Мы используем встроенный класс LinearRegression () из sklearn для построения нашей регрессионной модели. Следующий код помогает нам сохранить нашу модель с помощью модуля Pickle. Наша модель машинного обучения сохраняется как «model.pkl». Позже мы будем использовать этот файл для прогнозирования вывода, когда из нашего веб-приложения будут поступать новые входные данные.

Pickle: модуль Python pickle используется для сериализации и десериализации структур объектов Python. Процесс преобразования любого типа объекта Python (список, словарь и т. Д.) В потоки байтов (нули и единицы) называется травлением или сериализацией, сглаживанием или маршалингом. Мы можем преобразовать поток байтов (сгенерированный путем травления) обратно в объекты Python с помощью процесса, называемого unpickling.

2. Разработайте свое веб-приложение с помощью Flask и интегрируйте свою модель.

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

Учебные ресурсы по Flask: Учебники по Flask от Кори Шафера, Изучение Flask для Python - полное руководство

2.1. Установить Flask: вы можете использовать команду pip install flask. Я использую PyCharm IDE для разработки флеш-приложений. Чтобы легко установить библиотеки в PyCharm, выполните следующие шаги.

2.2. Импортируйте необходимые библиотеки, инициализируйте приложение flask и загрузите нашу модель машинного обучения: мы инициализируем наше приложение, а затем загрузим в приложение файл «model.pkl».

#import libraries
import numpy as np
from flask import Flask, render_template,request
import pickle
#Initialize the flask App
app = Flask(__name__)
model = pickle.load(open('model.pkl', 'rb'))

2.3. Определите маршрут приложения для страницы веб-приложения по умолчанию: маршруты относятся к шаблонам URL-адресов приложения (например, myapp.com/home или myapp.com/about). @app.route("/") - это декоратор Python, который Flask предоставляет для простого назначения URL-адресов в нашем приложении функциям.

#default page of our web-app
@app.route('/')
def home():
    return render_template('index.html')

Декоратор сообщает нашему @app, что всякий раз, когда пользователь посещает наш домен приложения (localhost: 5000 для локальных серверов) с заданным .route(), выполнять функцию home(). Flask использует библиотеку шаблонов Jinja для визуализации шаблонов. В нашем приложении мы будем использовать шаблоны для рендеринга HTML, который будет отображаться в браузере.

2.4. Перенаправление API для прогнозирования выбросов CO2. Мы создаем новый маршрут приложения («/ прогноз»), который считывает ввод из нашей формы «index.html» и при нажатии кнопки прогнозирования выводит результат с помощью render_template.

#To use the predict button in our web-app
@app.route('/predict',methods=['POST'])
def predict():
    #For rendering results on HTML GUI
    int_features = [float(x) for x in request.form.values()]
    final_features = [np.array(int_features)]
    prediction = model.predict(final_features)
    output = round(prediction[0], 2) 
    return render_template('index.html', prediction_text='CO2    Emission of the vehicle is :{}'.format(output))

Давайте посмотрим на наш файл index.html:

2.5. Запуск сервера Flask:

if __name__ == "__main__":
    app.run(debug=True)

вызывается app.run (), и веб-приложение размещается локально на [localhost: 5000].

«Debug = True» гарантирует, что нам не нужно запускать наше приложение каждый раз, когда мы вносим изменения, мы можем просто обновить нашу веб-страницу, чтобы увидеть изменения, пока сервер все еще работает.

Структура проекта:

Проект сохраняется в папке с именем «heroku_app». Сначала мы запускаем файл «mlmodel.py», чтобы получить нашу модель машинного обучения, а затем запускаем «app.py». При запуске этого файла наше приложение размещается на локальном сервере на порту 5000.

Вы можете просто ввести «localhost: 5000» в своем веб-браузере, чтобы открыть веб-приложение после запуска «app.py».

  • FuelConsuming.csv - это набор данных, который мы использовали.
  • mlmodel.py - это наш код машинного обучения
  • model.pkl - это файл, который мы получаем после запуска файла mlmodel.py. Он находится в том же каталоге.
  • app.py - это приложение Flask, которое мы создали выше
  • шаблоны - в этой папке находится наш файл index.html. Это обязательно во Flask при рендеринге шаблонов. Все файлы HTML помещаются в эту папку.
  • static - Эта папка содержит папку «css». Статическая папка в приложении Flask предназначена для хранения файлов CSS и JavaScript.

Всегда рекомендуется сначала запустить приложение на локальном сервере и проверить его функциональность, прежде чем размещать его в Интернете на облачной платформе. Посмотрим, что произойдет, когда мы запустим app.py:

При нажатии на предоставленный URL мы попадаем на наш сайт:

Теперь давайте введем необходимые значения, нажмем кнопку «Прогнозировать» и посмотрим, что произойдет.

Обратите внимание на URL-адрес (127.0.0.1:5000/predict), это использование маршрутов приложения. При нажатии кнопки «Прогнозировать» мы попадаем на страницу прогнозирования, где функция прогнозирования отображает страницу «index.html» с выходными данными нашего приложения.

3. Разверните свое веб-приложение на Heroku

Теперь, когда наше приложение было успешно протестировано на локальном сервере, пришло время развернуть наше приложение на облачной платформе Heroku. Есть два предварительных условия для развертывания любого веб-приложения Flask на Heroku.

В структуре проекта вы могли заметить два новых файла с именами «Procfile» и «requirements.txt». Эти два файла необходимы для развертывания вашего приложения на Heroku.

Перед созданием Procfile нам необходимо установить Gunicorn. Вы можете использовать команду pip install gunicorn или использовать ссылку выше для установки библиотек в PyCharm.

3.1. Create Procfile: Procfile определяет команды, которые выполняются приложением Heroku при запуске. Откройте новый файл с именем Procfile (без расширения) в рабочем каталоге и вставьте следующее.

web: gunicorn app:app

3.2. Создайте файл requirements.txt: файл requirements.txt будет содержать все зависимости для приложения Flask. Откройте новый файл и назовите его «requirements.txt». Укажите все требования следующим образом:

Flask==1.1.1
gunicorn==20.0.4
pandas==0.25.2
scikit-learn==0.23.2
numpy==1.17.3
pickle4==0.0.1
sklearn==0.0

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

pip freeze > requirements.txt

3.3. Загрузите все файлы в репозиторий GitHub:

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

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

Чтобы с этого момента развернуть свое приложение на heroku, выполните шаги 2–3 из моей следующей статьи:



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

Ссылка на мой Репозиторий GitHub

Ссылка на мое веб-приложение на Heroku - Предиктор выбросов CO2

Примечание. Все ресурсы, которые вам потребуются для начала работы, были упомянуты, а ссылки на них также приведены в этой статье. Надеюсь, вам это пригодится :)

Я надеюсь, что эта статья поможет вам разместить ваше веб-приложение ML в Интернете с помощью Heroku. Не забудьте нажать на значок «хлопок» ниже, если вам понравилась эта статья. Спасибо за уделенное время.