Конвертировать категорические признаки (Enum) в H2o в Boolean

1

в моем Pandas Dataframe у меня есть множество логических функций (True/False). Pandas правильно представляет их как bool если я делаю df.dtypes. Если я h2o.H2OFrame(df) свой кадр данных в h2o (h2o.H2OFrame(df)), логические функции представлены как enum. Таким образом, они интерпретируются как категориальные признаки с двумя категориями.

Есть ли способ изменить тип объектов из enum в bool? В Pandas я могу использовать df.astype('bool'), есть ли эквивалент в H2o?

Одной из идей было кодирование True/False их числовому представлению (1/0) до преобразования df в H2o-Frame. Но H2o теперь признает это как int64.

Спасибо в Advance за помощь!

Теги:
pandas
enums
boolean
h2o

1 ответ

1

Тип перечисления используется для категориальных переменных с двумя или более категориями. Таким образом, он включает в себя логическое значение. Т.е. в H2O нет отдельной категории bool, и вам здесь нечего исправить.

Кстати, если у вас много логических функций, потому что вы вручную сделали однострунную кодировку, не делайте этого. Вместо этого дайте H2O оригинальные (многоуровневые категориальные) данные, и он будет делать одноразовое кодирование, когда это необходимо, за кулисами. Это лучше, потому что для алгоритмов, таких как деревья принятия решений), они могут использовать многоуровневые категориальные данные напрямую, поэтому они будут более эффективными.

См. Http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/algo-params/categorical_encoding.html для некоторых альтернатив, которые вы можете попробовать. Недопустимая категория добавляется, когда эта колонка отсутствует в процессе производства.

(Но "Что происходит, когда вы пытаетесь предсказать на категорическом уровне, не замеченном во время обучения?" По адресу http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/deep-learning.html #faq, похоже, не описывает поведение, которое вы видите?)

Также см. Http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/algo-params/use_all_factor_levels.html (я не могу выработать это описание, если вы хотите, чтобы оно было истинным или ложным, так что попробуйте оба пути!)

UPDATE: установите use_all_factor_levels = F и у него будет только один входной нейрон (плюс один NA) для каждого логического ввода вместо двух. Если ваши категориальные входы - это почти все логические типы, я бы рекомендовал установить это. Если ваши категориальные входы в основном имеют довольно много уровней, я бы этого не сделал (потому что в целом это не будет иметь большого значения в количестве входных нейронов, но это может сделать сеть более легкой для обучения).

ПОЧЕМУ ПРОПУСТИТЬ (NA)?

Если у меня есть логический ввод, например "isBig", для него создаются 3 входных нейрона. Если вы посмотрите на varimp() вы увидите, что они названы:

isBig.1
isBig.0
isBig.missing(NA) 

Представьте, что вы сейчас ввели его в производство, и пользователь не дает значения (или дает NA или дает недопустимое значение, например "2") для входа isBig. Это когда активируется входной нейрон NA, чтобы показать, что мы не знаем, большой ли он или нет.

Честно говоря, я думаю, что это не может быть более полезным, чем стрельба как с.0, так и с.1 нейронами или никого из них. Но если вы используете use_all_factor_levels=F то это полезно. В противном случае все данные NA будут рассматриваться как "не большие", а не "могут быть большими или не большими".

  • 0
    спасибо за Ваш ответ. Мне было просто интересно, потому что моя модель глубокого обучения h2o (one-hot-encoding) генерирует фиктивные функции для bool-Features, и есть еще одна функция для добавленной категории «Missing», хотя у меня нет пропущенных значений оставил в моем фрейме данных. Я думал, что это происходит из-за неправильной интерпретации bool как enum. Почему модель DeepLearning добавляет функции для категории «Missing»?
  • 0
    @ dnks23 Смотрите правки в моем ответе.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню