Я пытаюсь применить регрессию (с 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 всегда бросает первый столбец). При применении алгоритма можно ли неверно истолковать столбец из приоритета или кластера как третий столбец серьезности? Возможно, я не понимаю концепцию, но я не вижу, как эта ссылка хранится, и я боюсь, что я не делаю это правильно.
Нету. Столбец из приоритета или кластера не будет неверно истолкован как третий столбец серьезности.
Вот ответ на то, как сохраняется ссылка:
в 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