我有很多列,我想为它们创建一个虚拟变量,以便在以后的逻辑回归中使用用途:
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']
感谢您的意见!
1条答案
按热度按时间xu3bshqb1#
您可以使用
dummies = pd. get_dummies(df ['变量名'],删除第一个= True)df = pd. concat([df,dummies],轴= 1)
这将避免逻辑回归模型中的虚拟变量陷阱