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

Но что дальше?

Другими словами, как развернуть вашу модель в производственной среде или легко поделиться ею с другими людьми, чтобы они могли запустить и оценить ее на своем локальном компьютере. ПК и запускайте его на невидимых данных без необходимости установки каких-либо библиотек, зависимостей, графического интерфейса (IUPython, Jupyter Notebook ...) или даже для просмотра вашего кода.

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

В этом примере мы будем использовать простую модель линейной регрессии.

Начнем с запуска наших библиотек:

import warnings
warnings.filterwarnings("ignore", category=FutureWarning)

import sys
import pandas as pd
from sklearn.linear_model import LinearRegression

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

Очевидно, что тестовые и обучающие данные должны иметь одинаковую форму.

TestData = sys.argv[1]
# Read the data that will serve for training and the test data
X_full = pd.read_csv("TrainingData.csv", index_col='x001')
# Read the data that will serve for testing
X_test = pd.read_csv(TestData, index_col='x001')

Мы отделим целевые данные от всех данных:

#separate target from predictors in both training and test data
y = X_full.y
y_test=X_test.y

X_full.drop(['y'], axis=1, inplace=True)
X_test.drop(['y'], axis=1, inplace=True)

Затем применим нашу модель:

model=LinearRegression()
model.fit(X_full,y)
preds = model.predict(X_test)

Затем мы сохраним результаты прогноза в файле outputTest.txt.

# Save test predictions to file
output = pd.DataFrame({'Id': X_test.index,'Y Original': y_test, 'Y predicted':preds})
output.to_csv('/data/outputTest.txt', index=False)

Теперь, когда у нас запущена наша базовая модель, мы попытаемся разместить ее в докере.
Для этого нам нужно сначала создать необходимые файлы для создания образа докера, которые являются Dockerfile и require.txt

#DockerFile:

FROM python:3
COPY Your_python_code.py ./
COPY requirements.txt ./
COPY TrainingData.csv ./

RUN pip install -r requirements.txt
CMD ["python", "wallet.py", "/data/testData.csv"]

# requirements.txt (Нет необходимости загружать математическую библиотеку, поскольку она будет автоматически добавлена ​​вместе с python3).

pandas
sklearn

Затем мы помещаем TrainingData.csv, Your_python_code.py DockerFile и requirements.txt в одну и ту же папку, открываем Терминал, переходим в эту папку и запускаем следующее:

docker build -t <your_docker_image_name> .
# dont forget the . at the end.

Затем мы отправляем образ в нашу учетную запись в DockerHub (мы предполагаем, что у вас есть учетная запись в Docker Hub, если нет, вы можете создать ее бесплатно, а затем запустить приложение Docker на своем ПК / MAC):

docker push <your_docker_image_name>

Теперь ваша модель находится в Docker-хабе, и вы можете поделиться ею со своими друзьями.
Просто попросите их сделать следующее:

1- Получите образ из Docker Hub:

docker pull <your_docker_image_name>

2- Запускаем контейнер:

docker run -v <path>:/data/ <your_docker_image_name>

Где ‹путь› - это локальный путь к вашим обучающим данным testData.csv.
В этом примере ваш файл должен называться testData.csv ( обязательно) в соответствии с требованиями .txt

Пример:
если ваш testData.csv находится в / var / files /, вам следует запустить:

docker run -v /var/files/:/data/ <your_docker_image_name>

Выходные данные:
Будет создан выходной текстовый файл outputTest.txt, содержащий 3 столбца:
ID, реальное значение Y и прогнозируемое значение Y.
Вывод будет сохранен в каталоге ‹path›, в примере
выше, вывод будет сохранен в / var / files / и будет называться
outputTest.txt.

Пожалуйста, найдите полный код в этом GIST.

Как всегда, надеюсь, вы узнали что-то новое :)

Салам.