рекомендации

понедельник, 31 мая 2021 г.

Интеграция машинного обучения в веб-приложение с помощью Flask

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

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

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

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

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

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


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

Pickle: модуль Python pickle используется для сериализации и десериализации структур объектов Python. Процесс преобразования любого типа объекта Python (списка, dict и т. д.) в потоки байтов (0 и 1) называется "pickling" или сериализацией. Мы можем преобразовать поток байтов (сгенерированный путем сериализации) обратно в объекты Python с помощью процесса, называемого unpickling.
import pandas as pd
from sklearn.linear_model import LinearRegression
import pickle

df = pd.read_csv("FuelConsumption.csv")
#use required features
cdf = df[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_COMB','CO2EMISSIONS']]

#Training Data and Predictor Variable
# Use all data for training (tarin-test-split not used)
x = cdf.iloc[:, :3]
y = cdf.iloc[:, -1]
regressor = LinearRegression()

#Fitting model with trainig data
regressor.fit(x, y)

# Saving model to current directory
# Pickle serializes objects so they can be saved to a file, and loaded in a program again later on.
pickle.dump(regressor, open('model.pkl','wb'))

'''
#Loading model to compare the results
model = pickle.load(open('model.pkl','rb'))
print(model.predict([[2.6, 8, 10.1]]))
'''
2. Разработка веб-приложения с помощью Flask и интеграция своей модели.

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

2.1. Установите Flask:

Вы можете использовать команду «pip install flask». Я использую PyCharm IDE для разработки приложений. Чтобы легко установить библиотеки в PyCharm, выполните эти действия.

2.2. Импортируйте необходимые библиотеки, инициализируйте приложение flask и загрузите нашу модель ML:

Мы инициализируем наше приложение, а затем загрузим в него файл «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:

Мы создаем новый маршрут приложения (‘/predict’), который считывает ввод из нашей формы «index.html» и при нажатии кнопки predict выводит результат с помощью 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, которое мы создали выше
  • templates - в этой папке находится наш файл index.html. Это обязательно в Flask при рендеринге шаблонов. Все файлы HTML помещаются в эту папку.
  • static - эта папка содержит папку «css». Статическая папка в приложении Flask предназначена для хранения файлов CSS и JavaScript.
Всегда рекомендуется сначала запустить приложение на локальном сервере и проверить его функциональность, прежде чем размещать его в интернете на облачной платформе. Посмотрим, что произойдет, когда мы запустим app.py:


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


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


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

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

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

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

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

3.1. Создание Procfile:

Procfile определяет команды, которые выполняются приложением Heroku при запуске. Откройте новый файл с именем Procfile (без расширения) в рабочем каталоге и вставьте следующее.
web: gunicorn app:app
3.2. Создайте файл 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 Cloud Platform. Вы можете поделиться ссылкой на приложение со своими друзьями и семьей, чтобы показать им, что вы создали. Любой, у кого есть доступ к интернету и вашему приложению, сможет использовать его.

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

Ссылка на мое веб-приложение на Heroku - CO2 Emission Predictor

Комментариев нет:

Отправить комментарий