Изменения

Перейти к: навигация, поиск

CatBoost

2056 байт добавлено, 00:22, 4 апреля 2019
м
Источники информации
Статья посвящена работе с библиотекой Библиотека CatBoost {{---}} методу метод машинного обучения, основанному основанный на градиентном бустинге (англ. ''gradient boosting'').
Практически любой современный метод на основе градиентного бустинга работает с числамичисловыми признаками. Если у нас в наборе данных присутствуют не только числовые, но и категориальные признаки (англ. ''categorical features''), то необходимо переводить категориальные признаки в числовые. Это приводит к искажению их сути и потенциальному снижению точности работы модели.Именно поэтому было важно научить машину разработать алгоритм, который умеет работать не только с числамичисловыми признаками, но и с категориями категориальными напрямую, закономерности между которыми она этот алгоритм будет выявлять самостоятельно, без ручной «помощи».CatBoost разработан так{{---}} библиотека для градиентного бустинга, главным преимуществом которой является то, чтобы что она одинаково хорошо работать работает «из коробки» как с числовыми признаками (англ. ''features''), так и с категориальными (англ. ''categorical features'').
Документацию по CatBoost можно найти здесь: на сайте<ref>[https://tech.yandex.com/catboost/doc/dg/concepts/about-docpage/Документация CatBoost]</ref>.
----
Алгоритм работы следующий: для каждого документа имеется набор значений признаков, имеется дерево, в вершинах дерева {{---}} условия. Если условие выполнено, осуществляется переход в правого ребенка вершины, иначе в левого. Очень просто для конкретно ребенка Нужно пройти до листа по дереву в соответствии со значениями признаков для документа. На выходе каждому документу соответствует значение листа. Это и есть ответ.
=== Бустинг ===
Одно дерево {{Идея бустинг---}} хорошоподхода заключается в комбинации слабых (с невысокой обобщающей способностью) функций, которые строятся в ходе итеративного процесса, где на каждом шаге новая модель обучается с использованием данных об ошибках предыдущих. Результирующая функция представляет собой линейную комбинацию базовых, больше {{---}} лучшеслабых моделей. Идея состоит Более подробно можно посмотреть в томстатье про градиентный бустинг<ref>[https://en.wikipedia.org/wiki/Gradient_boosting |Gradient Boosting, Wikipedia]</ref>. Далее будет рассматриваться бустинг деревьев решений. Будем строить несколько деревьев, чтобы каждое следующее дерево обучалось на предыдущем, уменьшая добавление новых деревьев уменьшало ошибку. Итого при достаточно большом количестве деревьев мы сможем сильно уменьшить ошибку, однако не стоит забывать, что чем больше деревьев, тем дольше обучается модель и в какой-то момент прирост качества становится незначительным.
=== Градиентный бустинг ===
=== Режимы работы ===
* Регрессия (англ. ''regression'') ; * Классификация (англ. ''classification'');
Функция потерь (англ. ''loss function'') {{---}} максимизируем вероятность того, что все объекты в обучающей выборке классифицированы правильно, вероятность - это сигмоида над значением формулы.
Функция ```predict```_```proba``` ''predict_proba'' {{---}} на выходе получаем готовые вероятности. Нужно отметить, что складывать их уже нельзя. Функция ```''predict``` '' {{---}} выдает необработанный результат. Такой результат можно складывать, например, с результатами других моделей.* Мультиклассификация (англ. ''multiclass classification'');* Ранжирование (англ. ''ranking'').Объекты с попарной классификацией(??)
=== Метрики ===
Поддерживает множество [[Метрические_пространстваОценка_качества_в_задачах_классификации_и_регрессии|метрик]] <sup>[на 28.01.19 не создан]</sup> (англ. ''metrics''), таких как:* Регрессия: ''MAE, MAPE, RMSE, SMAPE'' etc.;* Классификация: ''Logloss , Precision, Recall, F1, CrossEntropy, BalancedAccuracy'' etc.;* Мультиклассификация: ''MultiClass, MultiClassOneVsAll, HammingLoss, F1'' etc.;
* Ранжирование: ''NDCG, PrecisionAt, RecallAt, PFound, PairLogit'' etc.
=== Шаги обучения ===
* Строим дерево;* Считаем значение в листьях.
=== Построение дерева ===
Процесс построения происходит жадно.
* Выбираем первую вершину;* Выбираем лучшее дерево с одной вершиной. ;
* Считаем метрику и по ней выбираем лучшее дерево.
Дерево строится по слоям. Гарантировано на каждом слое один и тот же сплит (условие, по которому мы делим).
=== Вычисление значений в листьях ===
''Score += random_strength * Rand (0, lenofgrad * q)''
''q'' {{- --}} множитель, уменьшающийся при увеличении итерации.
Таким образом, рандом уменьшается ближе к концу.
CatBoost поддерживает несколько режимов выборки данных
* Бутстрап (англ. ''bootstrap'') Бернулли {{---}} выбираем документ с вероятностью ''p''. Регулируется параметром ''sample_rate'';* Байесовский бутстрап {{---}} байесовское распределение. Регулируется параметром ''bagging_temp''.
Отметим, что бутстрап используется только для выбора структуры дерева, для подсчета значения в листьях используем всю выборку. Это сделано , так, как выбор структуры дерева происходит долго, нужно несколько раз пересчитывать значения, поэтому использовать всю выборку - слишком дорого. Однако значения в листьях с уже готовой структурой дерева считаются один раз, и для большей точности можно позволить использовать весь датасет.
=== Бинаризация признаков ===
Есть несколько способов выбора:
* Uniform. Равномерно разбиваем отрезок от минимума значения для данного признака до максимума.;* Медианная сетка. Задаем количество разбиений над множеством значений, далее идем по объектам в порядке сортировки и разбиваем на группы по k объектов, где k {{---}} количество объектов в одном слоте разбиения.;* UniformAndQuantiles. Комбинация 1 и 2 пунктов.;* MaxSumLog {{---}} в основе лежит динамика, работает долго.;* GreedyLogSum {{---}} аналог MaxSumLog, используется жадный алгоритм, поэтому работает не точно, однако быстрее чем MaxSumLog.
=== Работа с категориальными признаками ===
* LabelEncoding {{---}} на реальных примерах точность работы низкая, так как появляется отношения порядка между объектами.;
* One-hot encoding {{---}} дает неплохую точность, если различных значений признаков не много. Иначе один признак размножится на множество признаков и будет влиять на модель заведомо сильнее остальных признаков.
Лучше не делать препроцессинг самим, из-за проблем, описанных выше. В CatBoost можно задать параметр cat_features, передав туда индексы категориальных признаков. Также можно отрегулировать параметр ''one_hot_max_size'' {{---}} максимальное количество различных значений у категориального признака, чтобы он мог в последствии быть подвержен one-hot encoding.
== Подбор параметров ==
Ниже описаны гиперпараметры (англ. ''hyperparameters''), на которые стоит обратить внимание при использовании библиотеки.
* cat_features;* Overfitting detector;* Число итераций и learning rate;* L2_reg;* Random_srength;* Bagging_temp;* Глубина дерева (стоит попробовать 10 и 6).
== Полезная функциональность ==
* Snapshots;* Overfitting detector;* CV;* eval_metrics.
== Бенчмрки Бенчмарки ==
Сравнение библиотеки CatBoost с открытыми аналогами XGBoost, LightGBM и H20 на наборе публичных датасетов. Результаты - <ref>[https://catboost.yandex/#benchmark| Benchmarks]</ref>.
== Пример использования ==
''Больше примеров<ref>[https://tech.yandex.com/catboost/doc/dg/concepts/python-usages-examples-docpage Примеры ипользования CatBoost]</ref> можно найти на сайте библиотеки''.
 
==См. также==
*[[:Дерево_решений_и_случайный_леc|Дерево решений и случайный леc]]<sup>[на 28.01.19 не создан]</sup>
*[[:Бустинг,_AdaBoost|Бустинг, AdaBoost]]
 
==Примечания==
<references/>
'''Больше примеров можно найти на сайте библиотеки'''== Источники информации ==* [https://tech.yandex.com/catboost/doc/dg/concepts/python-usages-examplesabout-docpage/| Overview of CatBoost]* [https://en.wikipedia.org/wiki/Gradient_boosting| Gradient Boosting, WIkipedia][[Категория: Машинное обучение]][[Категория: Ансамбли]]
68
правок

Навигация