Преобразование различных категориальных переменных в фиктивные переменные

1

Я пытаюсь применить регрессию (с XGBRegressor) к следующему набору данных, содержащему 3 категориальных переменных.

X_data

severity -> values S1,S2,S3
priority -> values P1,P2,P3
cluster -> values a,b,c,d

y_data метки для прогнозирования - это числовые значения

Чтобы преобразовать все 3 столбца в категориальные, я использую:

pd.get_dummies(X_data['thecolumn'],drop_first =True)

После преобразования всех из них я заканчиваю на 7 новых столбцов (учитывая, что im всегда бросает первый столбец). При применении алгоритма можно ли неверно истолковать столбец из приоритета или кластера как третий столбец серьезности? Возможно, я не понимаю концепцию, но я не вижу, как эта ссылка хранится, и я боюсь, что я не делаю это правильно.

Теги:
machine-learning
regression

1 ответ

1
Лучший ответ

Нету. Столбец из приоритета или кластера не будет неверно истолкован как третий столбец серьезности.

Вот ответ на то, как сохраняется ссылка:

в pandas.get_dummies есть параметр, т.е. drop_first позволяет вам сохранить или удалить ссылку (сохранить k или k-1 манекенов из k категориальных уровней).

Обратите внимание, что drop_first = False означает, что ссылка не отбрасывается, а k манекенов создаются из k категориальных уровней! Вы устанавливаете drop_first = True, после чего после кодирования он будет отбрасывать ссылочный столбец.

Здесь ссылка на одну горячую кодировку.

Как и в вашем случае, severity имеет 3 категории S1, S2 и S3. После создания манекенов одна из этих категорий всегда будет 1 и другие 0.

для s1 это будет [1,0,0], s2 будет [0,1,0], а s3 будет [0,0,1]

Теперь, если вы поместите столбец для категории s1.

Значения будут [0,0], если степень S1

[1,0], если степень тяжести S2

[0,1], если степень тяжести равна S3.

Таким образом, здесь нет никакой потери информации, и ваша модель имеет меньше столбцов. Поэтому всегда рекомендуется сохранять параметр drop_first как True.

Изменить:

После применения манекенов вы получите столбцы:

severity_S1   severity_S2   severity_S3  

  1              0              0                  # when value is S1
  0              1              0                  # when value is S2  
  0              0              1                  # when value is S3

pandas.get_dummies() удаляет 1-й столбец после создания вышеуказанных ссылок. Таким образом, в ваших данных будет показано ниже:

 severity_S2   severity_S3

   0              0                  # when value is S1
   1              0                  # when value is S2  
   0              1                  # when value is S3

Для всех переменных здесь конечные данные будут выглядеть следующим образом: я использую короткие имена столбцов из-за проблемы с пространством:

s2  s3  p2  p3  B  C  D
0   0   1   0   1  0  0     # For row with S1, P2 and B
0   1   0   1   0  1  0     # For row with S3, P3 and C
1   0   0   0   0  0  1     # For row with S2, P1 and D
1   0   0   0   0  0  0     # For row with S2, P1 and A
  • 0
    И что произойдет, если я переупорядочу столбцы в кадре данных? например s2, p3, p2, s3. Будет ли p3 интерпретироваться как s3? Из вашего ответа я предполагаю, что столбцы должны быть в порядке, верно?
  • 0
    не за что. Модель позаботится об этом. Вам не нужно беспокоиться об этом. Вы можете хранить столбцы в любом порядке. В этом прелесть машинного обучения.
Показать ещё 4 комментария

Ещё вопросы

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