Функция предсказания (англ. predict) – это основной механизм любого обученного
моделя машинного обучения. Она принимает на вход данные‚ обрабатывает их согласно
полученным в процессе обучения правилам и возвращает предсказанные значения.
В статье мы подробно разберём‚ какие аргументы может принимать такая функция‚
зачем они нужны и как правильно их формировать.
Содержание
- Что такое функция предсказания?
- Базовый аргумент: входные признаки (X)
- Дополнительные аргументы и их роль
- Подготовка аргументов: предобработка и валидация
- Примеры в популярных библиотеках
- Типичные ошибки и способы их устранения
- Рекомендации по использованию
Что такое функция предсказания?
После того как модель обучена‚ её основной метод – predict (в некоторых библиотеках
predict_proba‚ forward и т.п.) – отвечает за генерацию ответов на новых данных.
С точки зрения программного интерфейса (API) функция выглядит так:
y_pred = model.predict(X‚ kwargs) Где X – обязательный аргумент‚ а kwargs – набор дополнительных параметров‚
зависящих от конкретной реализации.
Почему важно правильно формировать аргументы?
- Корректность предсказаний – неверный формат или тип данных приводит к
ошибкам или к деградации качества. - Скорость вычислений – правильно подготовленные батчи позволяют использовать
векторизацию и GPU‑ускорение. - Совместимость – единый интерфейс облегчает интеграцию модели в продакшн.
Базовый аргумент: входные признаки (X)
В большинстве случаев X – это массив или таблица‚ содержащая признаки‚
которые использовались при обучении. Ниже перечислены ключевые требования к этому
аргументу.
Формат данных
- NumPy‑массив –
np.ndarrayформы(n_samples‚ n_features). - Pandas DataFrame – удобен для работы с именованными столбцами и
автоматическим типизацией. - Sparse matrix (CSR‚ CSC) – используется при работе с разреженными данными
(текст‚ one‑hot‑коды). - Тензоры (PyTorch‚ TensorFlow) –
torch.Tensorилиtf.Tensorс
требуемой размерностью.
Типы данных внутри X
- Числовые (float‚ int) – большинство моделей требуют именно их.
- Категориальные – обычно кодируются в числовой вид (LabelEncoder‚ OneHotEncoder).
- Текстовые – преобразуются с помощью векторизации (TF‑IDF‚ word embeddings).
- Изображения – представляются как массивы форм
(height‚ width‚ channels).
Размерность и порядок
Важно‚ чтобы количество признаков (n_features) совпадало с тем‚ что было
в момент обучения. При несовпадении возможны две ситуации:
- Модель выдаёт ValueError – «feature mismatch».
- Модель «проглатывает» лишние признаки‚ что приводит к ухудшению качества.
Для избежания ошибок рекомендуется сохранять метаданные (список признаков‚
их порядок‚ типы) вместе с моделью.
Дополнительные аргументы и их роль
Не все функции предсказания ограничиваются только X. В зависимости от
библиотеки и задачи могут присутствовать такие параметры:
batch_size
Определяет размер пакета‚ обрабатываемого за один проход. Полезен для
моделей‚ работающих на GPU‚ где слишком большой пакет может привести к
переполнению памяти‚ а слишком маленький – к низкой производительности.
return_proba / probability
Если модель умеет выдавать вероятностные оценки (логистическая регрессия‚
градиентный бустинг и т.п.)‚ этот флаг заставит функцию вернуть массив
вероятностей вместо меток классов.
threshold
Для бинарных классификаторов можно задать собственный порог разделения
классов (по умолчанию 0.5).
device
В библиотеках глубокого обучения (PyTorch‚ TensorFlow) указывается‚
на каком устройстве выполнять вычисления: cpu‚ cuda:0 и т.д.
predict_steps / time_steps
Для рекуррентных и трансформер‑моделей‚ работающих с последовательностями‚
можно задать количество шагов предсказания вперёд.
metadata
Произвольный словарь‚ который иногда используется для передачи
контекстной информации (например‚ идентификаторы пользователей) в
модели‚ обученные с учётом контекста.
Подготовка аргументов: предобработка и валидация
Перед тем как передать данные в predict‚ их обычно нужно привести к
одному виду‚ который использовался при обучении. Ниже – пошаговый чек‑лист.
Шаг 1. Выбор и согласование признаков
- Загрузить список признаков из метаданных модели.
- Убедиться‚ что в новых данных присутствуют все обязательные столбцы.
- Отбросить лишние столбцы или добавить недостающие с заполнением NaN.
Шаг 2. Обработка пропусков
- Для числовых признаков – иммьютация (среднее‚ медиана) или специальный маркер.
- Для категориальных – отдельный «unknown» класс.
Шаг 3. Кодирование категориальных переменных
Используйте те же трансформеры‚ которые применялись в обучающем пайплайне
(e.g.‚ OneHotEncoder(handle_unknown='ignore')).
Шаг 4. Масштабирование/нормализация
Если модель обучалась на стандартизированных данных (StandardScaler‚
MinMaxScaler)‚ необходимо применить тот же скейлер к новым данным.
Шаг 5. Преобразование в нужный тип
import numpy as np
X = np.asarray(X‚ dtype=np.float32) # пример для TensorFlow
Шаг 6. Формирование батчей (при необходимости)
# Пример для PyTorch
from torch.utils.data import DataLoader‚ TensorDataset
tensor_x = torch.tensor(X)
loader = DataLoader(TensorDataset(tensor_x)‚ batch_size=64)
Примеры в популярных библиотеках
Scikit‑learn
from sklearn.ensemble import RandomForestClassifier
import joblib
import pandas as pd
model = joblib.load('rf_model.pkl')
features = joblib.load('features.pkl') # список столбцов
df = pd.read_csv('new_data.csv')[features]
X = df.values # shape = (n_samples‚ n_features)
y_pred = model;predict(X)
y_proba = model.predict_proba(X)[:‚ 1]
TensorFlow / Keras
import tensorflow as tf
import pandas as pd
import joblib
model = tf.keras.models.load_model('my_model')
features = joblib.load('features.pkl')
scaler = joblib.load('scaler.pkl')
df = pd.read_csv('new.csv')[features]
X = scaler.transform(df) # масштабируем
X_tensor = tf.convert_to_tensor(X‚ dtype=tf.float32)
с указанием batch_size
pred = model.predict(X_tensor‚ batch_size=128)
prob = tf.nn.sigmoid(pred).numpy
PyTorch
import torch
import pandas as pd
import joblib
model = torch.load('net.pt')
model.eval
features = joblib.load('features.pkl')
scaler = joblib.load('scaler.pkl')
df = pd.read_csv('new.csv')[features]
X = scaler.transform(df)
tensor_x = torch.tensor(X‚ dtype=torch.float32)
loader = torch.utils.data.DataLoader(tensor_x‚ batch_size=64)
preds = []
with torch.no_grad:
for batch in loader:
out = model(batch) # shape (batch‚ n_classes)
preds.append(out)
y_pred = torch.cat(preds‚ dim=0)
y_np = y_pred.numpy
Типичные ошибки и способы их устранения
| Ошибка | Причина | Решение |
|---|---|---|
ValueError: X has 10 features‚ but model expects 12 | Несоответствие числа признаков. | Проверить список features из метаданных‚ добавить недостающие столбцы(заполнить NaN) или удалить лишние. |
TypeError: cannot convert 'list' object to Tensor | Неправильный тип входных данных в PyTorch/TensorFlow. | Преобразовать в np.ndarray → torch.Tensor или tf.Tensor. |
RuntimeError: CUDA out of memory | Слишком большой batch_size для GPU. | Уменьшить batch_size или переключиться на CPU. |
KeyError: 'unknown category' | Категориальный признак содержит значение‚ не встречавшееся при обучении. | При кодировании использовать handle_unknown='ignore' или добавитькатегорию «unknown» в обучающий набор. |
Рекомендации по использованию
- Сохраняйте пайплайн предобработки вместе с моделью. Это гарантирует‚ что
в продакшн‑среде будет использована та же трансформация. - Версионируйте метаданные. При изменении набора признаков обновляйте
версию модели и проверяйте совместимость. - Тестируйте предсказания на небольшом наборе данных. Перед массовым
запуском убедитесь‚ что типы‚ размерности и порядок столбцов соответствуют
ожиданиям. - Логируйте входные данные и результаты. Это ускорит поиск причин
возможных отклонений в качестве предсказаний. - Используйте типизацию (type hints) в коде. Например:
def predict(model: Any‚ X: np.ndarray‚ batch_size: int = 32) -> np.ndarray:
Аргумент функции предсказания – это не просто массив данных‚ а тщательно
подготовленный набор признаков‚ который должен полностью соответствовать
тому‚ что использовалось при обучении модели. Правильный выбор формата‚
обработка пропусков‚ кодирование категориальных переменных и согласование
размерностей позволяют получать стабильные и точные предсказания.
Следуя рекомендациям‚ приведённым в этой статье‚ вы сможете избежать
распространённых ошибок‚ ускорить работу модели и обеспечить её надёжную
интеграцию в продакшн‑системы.