Изменения
CatBoost
,sta
----
== Режимы работы:== 1) Регрессия (mse - функция потерь) 2) Классификация (надо сделать вероятности, функция потерь - максимизируем вероятность того что все объекты в обучающей выборке классифицированы правильно, вероятность - это сигмоида над значением формулы) predict_proba - для вероятности (складывать нельзя)/ predict - просто рез (и тут можно складывать значени] нескольких моделей) 3) Мультиклассификация 4) Ранжирования - (объекты с попарной классификацией) .Максимизируем вероятность что как можно больше пар будут в правильном порядке отранжированоРанжирование - есть сет данных и есть таргет и есть группы (запросы, дс разбит по группам, нужно лучше отранжировать группу) из группы делаем набор пар и делаем как в пред пункте) Применение ( не важно абсолютное значение формулы)
----
== Оптимизируемые функции:== Поддерживает много оптимизируетмых функций. Для конкретной модели выбирается одна оптимизируемая функция.
----
== Метрики:== Поддерживает много метрик.
----
== Шаги обучения:==
1) Строим дерево 2) Считаем значение в листьях
----
== Построение дерева == Процесс построения происходит жадно. Выбираем первую вершину, далее выбираем лучшее дерево с одной вершиной. Далее смотрим скоры и выбираем лучшее дерево. Дерево строится по слоям. Гарантировано на каждом слое один и тот же сплит (условие, по которому мы делим) == Как выбрать лучшее дерево? ==
----
* Градиент функции ошибки - все производные по всем значениям функции Отметим, что существует идеальный шаг по градиенту, однако листьев в дереве меньше, чем документов в датасете. Поэтому мы можем пытаться приближать тот самый идеальный шаг. Чтобы найти лучший сплит, проверяем похожесть после одного шага алгоритма по градиенту - это скор.
----
* CatBoost поддерживает несколько режимов выборки данных:
1) Бутстрап Бернулли - выбираем документ с вероятностью ''p''. Регулируется параметром ''sample rate'' 2) Байесовский бутстрап - байесовское распределение. Регулируется параметром ''bagging temp'' Отметим, что бутстрап используется только для выбора структуры дерева, для подсчета значения в листьях используем всю выборку. Это сделано так как выбор структуры дерева происходит долго, нужно несколько раз пересчитывать значения, поэтому использовать всю выборку - слишком дорого. Однако значения в листьях с уже готовой структурой дерева считаются один раз, и для большей точности можно позволить использовать весь датасет.
----
== Бинаризация фичей == * Пробовать все - долго. Поэтому выбираем сетку заранее и ходим по ней. Есть несколько способов выбора: 1) Uniform. Равномерно разбиваем отрезок от минимума значения для данной фичи до максимума. 2) Медианная сетка. Задаем количество разбиений над множеством значений, далее идем по объектам в порядке сортировки и разбиваем на группы по k объектов, где k - количество объектов в одном слоте разбиения. 3) UniformAndQuantiles. Комбинация 1 и 2 пунктов. MaxSumLog - точно правильная динамика GreedyLogSUm - жадно не точно но быстрее
----
== Работа с категориальными фичами ==
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)