Перейти к содержимому

Конвейеры

В реальной задаче машинного обучения модель редко применяется к исходным данным сразу.

Сначала данные обычно хранятся в DataFrame. Затем их нужно подготовить:

  1. выбрать нужные столбцы;
  2. обработать пропуски;
  3. преобразовать категориальные значения в числа;
  4. преобразовать данные в матрицу;
  5. при необходимости масштабировать признаки;
  6. обучить модель.

Получается последовательность действий:

DataFrame → подготовка данных → числовые признаки → масштабирование → модель

Эту последовательность удобно оформить как единый объект. Такой объект называется конвейером.

Конвейер запоминает все этапы подготовки данных и выполняет их в правильном порядке. Главная польза конвейера в том, что обработка данных и модель работают как единое целое. Не нужно вручную повторять одни и те же действия перед каждым предсказанием.

Конвейер может содержать несколько этапов:

  • обработку пропущенных значений;
  • кодирование категориальных признаков;
  • масштабирование числовых признаков;
  • обучение модели или получение предсказаний.

Например, для задачи регрессии с табличными данными конвейер может выглядеть так:

DataFrame
→ OneHotEncoder(Признак 1)
→ OrdinalEncoder(Признак 2)
→ Imputer(Признак 3)
→ StandardScaler
→ LinearRegression

Здесь OneHotEncoder и OrdinalEncoder преобразуют категориальные признаки, Imputer заполняет пропуски, StandardScaler масштабирует числовые признаки, а LinearRegression обучается предсказывать значение целевой переменной.

У конвейера, как и у модели, есть два основных действия.

Метод Fit используется для обучения.

Во время Fit конвейер:

  1. настраивает преобразователи по обучающим данным;
  2. применяет настроенные преобразования;
  3. передаёт подготовленные признаки в модель;
  4. обучает модель.

Например, StandardScaler во время Fit запоминает средние значения и стандартные отклонения признаков, а модель запоминает закономерности в данных.

Метод Predict используется для предсказания.

Во время Predict конвейер:

  1. берёт новые данные;
  2. применяет к ним те же преобразования, которые были настроены при Fit всего конвейера;
  3. передаёт результат модели;
  4. возвращает предсказания.

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

Без конвейера подготовку данных легко случайно выполнить по-разному.

Например, можно обучить StandardScaler на обучающей выборке, а потом забыть применить его к тестовой. Или закодировать категориальный столбец в обучающих и тестовых данных разными способами.

Конвейер помогает избежать таких ошибок:

  • все шаги находятся в одном месте;
  • порядок действий фиксирован;
  • одинаковая обработка применяется к обучающим, тестовым и новым данным;
  • код становится короче и понятнее.

DataPipeline - это основной конвейер в библиотеке ML PascalABC.NET. Он работает с табличными данными в виде DataFrame.

Он удобен, когда данные ещё не превращены в матрицу и нужно:

  • выбрать признаки по именам столбцов;
  • указать целевой столбец;
  • закодировать категориальные признаки;
  • применить преобразования;
  • обучить модель.

DataPipeline особенно полезен для обычных табличных задач, где данные приходят из CSV-файла, встроенного датасета или другой таблицы.

MatrixPipeline используется, когда признаки уже представлены матрицей X, а ответы — вектором y.

Он не работает с именами столбцов и не знает структуру исходного DataFrame. Зато он удобен, если данные уже подготовлены заранее:

X → StandardScaler → модель

MatrixPipeline ближе к низкоуровневой работе с матрицами.

В ML PascalABC.NET есть несколько основных вариантов конвейеров.

Конвейер классификации — заканчивается моделью классификации и предсказывает класс объекта.

Например: определить вид объекта, категорию товара или результат да / нет.

Конвейер регрессии — заканчивается моделью регрессии и предсказывает числовое значение.

Например: цену квартиры, время доставки или температуру.

Конвейер кластеризации — заканчивается моделью кластеризации и определяет номер кластера для каждого объекта.

Например: найти группы похожих объектов без заранее известных правильных ответов.

MatrixPipeline — конвейер для случаев, когда данные уже представлены матрицей и вектором.

Дальше можно перейти к конкретным видам конвейеров:

  1. Классификация
  2. Регрессия
  3. Кластеризация
  4. MatrixPipeline