2015-12-14 3 views
13

При использовании XGBoost нам нужно преобразовать категориальные переменные в числовые.XGBoost Категориальные переменные: Dummification vs encoding

Будет ли какое-либо различие в метриках производительности/оценке между методами:

  1. dummifying своим категориальным переменными
  2. , кодирующим вашим категориальным переменным, например, из (А, б, в) (1,2,3)

ТАКЖЕ:

Будут ли какие-либо причин не идти с методом 2, используя, например, labelencoder?

ответ

27

xgboost имеет дело только с числовыми столбцами.

, если у вас есть возможность [a,b,b,c], которая описывает категориальную переменную (т.е. нет числовых отношений)

Использование LabelEncoder вы просто так:

array([0, 1, 1, 2]) 

Xgboostбудет неправильно интерпретировать эту функцию, имея числовые отношения! Это просто отображает каждую строку ('a','b','c') в целое число, не более того.

Правильный путь

Использование OneHotEncoder вы в конечном итоге получить к этому:

array([[ 1., 0., 0.], 
     [ 0., 1., 0.], 
     [ 0., 1., 0.], 
     [ 0., 0., 1.]]) 

Это правильное представление категорического переменной для xgboost или любого другого инструмента машинного обучения.

Pandas get_dummies - хороший инструмент для создания фиктивных переменных (, который проще, на мой взгляд). Метод

# 2 в выше вопрос не будет представлять данные правильно

+3

Не будет ли это сделать функции с большим количеством категорий кажутся более важными, чем те, с меньше? – eleanora

+0

Как 'Xgboost' знает, как обрабатывать' array ([1., 0., ...]) 'как категориальный, а не числовой? –

+0

@ThiagoBalbo Проще говоря: это не так. Вы просто замените исходную переменную/функцию/столбец на 3 двоичные переменные/функции/столбцы. – masu

 Смежные вопросы

  • Нет связанных вопросов^_^