Обучение и применение модели
В данном разделе описано, как создать код алгоритма в 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. Он автоматически синхронизируется с контейнером среды выполнения и будет использоваться как активный алгоритм.

Функция 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илиasyncmodel_name— имя обучаемой моделиalgorithmиenvironment— алгоритм и среда, определяющие развертываниеalgorithm:environmentinput— обучающая выборка; в примере данные передаются в полеdataс типомinlineparams— параметры алгоритма
В синхронном режиме (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.