Atom — это бесплатная платформа машинного обучения (ML) с открытым исходным кодом, разработанная командой Hugging Face, цель которой — сделать ML доступным для всех. Atom построен на основе PyTorch и предоставляет простой, но мощный API для обучения и развертывания моделей машинного обучения. В этом блоге мы углубимся в модуль Atom ML и рассмотрим его возможности на реальном примере.

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

Особенности и преимущества

Модуль ATOM ML призван сделать машинное обучение более доступным для разработчиков и специалистов по данным. Некоторые из его особенностей и преимуществ включают в себя:

  1. Упрощает задачи машинного обучения: модуль ATOM ML предоставляет простой и удобный в использовании API-интерфейс, который абстрагирует большую часть сложности задач машинного обучения. Это облегчает разработчикам и специалистам по данным создание и развертывание моделей машинного обучения.
  2. Поддерживает различные задачи машинного обучения: модуль поддерживает широкий спектр задач машинного обучения, включая классификацию, регрессию, тегирование последовательностей и многое другое.
  3. Предоставляет предварительно обученные модели: модуль поставляется с предварительно обученными моделями для различных задач, которые можно точно настроить для конкретных наборов данных для достижения высокой производительности.
  4. Поддерживает несколько фреймворков: модуль предназначен для работы с несколькими фреймворками машинного обучения, включая PyTorch и TensorFlow.
  5. Предлагает простое развертывание: модуль ATOM ML предоставляет простой способ развертывания моделей машинного обучения локально или в облаке.

Пример

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

Используемые данные являются вариацией Австралийского набора данных о погоде от Kaggle. Скачать его можно здесь. Цель этого набора данных — предсказать, будет ли завтра дождь, обучая двоичный классификатор цели RainTomorrow.

Загрузите данные

# Import packages
import pandas as pd
from atom import ATOMClassifier
# Load data
X = pd.read_csv("./datasets/weatherAUS.csv")

# Let's have a look
X.head()

В приведенном выше фрагменте кода мы импортировали необходимые пакеты, необходимые для загрузки и анализа данных. Мы загрузили набор данных о погоде в формате CSV, используя метод read_csv(), предоставленный библиотекой Pandas. Кроме того, мы использовали метод head(), который также является частью библиотеки Pandas, для отображения первых пяти строк набора данных, чтобы получить начальное представление о данных.

Запустить конвейер

# Call atom using only 5% of the complete dataset (for explanatory purposes)
atom = ATOMClassifier(X, "RainTomorrow", n_rows=0.05, n_jobs=8, verbose=2)

Приведенный выше код использует класс ATOMClassifier из модуля ATOM ML для инициализации новой модели классификации. Он принимает следующие аргументы:

  • X: входные данные, которые будут использоваться для обучения модели.
  • "RainTomorrow": имя целевого столбца во входных данных, которое представляет прогнозируемые метки или классы.
  • n_rows=0.05: количество строк из входных данных, которое нужно использовать для обучения и тестирования. В этом случае для демонстрационных целей будет использоваться только 5% полного набора данных.
  • n_jobs=8: количество ядер ЦП, которые будут использоваться в процессе обучения модели.
  • verbose=2: Уровень детализации для печати в процессе обучения. В этом случае подробный уровень 2 будет отображать индикатор выполнения в процессе обучения.

Обработка пропущенных значений

# Impute missing values
atom.impute(strat_num="median", strat_cat="drop", max_nan_rows=0.8)

Приведенный выше код демонстрирует использование метода impute() класса ATOMClassifier для обработки отсутствующих значений во входных данных. Мы передаем три аргумента в метод impute():

  • strat_num="median": Этот аргумент указывает стратегию вменения, используемую для числовых столбцов, содержащих пропущенные значения. В этом случае мы используем медианное значение для заполнения отсутствующих числовых значений.
  • strat_cat="drop": этот аргумент указывает стратегию вменения, используемую для столбцов категорий, содержащих пропущенные значения. В этом случае мы отбрасываем все строки, содержащие отсутствующие категориальные значения, поскольку в большинстве случаев нецелесообразно присваивать категориальные значения.
  • max_nan_rows=0.8: этот аргумент указывает максимальный процент строк, которые могут содержать пропущенные значения. Если в строке больше отсутствующих значений, чем это пороговое значение, она будет удалена из входных данных.

Кодировать категориальные признаки

# Encode the categorical features
atom.encode(strategy="Target", max_onehot=10, rare_to_value=0.04)

Приведенный выше код демонстрирует использование метода encode() класса ATOMClassifier для кодирования категориальных признаков во входных данных. Мы передаем три аргумента методу encode():

  • strategy="Target": этот аргумент указывает стратегию кодирования, используемую для категориальных столбцов. В этом случае мы используем стратегию целевого кодирования, которая заменяет каждое категориальное значение средним целевым значением соответствующей метки. Целевое кодирование часто может обеспечить лучшую производительность, чем однократное кодирование для категориальных переменных с высокой кардинальностью.
  • max_onehot=10: этот аргумент указывает максимальное количество уникальных категориальных значений, разрешенных до того, как столбец будет закодирован с использованием целевого кодирования вместо прямого кодирования. Это может помочь предотвратить слишком большое количество закодированных столбцов.
  • rare_to_value=0.04: Этот аргумент указывает порог для редких категорий. Категории, частота которых ниже этого порога, будут заменены новым значением. Это помогает уменьшить влияние редких категорий на модель.

Обучение модели

# Train an Extra-Trees and a Random Forest model
atom.run(models=["ET", "RF"], metric="f1", n_bootstrap=5)

В приведенном выше коде мы обучаем две модели машинного обучения, используя метод run() класса ATOMClassifier. Метод run() принимает следующие аргументы:

  • models=["ET", "RF"]: этот аргумент указывает модели машинного обучения для обучения. В этом случае мы тренируем модель Extra-Tree и модель Random Forest.
  • metric="f1": этот аргумент указывает метрику производительности, используемую для оценки модели. В этом случае мы используем оценку F1, которая является общей метрикой для задач бинарной классификации, которая уравновешивает точность и полноту.
  • n_bootstrap=5: этот аргумент указывает количество загруженных образцов, которые будут использоваться для оценки модели. Начальная загрузка — это метод повторной выборки, который может обеспечить более точную оценку производительности модели на невидимых данных.

Проанализируйте результаты

# Let's have a look at the final results
atom.results

Приведенный выше код использует атрибут results класса ATOMClassifier для отображения окончательных результатов процесса обучения и оценки модели. Атрибут results предоставляет сводку производительности каждой обученной модели на тестовых данных. Вывод включает следующие столбцы:

  • Модель: имя обученной модели.
  • Оценка F1: оценка модели F1 на тестовых данных.
  • Точность: точность модели на тестовых данных.
  • Отзыв: отзыв модели на тестовых данных.
  • AUC ROC: площадь под кривой рабочей характеристики приемника (ROC) модели на тестовых данных.

Визуализируйте результаты

# Visualize the bootstrap results
atom.plot_results(title="RF vs ET performance")

В приведенном выше коде используется метод plot_results() класса ATOMClassifier для визуализации производительности обученных моделей с использованием блочной диаграммы. Метод plot_results() принимает следующие аргументы:

  • title="RF vs ET performance": Этот аргумент определяет заголовок графика.

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

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