Привет, хабровчане! Подготовили перевод статьи для будущих учеников базового курса Machine Learning.
В градиентном бустинге прогнозы делаются на основе ансамбля слабых обучающих алгоритмов. В отличие от случайного леса, который создает дерево решений для каждой выборки, в градиентном бустинге деревья создаются последовательно. Предыдущие деревья в модели не изменяются. Результаты предыдущего дерева используются для улучшения последующего. В этой статье мы подробнее познакомимся с библиотекой градиентного бустинга под названием CatBoost.
Источник
CatBoost — это библиотека градиентного бустинга, созданная Яндексом. Она использует небрежные (oblivious) деревья решений, чтобы вырастить сбалансированное дерево. Одни и те же функции используются для создания левых и правых разделений (split) на каждом уровне дерева.
Источник
По сравнению с классическими деревьями, небрежные деревья более эффективны при реализации на процессоре и просты в обучении.
Наиболее распространенными способами обработки категориальных данных в машинном обучении является one-hot кодирование и кодирование лейблов. CatBoost позволяет использовать категориальные признаки без необходимости их предварительно обрабатывать.
При использовании CatBoost мы не должны пользоваться one-hot кодированием, поскольку это влияет на скорость обучения и на качество прогнозов. Вместо этого мы просто задаем категориальные признаки с помощью параметра cat_features.
Есть несколько причин подумать об использовании CatBoost:
Давайте рассмотрим общие параметры в CatBoost:
CatBoost в своей реализации использует стандарт scikit-learn. Давайте посмотрим, как мы можем использовать его для регрессии.
Первый шаг, как всегда, импортировать регрессор и создать его экземпляр.
При обучении модели CatBoost также позволяет нам визуализировать его, установив plot=true:
Также мы можем выполнять кроссвалидацию и визуализировать процесс:
Аналогично вы можете выполнить grid search и визуализировать его:
Также мы можем использовать CatBoost для построения дерева. Вот график первого дерева. Как вы видите из дерева, листья разделяются при одном и том же условии, например, 297, значение > 0.5.
CatBoost дает нам словарь со всеми параметрами модели. Мы можем вывести их, как словарь.
В этой статье мы рассмотрели преимущества и ограничения CatBoost, а также ее основные параметры обучения. Затем мы реализовали простую регрессию с помощью scikit-learn. Надеюсь, вы получили достаточно информации об этой библиотеке, чтобы самостоятельно продолжить ее исследование.
В градиентном бустинге прогнозы делаются на основе ансамбля слабых обучающих алгоритмов. В отличие от случайного леса, который создает дерево решений для каждой выборки, в градиентном бустинге деревья создаются последовательно. Предыдущие деревья в модели не изменяются. Результаты предыдущего дерева используются для улучшения последующего. В этой статье мы подробнее познакомимся с библиотекой градиентного бустинга под названием CatBoost.
Источник
CatBoost — это библиотека градиентного бустинга, созданная Яндексом. Она использует небрежные (oblivious) деревья решений, чтобы вырастить сбалансированное дерево. Одни и те же функции используются для создания левых и правых разделений (split) на каждом уровне дерева.
Источник
По сравнению с классическими деревьями, небрежные деревья более эффективны при реализации на процессоре и просты в обучении.
Работа с категориальными признаками
Наиболее распространенными способами обработки категориальных данных в машинном обучении является one-hot кодирование и кодирование лейблов. CatBoost позволяет использовать категориальные признаки без необходимости их предварительно обрабатывать.
При использовании CatBoost мы не должны пользоваться one-hot кодированием, поскольку это влияет на скорость обучения и на качество прогнозов. Вместо этого мы просто задаем категориальные признаки с помощью параметра cat_features.
Преимущества использования CatBoost
Есть несколько причин подумать об использовании CatBoost:
- CatBoost позволяет проводить обучение на нескольких GPU.
- Библиотека позволяет получить отличные результаты с параметрами по умолчанию, что сокращает время, необходимое для настройки гиперпараметров.
- Обеспечивает повышенную точность за счет уменьшения переобучения.
- Возможность быстрого предсказания с применением модели CatBoost;
- Обученные модели CatBoost можно экспортировать в Core ML для вывода на устройстве (iOS).
- Умеет под капотом обрабатывать пропущенные значения.
- Может использоваться для регрессионных и классификационных задач.
Параметры обучения
Давайте рассмотрим общие параметры в CatBoost:
loss_function
илиobjective
– показатель, используемый для обучения. Есть регрессионные показатели, такие как среднеквадратичная ошибка для регрессии иlogloss
для классификации.eval_metric
– метрика, используемая для обнаружения переобучения.Iterations
– максимальное количество построенных деревьев, по умолчанию 1000. Альтернативные названияnum_boost_round
,n_estimators
иnum_trees
.learning_rate
илиeta
– скорость обучения, которая определяет насколько быстро или медленно модель будет учиться. Значение по умолчанию обычно равно 0.03.-
random_seed
илиrandom_state
– случайное зерно, используемое для обучения. -
l2_leaf_reg
илиreg_lambda
– коэффициент при члене регуляризации L2 функции потерь. Значение по умолчанию – 3.0. -
bootstrap_type
– определяет метод сэмплинга весов объектов, например это может быть Байес, Бернулли, многомерная случайная величина или Пуассон. depth
= глубина дерева.-
grow_policy
– определяет, как будет применяться жадный алгоритм поиска. Может стоять в значенииSymmetricTree
,Depthwise
илиLossguide
. По умолчаниюSymmetricTree
. ВSymmetricTree
дерево строится уровень за уровнем, пока не достигнет необходимой глубины. На каждом шаге листья с предыдущего дерева разделяются с тем же условием. При выборе параметраDepthwise
дерево строится шаг за шагом, пока не достигнет необходимой глубины. Листья разделяются с использованием условия, которое приводит к лучшему уменьшению потерь. ВLossguide
дерево строится по листьям до тех пор, пока не будет достигнуто заданное количество листьев. На каждом шаге разделяется нетерминальный лист с лучшим уменьшением потерь. -
min_data_in_leaf
илиmin_child_samples
– это минимальное количество обучающих сэмплов в листе. Этот параметр используется только с политиками ростаLossguide
иDepthwise
.
max_leaves
илиnum_leaves
– этот параметр используется только с политикойLossguide
и определяет количество листьев в дереве.
-
ignored_features
— указывает на признаки, которые нужно игнорировать в процессе обучения. -
nan_mode
– метод работы с пропущенными значениями. ПараметрыForbidden, Min
иMax
. При использованииForbidden
наличие пропущенных значений вызовет ошибку. При использовании параметраMin
пропущенные значения будут приняты за минимальные значения для данного признака. ВMax
пропущенные значения будут приняты как минимальные значения для данного признака.
-
leaf_estimation_backtracking
– тип бэктрекинга, использующийся при градиентном спуске. По умолчанию используетсяAnyImprovement
.AnyImprovement
уменьшает шаг спуска до того, как значение функции потерь будет меньшим, чем оно было на последней итерации.Armijo
уменьшает шаг спуска до тех пор, пока не будет выполнено условие Вольфе. -
boosting_type
— схема бустинга. Она может быть простой для классической схемы градиентного бустинга или упорядоченной, что обеспечит лучшее качество на небольших наборах данных. -
score_function
– тип оценки, используемой для выбора следующего разбиения при построении дерева.Cosine
используется по умолчанию. Другие доступные вариантыL2, NewtonL2
иNewtonCosine
.
early_stopping_rounds
— если стоитTrue
, устанавливает тип детектора переобучения вIter
и останавливает обучение, когда достигается оптимальное значение.-
classes_count
– количество классов для задач мультиклассификации.
-
task_type
– используете вы CPU или GPU. По умолчанию стоит CPU.
devices
— идентификаторы устройств GPU, которые будут использоваться для обучения.-
cat_features
— массив с категориальными столбцами. -
text_features
—используется для объявления текстовых столбцов в задачах классификации.
Пример с регрессией
CatBoost в своей реализации использует стандарт scikit-learn. Давайте посмотрим, как мы можем использовать его для регрессии.
Первый шаг, как всегда, импортировать регрессор и создать его экземпляр.
from catboost import CatBoostRegressor
cat = CatBoostRegressor()
При обучении модели CatBoost также позволяет нам визуализировать его, установив plot=true:
cat.fit(X_train,y_train,verbose=False, plot=True)
Также мы можем выполнять кроссвалидацию и визуализировать процесс:
from catboost import Pool, cv
params = {"iterations": 100,
"depth": 2,
"loss_function": "RMSE",
"verbose": False}
cv_dataset = Pool(data=X_train,
label=y_train)
scores = cv(cv_dataset,
params,
fold_count=2,
plot="True")
Аналогично вы можете выполнить grid search и визуализировать его:
grid = {'learning_rate': [0.03, 0.1],
'depth': [4, 6, 10],
'l2_leaf_reg': [1, 3, 5, 7, 9]}
grid_search_result = cat.grid_search(grid, X=X_train, y=y_train, plot=True)
Также мы можем использовать CatBoost для построения дерева. Вот график первого дерева. Как вы видите из дерева, листья разделяются при одном и том же условии, например, 297, значение > 0.5.
cat.plot_tree(tree_idx=0)
CatBoost дает нам словарь со всеми параметрами модели. Мы можем вывести их, как словарь.
for key,value in cat.get_all_params().items():
print(‘{}, {}’.format(key,value))
В этой статье мы рассмотрели преимущества и ограничения CatBoost, а также ее основные параметры обучения. Затем мы реализовали простую регрессию с помощью scikit-learn. Надеюсь, вы получили достаточно информации об этой библиотеке, чтобы самостоятельно продолжить ее исследование.
Узнать подробнее о курсе.