Изменения

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

CatBoost

31 байт убрано, 30 январь
Нет описания правки
Статья посвящена работе с библиотекой Библиотекой CatBoost {{---}} методу метод машинного обучения, основанному основанный на градиентном бустинге (англ. ''gradient boosting'').
=== Режимы работы ===
* Регрессия (англ. ''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.
== Бенчмарки ==
77
правок

Навигация