标签编码后的一次热编码

OneHotEncoding after LabelEncoding

在 Sklearn 中,如何在 Sklearn 中的 LabelEncoding 之后进行 OneHotEncoding。

到目前为止,我所做的是像这样映射数据集的所有字符串特征。

# Categorical boolean mask
categorical_feature_mask = X.dtypes==object
# filter categorical columns using mask and turn it into a list
categorical_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 仅对此处的实际目标有意义。

因此 select 分类列(此处通常使用 df.select_dtypes),并适合指定的列。这是一个 草图 你可以如何继续:

# OneHot encoding categorical columns
oh_cols = df.select_dtypes('object').columns
X_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))