Как преобразовать целевые переменные для регрессии в Python

Как преобразовать целевые переменные для регрессии в Python

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

Правильная подготовка данных для тренировки может означать разницу между посредственными и выдающимися результатами даже при использовании очень простых линейных алгоритмов.

Выполнение операций подготовки данных, таких как масштабирование, относительно несложно для входных переменных и стало обычным делом в Python с помощью класса scikit-learn Pipeline.

В задачах моделирования с прогнозированием регрессии, когда необходимо прогнозировать числовое значение, также может быть критичным масштабирование и выполнение других преобразований данных для целевой переменной. Этого можно достичь в Python, используя TransformedTargetRegressor учебный класс.

В этом руководстве вы узнаете, как использовать TransformedTargetRegressor для масштабирования и преобразования целевых переменных для регрессии с помощью библиотеки машинного обучения Python scikit-learn.

После прохождения этого руководства вы будете знать:

  • Важность масштабирования входных и целевых данных для машинного обучения.
  • Два подхода к применению преобразования данных к целевым переменным.
  • Как использовать TransformedTargetRegressor в реальном наборе данных регрессии.

Начните свой проект с моей новой книгой «Подготовка данных для машинного обучения», включая пошаговые инструкции и Исходный код Python файлы для всех примеров.

Давайте начнем.

Как преобразовать целевые переменные для регрессии с помощью Scikit-Learn

Как преобразовать целевые переменные для регрессии с помощью Scikit-Learn
Фото Дона Хениса, некоторые права защищены.

Обзор учебного пособия

Это руководство разделено на три части; они есть:

  1. Важность масштабирования данных
  2. Как масштабировать целевые переменные
  3. Пример использования TransformedTargetRegressor

Важность масштабирования данных

Обычно есть данные, в которых шкала значений отличается от переменной к переменной.

Например, одна переменная может быть в футах, другая в метрах и так далее.

Некоторые алгоритмы машинного обучения работают намного лучше, если все переменные масштабируются в одном диапазоне, например масштабирование всех переменных до значений от 0 до 1, называемое нормализацией.

Это влияет на алгоритмы, которые используют взвешенную сумму входных данных, например линейные модели и нейронные сети, а также на модели, которые используют меры расстояния, такие как опорные векторные машины и k-ближайшие соседи.

Таким образом, рекомендуется масштабировать входные данные и, возможно, даже попробовать другие преобразования данных, например сделать данные более нормальными (лучше соответствовать гауссовскому распределению вероятностей) с помощью преобразования мощности.

Это также относится к выходным переменным, называемым целевыми переменными, например числовым значениям, которые прогнозируются при моделировании задач прогнозного регрессионного моделирования.

Для задач регрессии часто желательно масштабировать или преобразовывать как входные, так и целевые переменные.

Масштабировать входные переменные просто. В scikit-learn вы можете использовать масштабируемые объекты вручную или более удобный конвейер, который позволяет вам объединить серию объектов преобразования данных вместе перед использованием вашей модели.

Конвейер подгоняет объекты масштабирования в обучающие данные за вас и применяет преобразование к новым данным, например, при использовании модели для прогнозирования.

Например:

Проблема в том, каков эквивалентный механизм для масштабирования целевых переменных в scikit-learn?

Хотите начать подготовку данных?

Пройдите мой бесплатный 7-дневный ускоренный курс по электронной почте (с примером кода).

Нажмите, чтобы зарегистрироваться, а также получите бесплатную электронную версию курса в формате PDF.

Загрузите БЕСПЛАТНЫЙ мини-курс

Как масштабировать целевые переменные

Есть два способа масштабирования целевых переменных.

Первый - управлять преобразованием вручную, а второй - использовать новый автоматический способ управления преобразованием.

  1. Вручную преобразуйте целевую переменную.
  2. Автоматически преобразовывать целевую переменную.

1. Ручное преобразование целевой переменной

Ручное управление масштабированием целевой переменной включает создание и применение объекта масштабирования к данным вручную.

Он включает в себя следующие этапы:

  1. Создайте объект преобразования, например MinMaxScaler.
  2. Установите преобразование в обучающий набор данных.
  3. Примените преобразование к набору данных поезда и теста.
  4. Инвертируйте преобразование любых сделанных прогнозов.

Например, если мы хотим нормализовать целевую переменную, мы сначала должны определить и обучить объект MinMaxScaler:

Затем мы преобразуем поезд и тестируем данные целевой переменной.

Затем мы подбираем нашу модель и используем ее для прогнозов.

Прежде чем прогнозы можно будет использовать или оценить с помощью метрики ошибки, нам нужно будет инвертировать преобразование.

Это неприятно, поскольку это означает, что вы не можете использовать вспомогательные функции в scikit-learn, такие как cross_val_score (), для быстрой оценки модели.

2. Автоматическое преобразование целевой переменной.

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

Этого можно достичь с помощью объекта TransformedTargetRegressor, который обертывает данную модель и масштабируемый объект.

Он подготовит преобразование целевой переменной с использованием тех же обучающих данных, которые использовались для соответствия модели, а затем применит это обратное преобразование к любым новым данным, предоставленным при вызове pred (), возвращая прогнозы в правильном масштабе.

Чтобы использовать TransformedTargetRegressor, он определяется путем указания модели и объекта преобразования для использования в целевом объекте; Например:

Позже экземпляр TransformedTargetRegressor можно подгонять, как и любую другую модель, путем вызова функции fit () и использовать для прогнозирования путем вызова функции predic ().

Это намного проще и позволяет использовать такие полезные функции, как cross_val_score () оценить модель

Теперь, когда мы знакомы с TransformedTargetRegressor, давайте рассмотрим пример его использования в реальном наборе данных.

Пример использования TransformedTargetRegressor

В этом разделе мы продемонстрируем, как использовать TransformedTargetRegressor в реальном наборе данных.

Мы будем использовать проблему регрессии жилищного строительства Бостона, которая имеет 13 исходных данных и одну числовую цель и требует изучения взаимосвязи между характеристиками пригорода и ценами на жилье.

Набор данных можно скачать здесь:

Загрузите набор данных и сохраните его в текущем рабочем каталоге под именем «Корпус.csv«.

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

Вы можете узнать больше об этом наборе данных и значениях столбцов здесь:

Мы можем подтвердить, что набор данных может быть правильно загружен как массив NumPy и разбить его на входные и выходные переменные.

Полный пример приведен ниже.

При выполнении примера печатается форма входной и выходной частей набора данных, показывая 13 входных переменных, одну выходную переменную и 506 строк данных.

Теперь мы можем подготовить пример использования TransformedTargetRegressor.

Наивная регрессионная модель, которая предсказывает среднее значение цели для этой проблемы, может достичь средней абсолютной ошибки (MAE) около 6,659. Мы будем стремиться к большему.

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

Затем мы определим экземпляр TransformedTargetRegressor и установим регрессор для конвейера, а преобразователь - на экземпляр объекта MinMaxScaler.

Затем мы можем оценить модель с нормализацией входных и выходных переменных с использованием 10-кратной перекрестной проверки.

Полный пример приведен ниже.

Вас также может заинтересовать