Найти в Дзене
Властелин машин

Быстрый запуск нейросети с библиотекой H2O

Рассмотрим, какие минимальные знания об H2O надо иметь, чтобы использовать ее алгоритмы, а основные действия (подготовку данных и их оценку) производить привычными средствами NumPy, Pandas и Scikit-learn. В этом случае применение H2O будет включать:

  • соединение с h2o кластером (функция init);
  • создание h2o фрейма (легко делается из pandas датафрейма в конструкторе H2OFrame) и преобразование категориальных колонок методом asfactor (в том числе таргета для классификации);
  • создание экземпляра класса оценщика (например, H2ODeepLearningEstimator);
  • вызов метода train на h2o фрейме с именами колонок: зависимой (y) и независимых переменных (x);
  • вызов predict для получения прогнозов и его преобразование в pandas датафрейм методом as_data_frame.

Создадим демонстрационный датафрейм:

Мешаем данные и создаем индексы для тренировочной и валидационной выборок (H2O требует, чтобы индексы шли по возрастанию):

-2

Создаем h2o фрейм и преобразовываем категориальные колонки:

-3

Cоздаем экземпляр класса H2ODeepLearningEstimator:

-4

Основные параметры конструктора класса:

distribution - задает тип распределения цели. Распространенными значениями для бинарной классификации являются bernoulli, многоклассовой - multinomial (тип target-а факторный), для регрессии - gaussian, poisson (тип target-а числовой);

balance_classes - флаг устранения дисбаланса классов;

activation - функция активации (Tanh, Tanh with dropout, Rectifier, Rectifier with dropout, Maxout, Maxout with dropout);

hidden - список размеров скрытых слоев;

epochs - количество полных итераций по датасету (по умолчанию 10);

seed - инициализатор генератора случайных чисел;

standardize - надо ли стандартизировать признаки (по умолчанию True);

categorical_encoding - способ преобразования категориальных данных (например, one_hot_internal - по умолчанию, eigen, label_encoder);

missing_values_handling - как обрабатывать пропуски (по умолчанию заполняются средним). Еще можно пропускать;

adaptive_rate - флаг использования адаптивной скорости обучения (по умолчанию True);

rate - задать скорость обучения, когда adaptive_rate является False;

loss - функция потерь, по умолчанию - Automatic. Этот параметр считается автоматически, исходя из выбранного distribution. Вручную для классификации можно установить - Absolute, Quadratic, Huber, CrossEntropy, для регрессии Absolute, Quadratic, Huber;

shuffle_training_data - флаг перемешивания данных (по умолчанию не установлен);

sparse - использовать ли механизм работы с разреженными данными (по умолчанию отключено). Полезно, если много нулей в данных;

quiet_mode - отображать ли меньше логов (по умолчанию отключено);

verbose - писать ли историю оценок в консоль (по умолчанию нет);

регуляризация:

input_dropout_ratio - доля прореживания во входном слое. По умолчанию - 0, иначе предлагается использовать 0.1 или 0.2;

hidden_dropout_ratios - список долей отключений в каждом скрытом слое (применимо, если в качестве функций активации указаны TanhWithDropout, RectifierWithDropout или MaxoutWithDropout). По умолчанию для каждого - 0.5;

l1 - L1 регуляризация на веса нейронов (по умолчанию 0, обычно проверяют значения в области 0,0001);

l2 - L2 регуляризация на веса нейронов (по умолчанию 0, обычно проверяют значения в области 0,0001);

reproducible - флаг воспроизводимости результатов. Активизирует менее эффективный однопоточный режим обучения;

seed - инициализатор случайных чисел. Для воспроизводимости используется вместе с reproducible=True.

Подробнее о параметрах можете прочитать в официальной документации.

Для обучения вызовите метод train с именами колонок для зависимой и независимых переменных и получите большую сводную статистику с метриками (приведена только часть):

-5

Для вывода метрик привычным способом (через методы sklearn) преобразуйте предсказания в pandas датафрейм с методом as_data_frame:

-6
-7