在Sklearn中,如何在LabelEncoding之后进行OneHotEncoding?
到目前为止,我已经对数据集中所有的字符串特征进行了映射,如下所示。
# Categorical boolean maskcategorical_feature_mask = X.dtypes==object# filter categorical columns using mask and turn it into a listcategorical_cols = X.columns[categorical_feature_mask].tolist()
之后,我对数据集的列应用了如下索引操作:
X[categorical_cols] = X[categorical_cols].apply(lambda col: le.fit_transform(col))
我的结果不太理想,所以我想使用ÒneHotEncoding
来看看性能是否有所提升。
这是我的代码:
ohe = OneHotEncoder(categorical_features = categorical_cols)X[categorical_cols] = ohe.fit_transform(df).toarray()
我尝试了不同的方法,但我想在这里实现的是使用OneHotEncoding技术来覆盖特征。
回答:
OneHotEncoder
直接支持分类特征,因此在使用之前无需使用LabelEncoder
。另外,请注意,不应该使用LabelEncoder来编码特征。查看LabelEncoder for features?以获取关于此的详细解释。在这里,LabelEncoder
只在实际目标上才有意义。
因此,选择分类列(通常使用df.select_dtypes
),并在指定的列上进行拟合。这里是一个你可以继续操作的草图:
# OneHot encoding categorical columnsoh_cols = df.select_dtypes('object').columnsX_cat = df[oh_cols].to_numpy()oh = OneHotEncoder()one_hot_cols = oh.fit(X_cat)
然后只需调用编码器的transform
方法。如果你想重建数据框(如你的代码所示),get_feature_names
将为你提供分类特征的类别名称:
df_prepr = pd.DataFrame(one_hot_cols.transform(X_cat).toarray(), columns=one_hot_cols.get_feature_names(input_features=oh_cols))