Промежуточное руководство по пайплайнам scikit-learn

В своем последнем посте я написал введение в пайплайны scikit-learn. Если вы еще не читали его, вы можете получить доступ по ссылке ниже:



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

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

Что, если мы хотим сделать некоторые преобразования объектов с учетом типов объектов?

Представьте, что у нас есть кадр данных pandas, который содержит числовые и категориальные функции, и мы хотим обрабатывать эти два типа функций по-разному. В этом случае мы можем использовать компонент ColumnTransformer из конвейера scikit-learn. Давай начнем!

В образовательных целях мы будем использовать набор данных Kaggle Adult Census Income:



Этот набор данных содержит 6 числовых признаков и 9 категориальных признаков, поэтому он кажется подходящим для пайплайна, который мы хотим построить. Блокнот Jupyter будет доступен на моем github, и вы можете скачать его по этой ссылке:



Перед реализацией конвейера нам нужно выполнить небольшое преобразование набора данных, потому что все неизвестные значения сохраняются как «?» вместо NaN, а доход (целевой столбец) представляет собой строку, и мы хотим закодировать ее в действительные числа.

Как только мы выполнили эти преобразования, мы можем приступить к реализации нашего конвейера. Для этого мы будем использовать компонент scikit-learn ColumnTransformer и будем выбирать и обрабатывать категориальные и числовые признаки по-другому:

Make_column_selector поможет нам выбрать столбцы по типу. В нашем случае это будут типы int и float для числовых признаков и object для категориальных признаков. Если мы внимательно посмотрим, компонент ColumnTransformer также использует 2 переменные, называемые numeral_pipe и categorical_pipe. Эти конвейеры будут определены следующим образом:

После того, как мы определили компоненты нашего ColumnTransformer и все его элементы внутри, мы будем использовать этот компонент для создания нашего основного конвейера:

Вот и все! Наш трубопровод готов! Давайте используем его для обучения и давайте измерим его точность:

Наша точность с использованием 33% данных в качестве тестового набора составляет 83,2%. Это совсем не плохо!

Как мы можем повысить точность этого конвейера?

Чтобы улучшить результаты этого конвейера, мы можем выполнить методы тонкой настройки для каждого компонента. Scikit-learn упрощает точную настройку с помощью GridSearchCV. Этот компонент выполнит обширную тонкую настройку, пробуя все возможные комбинации гиперпараметров в пределах нашей определенной области. Мы должны быть осторожны здесь, потому что вычислительная сложность, связанная с этим процессом, может взлететь в геометрической прогрессии, если мы попробуем слишком много комбинаций:

Если мы внимательно посмотрим на код, мы определили некоторые гиперпараметры для конвейера, а затем, после определения метрики, которую мы хотим оптимизировать, мы начали процесс подбора всех возможных комбинаций. После этого процесса мы улучшаем нашу точность на 0,9%, получая общую точность 84,1%. Звучит не так уж и много, но это довольно простая оптимизация, и она может еще больше улучшиться, определив большее пространство гиперпараметров, попробовав более мощные модели, выполнив некоторую байесовскую или генетическую оптимизацию вместо оптимизации поиска по сетке и т. д.

Заключение

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

Рекомендации