Auto Binary Classification (ABC)

Мотивация:

Во первых стоит скаазать про основную черту. Существует много различных библиотек для создания моделей машинного обучения. Хочется иметь один интерфейс работы с ними. Поэтому библиотека основана на абстрации Pipe, котороая позваоляет иметь одинаковых интерефейс для работы с различными моделямя: все они обучаются и делают предсказания. К примеру, у sklearn существуют свои пайплайны, но они позволяют работать в основном только со своей библиотекой.

Часто бывает, что мы хотим оценить целый спектр моделей на каких-то данных. Но делать это каждый раз с нуля не очень удобно. Поэтому, хорошо если будет возможность просто взять данные и получить лучшую модель. Именно эту проблему и решает эта библиотека.

Как все работает:

Данная библиотека предназначена для подбора лучшей модели бинарной классификации. Так как структура напоминает зверинец, то в названиях используется слова zoo и animal. Пример использования:

Чтобы запустить паралельное обучение моделей, просто укажите parallel=True, и при желании n_jobs.

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

Структрура библиотеки:

  • ABC
    • core
      • storage - отвечает за сохранения и загрузку, использует cloudpickle, так как не все объекты сохраняются с помощью встроенного pickle
      • auto - отвечает за загрзку зверинца моделей и их обучение. На данный момент используются всего несколько моделей, логика которых написана в ABC.zoo.animals, далее все обучаются и выбирается лучшая. Но если моделей будет много, можно брать произвольно или делать модели второго уровня - библиотека это позволяет
      • model, transform - два абстрактных класса, которые задают макет Моделей и Трансформаций над данными
      • pipe - обертка на model и transform
      • metric - отвечает за оценку модели (обертка)
    • zoo
      • model (optimize) - набор уже имплементированных моделей
      • transform - набор преобразователей данных (к примеру различные скейлеры или какое то добавление фичей можно делать тут)
      • animals - набор Моделей, а точнее пайплайнов, которые могу обучаться и предсказывать

Добавление моделей из которых выбирает библиотека:

AutoML из данной библиотеки (ABC.core.auto.AutoML) обучает и оцениваев пайплайны, заранее заготовленные и хранящиеся в ABC.zoo.animals. Пример такого пайплайна:

Далее нам нужно его обучить. Делается это просто:

Далее наш пайплайн обучен и мы можем сделать предсказание:

Чтобы удобнее было работать с оценкой модели, существует класс MetricEvaluator:

Как видно, каждый пайплайн состоит из кубиков, каждый такой кубик наследуюется от AbstractModel или AbstractTransform. Рассмотрим пример:

Для того, чтобы сделать такой кубик, нам нужно отнаследоваться от AbstractModel или AbstractTransform, и реализовать в простом случае два методы: fit и predict.

Далее мы можем сделать новый пайплайн, используя наш новый кубик.

Pipe:

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

Storage:

Чтобы все это сохранять есть Storage (ABC.core.storage.Storage). Этот класс, сстоящий толькоа изи classmethod'ов, позволяет рабоать с файлами, как с файловой системой:

На самом деле мы можем сохранять сам объект AutoML

Что можно улучшить:

  • Более консистетно использовать Модели, Трансформы и Оптимизаторы. К примеру, все они принимают в метод fit объекты Data, а метод predict уже пандосовский датафрейм
  • Сделать сохранение данных в более комактный вид (numpy array, h5)
  • Сохранять нативными средствами, такими как joblib (Scikit) и save_model (CatBoost) и т.д.
  • ModelCrossValidation усредняет предсказания голосованием, что является не лучшей идеей и стоит усреднять веротности
  • Скорее всего достатно багов, так что нужно тестировать
  • Много еще всего

Примеры:

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