Редактирование: CatBoost

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

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

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

Пожалуйста, учтите, что любой ваш вклад в проект «Викиконспекты» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Викиконспекты:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Чтобы изменить эту страницу, пожалуйста, ответьте на приведённый ниже вопрос (подробнее):

Отменить | Справка по редактированию (в новом окне)

Шаблон, используемый на этой странице: