Изменения

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

CatBoost

204 байта убрано, 00:14, 8 ноября 2018
Нет описания правки
Статья посвящена работе с библиотекой CatBoost
 
 
----
 
== Режимы работы ==
1) * Регрессия (mse - функция потерь) 2) * Классификация (надо сделать вероятности, функция потерь - максимизируем вероятность того что все объекты в обучающей выборке классифицированы правильно, вероятность - это сигмоида над значением формулы) predict_proba - для вероятности (складывать нельзя)/ predict - просто рез (и тут можно складывать значени] нескольких моделей) 3) * Мультиклассификация 4) * Ранжирования - (объекты с попарной классификацией). 
----
 
 
== Оптимизируемые функции ==
----
 
 
== Метрики ==
Поддерживает много метрик.
 
----
 
== Шаги обучения ==
  1) * Строим дерево 2) * Считаем значение в листьях
----
 
 
== Построение дерева ==
 
Процесс построения происходит жадно. Выбираем первую вершину, далее выбираем лучшее дерево с одной вершиной. Далее смотрим скоры и выбираем лучшее дерево.
----
 
 
 
== Как работает градиентный бустинг? ==
* CatBoost поддерживает несколько режимов выборки данных:
1) * Бутстрап Бернулли - выбираем документ с вероятностью ''p''. Регулируется параметром ''sample rate'' 2) * Байесовский бутстрап - байесовское распределение. Регулируется параметром ''bagging temp''
Отметим, что бутстрап используется только для выбора структуры дерева, для подсчета значения в листьях используем всю выборку. Это сделано так как выбор структуры дерева происходит долго, нужно несколько раз пересчитывать значения, поэтому использовать всю выборку - слишком дорого. Однако значения в листьях с уже готовой структурой дерева считаются один раз, и для большей точности можно позволить использовать весь датасет.
 
----
== Рандомизация скора ==
 
Есть рандомизация скора. ''Score += random_strength * Rand (0, lenofgrad * q)'', где ''q'' - множитель, уменьшающийся при увеличении итерации. Таким образом, рандом уменьшается ближе к концу.рандома
----
 
== Бинаризация фичей ==
* Пробовать все - долго. Поэтому выбираем сетку заранее и ходим по ней. Есть несколько способов выбора:  1) Uniform. Равномерно разбиваем отрезок от минимума значения для данной фичи до максимума. 2) Медианная сетка. Задаем количество разбиений над множеством значений, далее идем по объектам в порядке сортировки и разбиваем на группы по k объектов, где k - количество объектов в одном слоте разбиения. 3) UniformAndQuantiles. Комбинация 1 и 2 пунктов.  MaxSumLog - точно правильная динамика GreedyLogSUm - жадно не точно но быстрее
* Uniform. Равномерно разбиваем отрезок от минимума значения для данной фичи до максимума.
* Медианная сетка. Задаем количество разбиений над множеством значений, далее идем по объектам в порядке сортировки и разбиваем на группы по k объектов, где k - количество объектов в одном слоте разбиения.
* UniformAndQuantiles. Комбинация 1 и 2 пунктов.
----
== Работа с категориальными фичами ==
  1) * LabelEncoding - работает плохо, так как появляется отношения порядка между объектами. 2) * One-hot encoding - работает, если различных значений фичи не много. Иначе одна фича размножится на множество фичей и влиять на модель заведомо сильнее остальных фичей.
Лучше не делать препроцессинг самим, из-за проблем, описанных выше. В CatBoost можно задать параметр cat_features, передав туда индексы категориальных фичей. Также можно отрегулировать параметр ''one_hot_max_size'' - максимальное количество различных значений у категориальной фичи, чтобы она могла в последствии быть подвержена one-hot encoding.
 
 
 
 
 
----
 
 
== Подбор параметров ==
 * Ниже описаны гиперпараметры, на который стоит обратить внимание при использовании библиотеки. 1) * cat_features 2) * Overfitting detector 3) * Число итераций и learning rate 4) * L2_reg 5) * Random_srength 6) * Bagging_temp 7) * Глубина дерева (стоит попробовать 10 и 6)
Анонимный участник

Навигация