#python #pandas #one-hot-encoding
#python #pandas #one-hot-encoding
Вопрос:
У меня есть мой фрейм данных, который изначально выглядел так:
item_id title user_id gender .....
0 1 Toy Story (1995) 308 M
1 4 Get Shorty (1995) 308 M
2 5 Copycat (1995) 308 M
Затем я запустил регрессию со смешанными эффектами, которая работала нормально:
import statsmodels.api as sm
import statsmodels.formula.api as smf
md = smf.mixedlm("rating ~ C(gender) C(genre) C(gender)*C(genre)", data, groups=data["user_id"])
mdf=md.fit()
print(mdf.summary())
Однако впоследствии я выполнил одно горячее кодирование для переменной gender, и фрейм данных стал таким:
item_id title user_id gender_M gender_F .....
0 1 Toy Story (1995) 308 1 0
1 4 Get Shorty (1995) 308 1 0
2 5 Copycat (1995) 308 1 0
Было бы правильно запустить модель таким образом (изменение пола с помощью gender_M и gender_F)? Это то же самое? Или есть лучший способ?
md = smf.mixedlm("rating ~ gender_M gender_F C(genre) C(gender)*C(genre)", data, groups=data["user_id"])
mdf=md.fit()
print(mdf.summary())
Комментарии:
1. Для обычных наименьших квадратов (
smf.ols
) категориальные функции заменяются фиктивными переменными. Итак, я бы сказал, что за кулисамиmixedlm
делает то же самое. Самостоятельное создание фиктивных переменных может быть полезно с такими модулями, какsklearn
которые сами этого не сделают, но дляstatsmodels
этого не требуется.2. То, что вы сделали во втором, будет не совсем правильным.
C()
создает полную базу макетов с одной исключенной группой . Если вы включите все макеты, то этот набор функций будет идеально совпадать с константой. Итак, во второй регрессии вы должны опуститьgender_F
, и вы должны получить тот же результат.3. Т. е. в вашей второй регрессии вы должны увидеть некоторое предупреждение внизу сводки модели, в строках «Наименьшее собственное значение равно 3,18 e-30. Это может указывать на наличие сильных проблем с мультиколлинеарностью или на то, что матрица проектирования является сингулярной »