Градиентный бустинг с библиотекой H2O
Рассмотрим, какие параметры имеет класс H2OGradientBoostingEstimator для решения задач машинного обучения, как обучать и тестировать модель. В качестве примера загрузим данные о заболеваемости раком через метод load_breast_cancer из sklearn (подробнее о получении датасетов с использованием библиотеки):
from sklearn.datasets import load_breast_cancer import pandas as pd import numpy as np SEED=0 np.random.seed(SEED) df = load_breast_cancer(as_frame=True)['frame'] df.sample(frac=1) df.head()
Разделим выборки, инициализируем h2o кластер (подробнее здесь), создадим фрейм и укажем колонки:
tr_idx, val_idx = np.split(range(df.shape[0]), [int(0.8*df.shape[0])])
import h2o h2o.init() from h2o import H2OFrame h2o_df = H2OFrame(df) target_col = 'target' features = h2o_df.columns features.remove(target_col) h2o_df[target_col] = h2o_df[target_col].asfactor()
Ниже привожу основные параметры модели, которые понадобятся для обучения:
- ntrees - количество деревьев (по умолчанию 50);
- max_depth - максимальная глубина (5);
- min_rows - минимальное количество наблюдений в листе (10)
- min_split_improvement - минимальное улучшение для разделения узла (1e-05);
- learn_rate - скорость обучения (0.1);
- learn_rate_annealing - множитель скорости обучения с каждой итерацией (1)
- sample_rate - доля наблюдений для обучения каждого дерева (1);
- col_sample_rate - доля признаков, участвующих при сплите дерева(1);
- seed - инициализатор счетчика случайных чисел;
- balance_classes - надо ли сбалансировать классы перед обучением (False);
- model_id - имя модели (идентификатор, по которому модель можно найти в H2O Flow);
- build_tree_one_node - флаг запуска вычислений только на одном узле (False). При малых датасетах лучше выставить, чтобы не задействовать ресурсы кластера и тратить время на взаимодействие между нодами;
- distribution - задает тип задачи и распределение target-а. Предпочтительными значениями для бинарной классификации являются bernoulli, многоклассовой - multinomial (тип target-а факторный), для регрессии - gaussian, poisson (тип target-а числовой);
Для обучения создаете класс с желаемыми параметрами и вызываете метод train, которому передайте список имен признаков, целевой колонки, тренировочный фрейм и другие параметры (я передам еще валидационный фрейм):
from h2o.estimators import H2OGradientBoostingEstimator gbm = H2OGradientBoostingEstimator(distribution="bernoulli", ntrees=10, max_depth=3, min_rows=2, learn_rate=0.2, seed=SEED) _ = gbm.train(x=features, y=target_col, training_frame=h2o_df[list(tr_idx),:], validation_frame=h2o_df[list(val_idx),:])
Значения набора валидационных метрик можно получить методом model_performance с параметром valid=True или, передав ему валидационный фрейм в параметре test_data:
gbm.model_performance(valid=True) # gbm.model_performance(test_data=h2o_df[list(val_idx),:])