Перейти к основному содержимому
Версия: 6.1

Обучение и применение модели

В данном разделе описано, как создать код алгоритма в Jupyter, обучить модель с помощью операции fit и применить ее к новым данным с помощью операции apply.

Написать код алгоритма в Jupyter

На экране Развернутые образы откройте меню развертывания tutorial-demo:local и выберите Перейти в Jupyter. Откроется JupyterLab, подключенный к контейнеру выбранного развертывания.

Код алгоритма хранится в файле notebook.ipynb и должен определять функции init, fit и apply. Дополнительно можно определить функции save, load и summary. Добавьте в кодовую ячейку ноутбука следующий пример линейной регрессии y = a·x + b:

import pandas as pd
import numpy as np
import pickle
from pathlib import Path

MODEL_DIR = Path('/srv/app/model/data')
MODEL_DIR.mkdir(parents=True, exist_ok=True)

def _cfg(param):
p = (param.get('options') or {}).get('params') or {}
return p.get('feature', 'x'), p.get('target', 'y')

def init(df, param):
return {'algorithm': 'demo_linreg'}

def fit(model, df, param):
feature, target = _cfg(param)
x = df[feature].astype(float).values
y = df[target].astype(float).values
a, b = np.polyfit(x, y, 1) # обучение: подбор коэффициентов
model.update({'a': float(a), 'b': float(b), 'feature': feature, 'target': target})
return model

def apply(model, df, param):
feature = model.get('feature', 'x')
out = df.copy()
out['prediction'] = model['a'] * out[feature].astype(float) + model['b']
return out

def save(model, name):
with open(MODEL_DIR / f'{name}.pkl', 'wb') as h:
pickle.dump(model, h)
return model

def load(name):
with open(MODEL_DIR / f'{name}.pkl', 'rb') as h:
return pickle.load(h)

Сохраните код с помощью сочетания клавиш Ctrl+S. Он автоматически синхронизируется с контейнером среды выполнения и будет использоваться как активный алгоритм.

Алгоритм в JupyterLab

примечание

Функция init(df, param) создает объект модели, fit(model, df, param) обучает и возвращает модель, а apply(model, df, param) возвращает DataFrame с предсказаниями. Пользовательские параметры запроса передаются в param['options']['params'].

Обучить модель через API (fit)

API ML-Студии доступен через прокси Smart Monitor по базовому пути /api/mltk/api/v1/ml/.... Для обучения модели отправьте запрос POST /api/mltk/api/v1/ml/fit:

curl -sk -b cookies.txt -H "osd-xsrf: true" -H "Content-Type: application/json" \
-d '{
"mode": "sync",
"model_name": "tutorial-demo-model",
"algorithm": "tutorial-demo",
"environment": "local",
"input": {"kind": "inline", "format": "json", "data": [
{"x": 1, "y": 2.1}, {"x": 2, "y": 3.9}, {"x": 3, "y": 6.1},
{"x": 4, "y": 8.0}, {"x": 5, "y": 10.2}
]},
"params": {"feature": "x", "target": "y"}
}' \
"https://<host>:5601/api/mltk/api/v1/ml/fit"

В запросе используются следующие поля:

  • mode — режим выполнения: sync или async
  • model_name — имя обучаемой модели
  • algorithm и environment — алгоритм и среда, определяющие развертывание algorithm:environment
  • input — обучающая выборка; в примере данные передаются в поле data с типом inline
  • params — параметры алгоритма

В синхронном режиме (sync) после завершения обучения возвращается следующий ответ:

{"ok": true, "body": {
"job": {"id": "job_...", "operation": "fit", "status": "succeeded"},
"model": {"id": "tutorial-demo-model-000316", "name": "tutorial-demo-model", "status": "ready"},
"result": {"rows": [{"model_name": "tutorial-demo-model", "trained_rows": "5"}]}
}}

Обученная модель отображается на экране Модели со статусом Готова и ссылкой на артефакт — файл модели, сохраненный функцией save:

Модель обучена — статус «Готова»

примечание

В асинхронном режиме (mode: "async") ответ содержит job_id со статусом queued. После выполнения задача отображается на экране Запущенные задачи со статусом Успешно. Синхронные задачи (sync) выполняются немедленно и не сохраняются в списке задач.

Задача обучения — статус «Успешно»

Применить модель (apply)

Для применения обученной модели к новым данным отправьте запрос POST /api/mltk/api/v1/ml/apply. Укажите имя модели в поле model_name:

curl -sk -b cookies.txt -H "osd-xsrf: true" -H "Content-Type: application/json" \
-d '{
"mode": "sync",
"model_name": "tutorial-demo-model",
"input": {"kind": "inline", "format": "json", "data": [
{"x": 6}, {"x": 10}, {"x": 100}
]},
"params": {"feature": "x", "target": "y"}
}' \
"https://<host>:5601/api/mltk/api/v1/ml/apply"

Ответ содержит предсказания в поле result.rows. В приведенном примере модель определила зависимость y ≈ 2·x:

{"ok": true, "body": {
"job": {"id": "job_...", "operation": "apply", "status": "succeeded"},
"model": {"id": "tutorial-demo-model-000316", "name": "tutorial-demo-model", "status": "ready"},
"result": {"rows": [
{"x": "6", "prediction": "12.15"},
{"x": "10", "prediction": "20.27"},
{"x": "100", "prediction": "202.97"}
]}
}}

В результате выполнен полный цикл работы с моделью: алгоритм создан - образ развёрнут - модель обучена с помощью fit - модель применена с помощью apply.

примечание

Файл cookies.txt содержит файлы cookie сеанса Smart Monitor. Для запросов через прокси необходимо передавать заголовок osd-xsrf: true. При прямом обращении к sm-ml-service используйте пути /api/v1/ml/fit и /api/v1/ml/apply без префикса /api/mltk. Дополнительная информация приведена в разделе Настройки SM-ML.

Следующий шаг — Обучение и применение через SML.