Дополнительные материалы

Продолжим работу в том же ноутбуке

Pipeline и ColumnTransformer

ColumnTransformer

Ранее мы рассмотрели применение пайплайна для последовательного преобразования данных и обучения модели. При этом, обратите внимание, у нас были только количественные данные (собственно один количественный признак LSTAT).

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

Здесь выручает ColumnTransformer. Он позволяет «прописать» отдельным признакам (т.е. столбцам, columns) свои преобразования, а затем объединить результат и передать в модель. Рассмотрим пример.

пример применения ColumnTransformer

Библиотека joblib

Сохранение пайплайна

Библиотека joblib⧉ позволяет сохранить пайплайн в файл примерно так, как мы поступали с моделями и библиотекой pickle.

Кэширование функции

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

Поместим функцию в кэш и вызовем из кэша в первый раз.

Вызовем из кэша еще раз.

Параллелизация

Параллелизация (parallelization) или параллельное исполнения кода на нескольких процессорах (CPU) может существенно увеличить скорость выполнения операций. Посмотрим, сколько процессоров доступно в Google Colab.

Напишем медленную функцию.

Применим эту функкцию к числам от 0 до 9.

Выполним параллелизацию.

Встраивание функций и классов в sklearn

Библиотека sklearn предоставляет инструменты для создания собственных функций и классов, которые затем можно встроить в классы sklearn в соответствии с их парадигмой (т.е. c методами .fit(), .transform() и т.д.).

Встраивание функций

Напишем собственную функцию, которая будет кодировать категориальную переменную в соответствии с переданным ей словарем.

Теперь импортируем класс FunctionTransformer, которому при создании соответствующего объекта передадим созданную функцию и ее параметры в виде словаря (параметр kw_args).

FunctionTransformer автоматически создаст стандартные методы класса sklearn, в частности, метод .fit_transform().

класс FunctionTransformer

Встраивание классов

Помимо функций в парадигму sklearn можно встраивать и классы. Для этого новый класс должен наследовать классы BaseEstimator и TransformerMixin. Создадим такой же encoder, но на этот раз в виде класса.

Создадим объект класса Encode и применим метод .fit_transform(), который мы не объявляли явным образом.

классы BaseEstimator и TransformerMixin: .fit_transform()

Попробуем метод .inverse_transform().

классы BaseEstimator и TransformerMixin: .inverse_transform()

Такие вновь созданные классы sklearn, в частности, можно встраивать в pipeline.

Подведем итог

В дополнительных материалах мы изучили инструмент ColumnTransformer, некоторые возможности библиотеки joblib, а также встраивание собственных функций и классов в парадигму sklearn.