Как я могу соответствовать категориальным типам данных для классификации случайных лесов?

11

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

'Вход содержит NaN, бесконечность или значение, слишком большое для dtype (' float32 ')'.

Может быть проблема в объектных типах данных. Как я могу соответствовать категориальным данным без преобразования для применения RF?

Вот мой код

Скриншот

Скриншот

Скриншот

IS2057
источник
Вам не нужно использовать one_hot, если вы используете древовидную модель, потому что она не измеряет расстояние, как другие методы.
Июнь Ян
1
@JunYang, scikit-learn в настоящее время требует кодирования категорий.
Бен Рейнигер

Ответы:

11

Вам необходимо преобразовать категориальные признаки в числовые атрибуты. Распространенным подходом является использование однократного кодирования, но это определенно не единственный вариант. Если у вас есть переменная с большим количеством категориальных уровней, вы должны рассмотреть возможность объединения уровней или использования трюка хеширования. Sklearn оснащен несколькими подходами (см. Раздел «см. Также»): один горячий кодер и трюк хеширования

Если вы не заинтересованы в sklearn, реализация случайного леса h2o напрямую обрабатывает категориальные функции.

Дэвид Маркс
источник
0

Насколько я знаю, есть некоторые проблемы для получения этих типов ошибок. Во-первых, в моих наборах данных есть дополнительное пространство, поэтому при отображении ошибки «Вход содержит значение NAN; Во-вторых, python не может работать с любыми типами объектов. Нам нужно преобразовать значение этого объекта в числовое значение. Для преобразования объекта в число существует процесс кодирования двух типов: кодировщик меток и один горячий кодировщик. Где кодировщик меток кодирует значение объекта в диапазоне от 0 до n_classes-1, а один горячий кодировщик кодирует значение в диапазоне от 0 до 1. В моей работе перед тем, как подгонять свои данные для любого типа метода классификации, я использую кодировщик этикеток для преобразования значения, а перед преобразованием я гарантирую, что в моем наборе данных нет пробелов.

IS2057
источник