Запуск алгоритма градиентного бустинга XGBoost из библиотеки H2O
Рассмотрим, какие параметры определяют работу алгоритма градиентного бустинга H2OXGBoostEstimator и сам процесс обучения соответствующей модели. Исследование проведем на примере предсказания выживания пассажиров "Титаника":
import pandas as pd import numpy as np SEED = 0 df = pd.read_csv("https://s3.amazonaws.com/h2o-public-test-data/smalldata/gbm_test/titanic.csv") df = df.sample(frac=1).reset_index(drop=True) df.head()
Получим индексы выборок для перемешанного датафрейма:
tr_idx, val_idx = np.split(np.arange(df.shape[0]), [round(0.8*df.shape[0])])
Инициализируем H2O кластер, H2O фрейм и укажем тип целевой колонки, чтобы автоматически определился класс задачи (бинарная классификация):
import h2o h2o.init() from h2o import H2OFrame h2o_df = H2OFrame(df) h2o_df['survived'] = h2o_df['survived'].asfactor() x = h2o_df.columns y = 'survived'
Перед запуском рассмотрим основные параметры, определяющие работу класса H2OXGBoostEstimator:
1. ntrees - количество деревьев (по умолчанию 50);
2. max_depth - глубина, 0 - без ограничений (по умолчанию 6). Максимальная
глубина должна быть ограничена, если grow_policy=depthwise;
3. min_rows (min_child_weight) - минимальное количество наблюдений в листе (по умолчанию 1);
4. learn_rate (eta) - скорость обучения, задается из отрезка 0.0 до 1.0 (по умолчанию 0.3);
5. sample_rate (subsample) - доля наблюдений для тренировки каждого дерева, задается из отрезка от 0 до 1 (по умолчанию 1);
6. col_sample_rate (colsample_bylevel) - доля признаков, выбираемых для каждого сплита дерева (по умолчанию 1);
7. nthread - количество параллельных потоков (по умолчанию -1, что предполагает использование всех ядер);
8. distribution - задает тип распределения цели. Распространенными значениями для бинарной классификации являются 'bernoulli', многоклассовой - 'multinomial' (тип target-а факторный), для регрессии - 'gaussian', 'poisson' (тип target-а числовой). По умолчанию определяется автоматически если тип target-а числовой, то 'gaussian', если категориальный то при двух значениях 'bernoulli', иначе 'multinomial';
9. seed - инициализатор генератора случайных чисел;
10. max_leaves - максимальное количество листьев для дерева;
11. grow_policy - принцип добавления узлов к дереву. По умолчанию используется 'depthwise', который на каждой итерации разделяет узлы одного уровня, 'lossguide' не ставит в приоритет разбиение узлов одного уровня, а ориентируется на максимальное снижения потерь при каждом разбиении. Алгоритм требует, чтобы при 'depthwise' было ограничено max_depth, а при 'lossguide' max_leaves;
12. tree_method - влияет на количество бинов непрерывной переменной, которые рассматриваются при поиске оптимальной границы разбиения. По умолчанию алгоритм автоматически определяет, насколько точным делать выбор границы. Значение hist использует метод ускорения поиска бинов и для него важно задать их максимальное количество max_bins (по умочанию 256);
13. reg_lambda - коэффициент для L2 регуляризации (по умолчанию 1).
14. reg_alpha - коэффициент для L1 регуляризации (по умолчанию 0).
15. categorical_encoding - способ преобразования категориальных данных (например, one_hot_internal - по умолчанию, eigen, label_encoder);
С помощью флага verbose в методе train можно регулировать вывод в консоль информации об обучении (по умолчанию FALSE).
Подробнее о параметрах алгоритма можно прочитать здесь.
С некоторыми параметрами можно эмулировать режим, похожий на работу алгоритма LightGBM:
tree_method="hist"
grow_policy="lossguide"
с ним связаны параметры:
max_leaves и
max_bins
Так, можно запустить алгоритм в этом режиме и вывести валидационную auc:
from h2o.estimators import H2OXGBoostEstimator clf = H2OXGBoostEstimator(seed=SEED, ntrees=300, max_depth=3, tree_method="hist", max_leaves=10, grow_policy="lossguide") clf.train(x=x, y=y, training_frame=h2o_df[list(tr_idx),:], validation_frame=h2o_df[list(val_idx),:]) print(clf.auc(valid=True))
Не пропустите ничего интересного и подписывайтесь на страницы канала в других социальных сетях: