Automated Tool for Optimized Modeling (ATOM) - это пакет Python с открытым исходным кодом, предназначенный для помощи специалистам по обработке данных в быстром исследовании и экспериментировании контролируемых конвейеров машинного обучения.

Вступление

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

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

Установка

С легкостью установите новейшую версию ATOM с помощью pip:

$ pip install -U atom-ml

или через conda:

$ conda install -c conda-forge atom-ml

использование

Самый простой способ понять, что пакет может сделать для вас, - это рассмотреть пример. В этом примере мы:

  • Загрузите набор данных. Данные, которые мы собираемся использовать, представляют собой вариацию набора данных о погоде в Австралии от Kaggle. Его можно скачать здесь. Цель этого набора данных - предсказать, пойдет ли завтра дождь или нет, обучая двоичный классификатор на целевом столбце RainTomorrow.
  • Анализируйте распространение функции
  • Вписать недостающие значения
  • Кодировать категориальные столбцы
  • Подгонка логистической регрессии и модели случайного леса к данным
  • Сравните производительность обеих моделей

И все это мы сделаем менее чем за 15 строк кода! Давайте начнем.

Загрузка набора данных

Начинаем загрузку данных из csv файла.

import pandas as pd
X = pd.read_csv("weatherAUS.csv")
X.head()

ATOM имеет два основных класса, которые используются для инициализации конвейера:

  • ATOMClassifier: для задач бинарной или мультиклассовой классификации.
  • ATOMRegressor: для задач регрессии.

В этом примере мы используем ATOMClassifier. Здесь мы инициализируем экземпляр атома с загруженным набором данных.

from atom import ATOMClassifier
atom = ATOMClassifier(X, y="RainTomorrow", test_size=0.3, verbose=2)

Кроме того, мы указываем, что атом должен разделять набор данных в поезде и тестовом наборе с соотношением 70% -30%.

<< ================== ATOM ================== >>
Algorithm task: binary classification.

Dataset stats ====================== >>
Shape: (142193, 22)
Scaled: False
Missing values: 316559 (10.1%)
Categorical features: 5 (23.8%)
Duplicate samples: 45 (0.0%)
---------------------------------------
Train set size: 99536
Test set size: 42657
---------------------------------------
|    | dataset      | train       | test        |
|---:|:-------------|:------------|:------------|
|  0 | 110316 (3.5) | 77205 (3.5) | 33111 (3.5) |
|  1 | 31877 (1.0)  | 22331 (1.0) | 9546 (1.0)  |

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

Анализ набора данных

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

atom.plot_correlation()

Обратите внимание, что график автоматически игнорирует категориальные столбцы. Мы также можем исследовать распределение признаков с помощью теста Колмогорова – Смирнова.

atom.distribution("Temp3pm")

                 ks  p_value
weibull_max  0.0173   0.0053
beta         0.0178   0.0036
pearson3     0.0215   0.0002
gamma        0.0216   0.0002
lognorm      0.0217   0.0002
norm         0.0230   0.0001
invgauss     0.0649   0.0000
triang       0.0696   0.0000
uniform      0.1943   0.0000
expon        0.3376   0.0000
weibull_min  0.7675   0.0000

Давайте изобразим распределение функции и посмотрим, действительно ли она соответствует распределению weibull_max.

atom.plot_distribution("Temp3pm", distribution="weibull_max")

Очистка данных

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

atom.impute(strat_num="median", strat_cat="most_frequent")

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

Fitting Imputer...
Imputing missing values...
 --> Dropping 702 samples for containing less than 50% non-missing values.
 --> Imputing 351 missing values with median (12.0) in feature MinTemp.
 --> Imputing 169 missing values with median (22.6) in feature MaxTemp.
 --> Imputing 1285 missing values with median (0.0) in feature Rainfall.
 --> Imputing 60160 missing values with median (4.8) in feature Evaporation.
 --> Imputing 67131 missing values with median (8.5) in feature Sunshine.
 --> Imputing 8667 missing values with most_frequent (W) in feature WindGustDir.
 --> Imputing 8609 missing values with median (39.0) in feature WindGustSpeed.
 --> Imputing 9402 missing values with most_frequent (N) in feature WindDir9am.
 --> Imputing 3106 missing values with most_frequent (SE) in feature WindDir3pm.
 --> Imputing 2096 missing values with median (21.1) in feature Temp3pm.
 --> Imputing 1285 missing values with most_frequent (No) in feature RainToday.

Для кодирования категориальных столбцов мы используем метод кодирования атома. Для преобразования мы можем выбрать любой оценщик из пакета category-encoders.

atom.encode(strategy="LeaveOneOut")

Fitting Encoder...
Encoding categorical columns...
 --> LeaveOneOut-encoding feature Location. Contains 49 classes.
 --> LeaveOneOut-encoding feature WindGustDir. Contains 16 classes.
 --> LeaveOneOut-encoding feature WindDir9am. Contains 16 classes.
 --> LeaveOneOut-encoding feature WindDir3pm. Contains 16 classes.
 --> Ordinal-encoding feature RainToday. Contains 2 classes.

И точно так же все пропущенные значения рассчитываются, а категориальные признаки кодируются числовыми значениями. Доступ к данным в конвейере атома можно получить в любое время через атрибут dataset.

atom.dataset.head()

Модельное обучение

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

atom.run(models=["LR", "RF"], metric="f1")

ПРИМЕЧАНИЕ. Это минималистичный пример. Среди прочего, можно указать параметры модели, использовать несколько метрик, выполнить настройку гиперпараметров и обучить пользовательские модели. См. Документацию для более подробной информации.

Training ===================================== >>
Models: LR, RF
Metric: f1

Results for Logistic Regression:         
Fit ---------------------------------------------
Train evaluation --> f1: 0.4716
Test evaluation --> f1: 0.4658
Time elapsed: 0.201s
-------------------------------------------------
Total time: 0.201s

Results for Random Forest:         
Fit ---------------------------------------------
Train evaluation --> f1: 0.9999
Test evaluation --> f1: 0.5434
Time elapsed: 14.976s
-------------------------------------------------
Total time: 14.976s

Final results ========================= >>
Duration: 15.177s
------------------------------------------
Logistic Regression --> f1: 0.4658
Random Forest       --> f1: 0.5434

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

Оцените результаты

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

atom.RF.plot_feature_importance(show=10)

Фактическая оценка, которая использовалась для подбора данных (из пакета scikit-learn), доступна через атрибут estimator модели.

atom.RF.estimator

RandomForestClassifier(n_jobs=1)

Но настоящая мощь ATOM заключается в том, что мы можем легко сравнивать производительность всех моделей в его конвейере. Например, построив ROC-кривую.

atom.plot_roc()

Или оценивать свою работу по нескольким параметрам.

atom.evaluate()

Заключение

ATOM помогает специалисту по данным на этапе исследования проекта машинного обучения. Он способен анализировать данные, применять стандартные шаги по очистке данных и сравнивать производительность нескольких моделей всего в нескольких строках кода. Но это не все! ATOM также может помочь с другими распространенными задачами машинного обучения, такими как:

  • Обнаружение и удаление выбросов
  • Обработка несбалансированных наборов данных
  • Сравните модели, обученные на разных конвейерах
  • Выполните настройку гиперпараметров
  • Комбинируйте модели, используя ансамблевые техники
  • И многое другое…

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