Изменения

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

CatBoost

103 байта добавлено, 00:22, 4 апреля 2019
м
Источники информации
Статья посвящена работе с библиотекой Библиотека CatBoost {{---}} методу метод машинного обучения, основанному основанный на градиентном бустинге (англ. ''gradient boosting'').
CatBoost {{---}} библиотека для градиентного бустинга, главным преимуществом которой является то, что она одинаково хорошо работает «из коробки» как с числовыми признаками, так и с категориальными.
Документацию по CatBoost можно найти на сайте<ref>[https://tech.yandex.com/catboost/doc/dg/concepts/about-docpage/| Документация CatBoost]</ref>.
----
=== Режимы работы ===
* Регрессия (англ. ''regression'') ; * Классификация (англ. ''classification'');
Функция потерь (англ. ''loss function'') {{---}} максимизируем вероятность того, что все объекты в обучающей выборке классифицированы правильно, вероятность - это сигмоида над значением формулы.
Функция ''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.
=== Шаги обучения ===
* Строим дерево;* Считаем значение в листьях.
=== Построение дерева ===
Процесс построения происходит жадно.
* Выбираем первую вершину;* Выбираем лучшее дерево с одной вершиной. ;
* Считаем метрику и по ней выбираем лучшее дерево.
Дерево строится по слоям. Гарантировано на каждом слое один и тот же сплит (условие, по которому мы делим).
=== Вычисление значений в листьях ===
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]]
* [https://en.wikipedia.org/wiki/Gradient_boosting| Gradient Boosting, WIkipedia]
[[Категория: Машинное обучение]]
[[Категория: Ансамбли]]
68
правок

Навигация