Нет необходимости явно обрабатывать отсутствующие значения

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

Существуют различные методы явной обработки отсутствующих значений в данных. В одной из моих предыдущих статей мы обсудили 7 методов обработки пропущенных значений в конвейере предварительной обработки:



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

  • Классификатор / регрессор с усилением градиента на основе гистограммы

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

Повышение градиента на основе гистограммы:

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

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

Библиотека Scikit-learn предлагает экспериментальную реализацию повышения градиента, которая поддерживает технику гистограммы. Он предлагает классы HistGradientBoostingClassifier и HistGradientBoostingRegressor, реализующие задачи классификации и регрессии соответственно.

Согласно документации scikit-learn:

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

Алгоритмы повышения градиента требуют больших вычислительных ресурсов, поскольку каждое из деревьев обучается и объединяется последовательно, поэтому не может обучаться параллельно. Реализация Gradient Boosting на основе гистограммы сравнительно намного быстрее, чем GradientBoostingClassifier для больших наборов данных.

Выполнение:

Источник набора данных: я буду использовать титанический набор данных с открытым исходным кодом, загруженный с openml.org, чтобы продемонстрировать реализацию. Набор данных публично и свободно доступен в соответствии с юридическими условиями Creative Commons.

Пакет Scikit-learn предлагает класс HistGradientBoostingClassifier, реализующий классификатор Gradient Boosting на основе гистограммы. Титанический набор данных содержит много пропущенных значений, которые не требуют вменения или обработки в явном виде.

Титанический набор данных содержит 891 экземпляр, а функции: «Возраст», «Посадка» имеют пропущенные значения.

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

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

Теперь давайте реализуем алгоритм HistGradientBoostingClassifier.

Scikit-learn также предлагает регрессионную реализацию повышения градиента на основе гистограммы с классом HistGradientBoostingRegressor..

Другие алгоритмы, изначально поддерживающие пропущенные значения:

Алгоритмы k-NN и Random Forest также могут поддерживать пропущенные значения. алгоритм k-NN рассматривает пропущенные значения, беря большинство K ближайших значений. К сожалению, реализация k-NN и RandomForest в библиотеке scikit-learn не поддерживает наличие пропущенных значений.

Заключение:

В этой статье мы обсудили алгоритмы повышения градиента на основе гистограмм, вдохновленные LightGBM и намного быстрее, чем GradientBoostingClassifier для больших наборов данных.

В моей предыдущей статье мы обсудили 7 методов явной обработки пропущенных значений:



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



Использованная литература:

[1] Документация Scikit-learn: https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.HistGradientBoostingClassifier.html

[2] Набор данных Titanic (Общедоступно): https://www.openml.org/d/40945

Спасибо за чтение