pandas 使用pd.get_dummies的伪变量

i86rm4rw  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(142)

我有很多列,我想为它们创建一个虚拟变量,以便在以后的逻辑回归中使用用途:

rdd=rd['cuser'] #rd is the original data frame
cat_vars=['income','marital','edu','race','age','gender','sexuality','SPD']
for var in cat_vars:
    temp = pd.get_dummies(rd[var],prefix=var)
    rdd=pd.concat([rdd,temp],axis=1)
rdd.columns.values

输出如下:

array(['cuser', 'income_20-49K', 'income_50-74K', 'income_< 20K',
       'income_> 75K', 'marital_Married', 'marital_Never Married',
       'marital_Separated/Divorced/Widowed', 'edu_< High school',
       'edu_College graduate', 'edu_High school graduate',
       'edu_Some college', 'race_Black', 'race_Hispanics', 'race_Other',
       'race_White', 'age_15-17', 'age_18-21', 'age_>=22',
       'gender_Female', 'gender_Male', 'sexuality_Bisexual',
       'sexuality_Hetrosexuals', 'sexuality_Lesbian or gay',
       'sexuality_Other', 'SPD_No SPD', 'SPD_Past-month SPD',
       'SPD_Past-year SPD'], dtype=object)

然后,我想估计一个逻辑回归,为此我创建了x和y变量:

X=rdd.loc[:,rdd.columns!='cuser']
y=rdd.loc[:,rdd.columns=='cuser']
lr_model = LogisticRegression()
lr_model.fit(X_, y_,sample_weight=wt)

问题是创建的哑元变量是针对分类变量的所有值的。因此,我创建的X包括甚至包括引用类别。例如,对于收入哑元“income_20 - 49 K”、“income_50 - 74 K”、“income_〈20 K”,“收入_〉75 K”,其中一个应作为参考,因此不在回归和X中。有没有一种方法可以做到这一点,这样我就不必在代码中为每个变量指定引用类别:

X=rdd.loc[:,rdd.columns!='cuser']

感谢您的意见!

xu3bshqb

xu3bshqb1#

您可以使用
dummies = pd. get_dummies(df ['变量名'],删除第一个= True)df = pd. concat([df,dummies],轴= 1)
这将避免逻辑回归模型中的虚拟变量陷阱

相关问题