来自 OneHotEncoder 的功能名称

Feature names from OneHotEncoder

我正在使用 OneHotEncoder 来编码一些分类变量(例如 - 性别和年龄组)。编码器生成的特征名称类似于 - 'x0_female'、'x0_male'、'x1_0.0'、'x1_15.0' 等

>>> train_X = pd.DataFrame({'Sex':['male', 'female']*3, 'AgeGroup':[0,15,30,45,60,75]})

>>> from sklearn.preprocessing import OneHotEncoder
>>> encoder = OneHotEncoder()
>>> train_X_encoded = encoder.fit_transform(train_X[['Sex', 'AgeGroup']])
>>> encoder.get_feature_names()
>>> array(['x0_female', 'x0_male', 'x1_0.0', 'x1_15.0', 'x1_30.0', 'x1_45.0',
       'x1_60.0', 'x1_75.0'], dtype=object)

有没有办法告诉 OneHotEncoder 以在开头添加列名称的方式创建特征名称,例如 - Sex_female、AgeGroup_15。 0 等,类似于 Pandas get_dummies() 所做的。

您可以将带有原始列名的列表传递给 get_feature_names:

encoder.get_feature_names(['Sex', 'AgeGroup'])

将 return:

['Sex_female', 'Sex_male', 'AgeGroup_0', 'AgeGroup_15',
 'AgeGroup_30', 'AgeGroup_45', 'AgeGroup_60', 'AgeGroup_75']
column_name = encoder.get_feature_names(['Sex', 'AgeGroup'])
one_hot_encoded_frame =  pd.DataFrame(train_X_encoded, columns= column_name)

感谢您提供了一个很好的解决方案。 @Nursnaaz 稀疏矩阵需要转换成密集矩阵。

column_name = encoder.get_feature_names(['Sex', 'AgeGroup'])
one_hot_encoded_frame =  pd.DataFrame(train_X_encoded.todense(), columns= column_name)