Модель H2O неверно трактует поле как числовое, когда тренируется с типом enum? - PullRequest
0 голосов
/ 15 мая 2019

Возникла проблема, когда модель DRO H2O рассматривает тип поля как int, когда тип поля, который был установлен при обучении модели, был enum.

При использовании API дерева H2O для изучения некоторых отдельных деревьев в обученной модели DRF, я вижу, что для некоторых типов, которые были явно установлены как enum, когда модельбыл обучен (т. е. кадр данных pandas был преобразован в H2OFrame, где для определенных полей был задан определенный тип с параметром карты column_types), они выглядят как int s при выполнении чего-то вроде

root_node.features
> observe that the feature being examined for this node is one of the features set to be categorical enum by the H2OFrame that the model was trained on
tree.root_node.features
> some_categorical
tree.root_node.levels
> []
root_node.threshold
> some number

Более компактно

print(tree.root_node)

Node ID 0 
Left child node ID = 1 Right child node ID = 2 
Splits on column some_categorical 
Split threshold < 2562.5 to the left node, >= 2562.5 to the right node 
NA values go to the LEFT

, но для других узлов (для той же модели) мы (правильно) видим

tree.root_node.features
> some_other_categorical
tree.root_node.levels
> ['cat1', ..., 'catn']
root_node.threshold
> na

Первоначально я думал, что это просто выглядит как int, потому что категориальные значения внутренне представлены в H2O

enum или Enum: Оставьте набор данных как есть, внутренне отобразить строки в целые числа , и используйте эти целые числа для разделения - либо через порядковый номер, когда nbins_cats слишком мало, чтобы разрешить все уровни, либо через наборы битов, которые делают идеальное групповое разделение.Каждая категория является отдельной категорией;его имя (или номер) не имеет значения.Например, после сопоставления строк с целыми числами для Enum можно разделить {0, 1, 2, 3, 4, 5} на {0, 4, 5} и {1, 2, 3}.

, но, глядя на тот факт, что информационный вывод показывает превышение порога и отсутствие уровней для определения направления влево-вправо, вы можете видеть, что здесь есть другая проблема.

Изучая карту column_types, используемую при преобразовании панд в H2OFrame, и печатая типы, а также перед обучением модели, мы видим, что соответствующие типы устанавливаются как enum, поэтому этот выводбыть увиденным сейчас сбивает с толку.Кто-нибудь знает какие-либо другие шаги по отладке, которые могут быть сделаны здесь или что может происходить?

1 Ответ

0 голосов
/ 20 мая 2019

Это не ошибка в алгоритме (разбиения по-прежнему корректны), но в способе H2O-3 представлять разбиения в визуализаторе дерева MOJO и API дерева.Я создал тикет JIRA, который можно отслеживать здесь (или добавить к нему), что обеспечит меньшую путаницу разбиений MOJO Tree Visualizer и API API (т. Е. Использование числовых разбиений или отображение списка категориальных).уровни вместо обоих).Числовые разбиения, которые вы видите, соответствуют нашему внутреннему методу для разделения по категориям.

...