Я представил проблемы с категориальными данными и машинным обучением с целью продемонстрировать catboost. После обновления моей ОС, переустановки anaconda, обновления pip я наконец установил catboost. Теперь мой старый ноутбук - часть подарка.

Что такое кэтбуст

Машина не понимает категориальных данных. Поэтому необходимо преобразовать такие категории, как голландский, немецкий, бельгийский, в числовые значения. Простое присвоение им разных уровней (0,1,2) не работает. Если вы делаете это с номинальными переменными, вы вводите ранжирование. Хотя это имеет смысл для размеров футболок, вы не можете сделать это с национальностями, цветами и т. Д. Распространенным решением является преобразование всех номинальных значений в двоичные фиктивные переменные (горячая кодировка). Но это может быстро взорвать ваш набор функций.

Как работает catboost?

Catboost вычисляет для каждой категории (например, голландский, немецкий, бельгийский) номинальной переменной (например, национальности) значение (статистика на основе цели). Это делается в несколько этапов:

  1. Начнем с одного категориального признака (например, национальности). Это называется x.
  2. В одной случайно выбранной строке (k- -я строка в наборе обучающих данных) мы меняем один случайный уровень этой категориальной характеристики (i- -й уровень x) на число (например, голландский на 5)
  3. Это число (в нашем примере 5) обычно основано на целевой переменной (той, которую мы хотим спрогнозировать) в зависимости от уровня категории. Другими словами, целевое число основывается на переменной ожидаемого результата.
  4. Атрибут разделения используется для создания двух наборов обучающих данных: один набор содержит все категории (например, немецкие, французские, индийские и т. Д.), Которые будут иметь большую целевую переменную, чем та, которая вычислена на шаге 3, а другой набор с меньшими целевые переменные.

Это шаги. Число на шаге 3 - это не просто случайная величина, а основанная на целевой статистике (TBS). Это можно вычислить четырьмя различными способами: жадный, удерживающий, исключенный и упорядоченный. Catboost использует последний (заказанный TBS)

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

При выполнении заказного TBS предполагается, что то, что происходит в прошлом, влияет на будущее. Это имеет смысл для анализа кликов или просмотренных фильмов. Для категориальной переменной, такой как национальность, это предположение немного странно, но для расчета TBS давайте просто оставим это и введем «искусственное время». В catboost последовательность строк, предшествующая основной строке, рандомизируется и используется для вычисления целевой статистики. Это делается несколько раз.

Сдвиг прогноза и упорядоченное повышение

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

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

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

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

Алгоритм, разработанный Яндексом и используемый в catboost, пытается избежать сдвига остатков. Остатки - это разница между наблюдаемыми и прогнозируемыми значениями. На левом рисунке это будет разница между зеленой линией и красными точками.

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

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

Чтобы получить отличное руководство о том, как реализовать catboost (в сравнении с другими алгоритмами), ознакомьтесь с этим сообщением Альвиры Свалин в На пути к науке о данных