下面是我的标签编码代码。一次为Dataframe的一列实现Label Encoder时,它运行良好。但是,当我尝试一次实现全部分类功能时,sklearn
会抛出
ValueError:输入形状错误(600000,24)。我找不到任何具体原因。
df = pd.read_csv("../inputs/cat-in-the-dat-train-folds.csv")
# extracting the categorical features
cat_features = [x for x in df.columns if x not in ( "id", "target", "kflod")]
for col in cat_features:
df.loc[:, col] = df[col].astype(str).fillna("NONE")
df_train = df[df["kfold"] != fold].reset_index(drop=True)
df_valid = df[df["kfold"] == fold].reset_index(drop=True)
lbl_enc = preprocessing.LabelEncoder()
full_cat_data = pd.concat(
[df_train[cat_features], df_valid[cat_features]],
axis=0)
lbl_enc.fit(full_cat_data)
x_train = lbl_enc.transform(df_train[cat_features])
x_valid = lbl_enc.transform(df_valid[cat_features])
答案 0 :(得分:0)
sklearn.preprocessing.LabelEncoder.fit仅将一维数组作为参数。
要容纳多列,请使用sklearn.preprocessing.OrdinalEncoder.fit,它可以使用 [n_samples,n_features] (根据文档)来获取多维数据
在您的示例中,尝试将lbl_enc = preprocessing.LabelEncoder()
替换为lbl_enc = preprocessing.OrdinalEncoder()
,这样应该可以。
有关LabelEncoder和OrdinalEncoder之间的区别的更多信息,请参见此答案here
其他资源: