【问题标题】:How to labelencode multiple columns for train and test set separately如何分别标记训练和测试集的多列编码
【发布时间】:2018-10-23 08:51:23
【问题描述】:

我正在构建一个随机森林模型,我的训练数据集中有 3 个分类变量。 sklearn RandomForest 不允许模型中的分类变量

我使用 Labelencoder() 在训练集上使用 fit_transform 将这些变量转换为数值变量,但是在测试集上运行转换时出现错误

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
X_train.apply(le.fit_transform)

X_test.apply(le.transform)

我收到以下错误消息:

ValueError: ("y contains new labels: ['female' 'male']", '发生在索引 Sex')

【问题讨论】:

标签: python scikit-learn


【解决方案1】:

似乎您的Sex 列中有错字,其中一个值似乎是['female' 'male'] 而不是['female', 'male'] 的行(请注意,在前者中,这两个值没有被分隔逗号,因此不被视为单独的元素)。确保在应用 train_test_split 或拆分数据之前修复该错字,但你正在这样做。例如,您可以查看df.Sex.unique()(其中df 是您的数据集),并确保您只有预期值['male', 'female']

潜在的错误是LabelEncoder 在您的X_test 中找到一个在您的X_train 中找不到的值,因此它不知道如何转换它(因为您只适合LabelEncoderX_train 中找到的值)。仅当您的数据集中有非常稀有的值时才会发生这种情况(在这种情况下,您可能需要重新考虑您的数据,或以适当的方式重新处理它),但是 如果 您想避免这种情况完全而言,一种可行的选择是在将数据拆分为 traintest

之前适合 LabelEncoder

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 2021-10-19
    • 2017-11-01
    • 2021-12-23
    • 2020-11-21
    • 1970-01-01
    • 2019-12-03
    相关资源
    最近更新 更多