sklearn引发ValueError:输入形状错误(600000,24)

时间:2020-10-07 10:17:25

标签: python scikit-learn

下面是我的标签编码代码。一次为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])

1 个答案:

答案 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

其他资源