CatBoost — различия между версиями

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

Версия 00:10, 8 ноября 2018

Статья посвящена работе с библиотекой CatBoost




Режимы работы

1) Регрессия  (mse - функция потерь)
2) Классификация (надо сделать вероятности, функция потерь - максимизируем вероятность того что все объекты в обучающей выборке классифицированы правильно, вероятность - это сигмоида над значением формулы) predict_proba - для вероятности (складывать нельзя)/ predict - просто рез (и тут можно складывать значени] нескольких моделей)
3) Мультиклассификация 
4) Ранжирования - (объекты с попарной классификацией).




Оптимизируемые функции

Поддерживает много оптимизируетмых функций. Для конкретной модели выбирается одна оптимизируемая функция.


Метрики

Поддерживает много метрик.




Шаги обучения

1) Строим дерево
2) Считаем значение в листьях


Построение дерева

Процесс построения происходит жадно. Выбираем первую вершину, далее выбираем лучшее дерево с одной вершиной. Далее смотрим скоры и выбираем лучшее дерево.
Дерево строится по слоям. Гарантировано на каждом слое один и тот же сплит (условие, по которому мы делим)


Как выбрать лучшее дерево?

Смотрим на сколько меняется функция ошибки, выбираем такое дерево, чтобы оно как можно лучше приближало вектор градиентов.



Как работает градиентный бустинг?

  • В основе CatBoost лежит грдиентный бустинг.
  • Градиент функции ошибки - все производные по всем значениям функции
Отметим, что существует идеальный шаг по градиенту, однако листьев в дереве меньше, чем документов в датасете.
Поэтому мы можем пытаться приближать тот самый идеальный шаг.
Чтобы найти лучший сплит, проверяем похожесть после одного шага алгоритма по градиенту - это скор.



Работа с датасетом

  • 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 - жадно не точно но быстрее



Работа с категориальными фичами

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)