【问题标题】:How preprocessing unseen data with OneHotEncoder and LabelEncoder so that matchs the train set?如何使用 OneHotEncoder 和 LabelEncoder 预处理看不见的数据以匹配训练集?
【发布时间】:2018-01-14 05:47:25
【问题描述】:

我编写了一个分类器,并使用 scikit learn 和 LabelEncoder (LE) 和 OneHotEncoder (OHE) 进行了数据预处理(它是分类数据),它在训练和测试数据上效果很好。现在,我想对新数据进行预测。我的问题:如何以与训练数据相同的风格(缺少更好的词)使用 LE 和 OHE 转换新数据? 到目前为止我的代码:

labelencoder_X = LabelEncoder()

X[:, 0] = labelencoder_X.fit_transform(X[:, 0])
X[:, 1] = labelencoder_X.fit_transform(X[:, 1])
onehotencoder = OneHotEncoder(categorical_features='all')# se quiser em uma coluna coloca categorical_features=[0],
#onde [0] é o index da coluna e se quiser em todas as colunas coloca 'all
X = onehotencoder.fit_transform(X).toarray()

labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)

我没有成功的尝试:

new_pred = np.array(['car','male'])
labelencoder_new_pred = LabelEncoder()
new_pred = labelencoder_new_pred.fit_transform(new_pred) #also tried new_pred = labelencoder_X.fit_transform(new_pred) 
onehotencoder2 = OneHotEncoder(categorical_features='all',n_values=29)

new_pred = onehotencoder2.fit_transform(new_pred).toarray()#also tried new_pred = onehotencoder.fit_transform(new_pred).toarray()

z = cfl.predict(new_pred)

这个结果:

  1. 结果始终相同,即使将 new_pred 数据更改为在训练集中找到的相同数据
  2. 它产生的 OHE 与火车上的不同

我在这里缺少什么?谢谢!

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    您试图使用同一个实例来分类两个不同的类别。 尝试使用类似下面的东西

    labelencoder_X_1 = LabelEncoder()
    labelencoder_X_2 = LabelEncoder()
    
    X[:, 0] = labelencoder_X_1.fit_transform(X[:, 0])
    X[:, 1] = labelencoder_X_2.fit_transform(X[:, 1])
    

    现在你可以使用

    new_data[:,1] = labelencoder_X_2.fit_transform(new_data[:,1])
    

    其中 new_data 是您要预处理以进行预测的样本数据。

    同样你可以使用同样的方法进行编码

    【讨论】:

      【解决方案2】:

      您必须存储(即腌制)您安装的 LabelEncoder 和 OneHotEncoder。在这里查看:model persistence

      当您收到新数据时,您将通过已安装的 LabelEncoders 和 OneHotEncoder 对其进行转换,然后使用您经过训练的模型进行预测。这样,生成的数据将采用模型期望的确切格式,

      【讨论】:

      • 嗨 Stergios,我想问一下,如果我对训练数据应用清洗(我不是在谈论缩放等),我是否必须在进行预测之前对看不见的数据应用相同的清洗?或者,因为它是看不见的数据,所以我保持原样?有什么警告吗?谢谢!
      • 通常,您也应该对测试数据应用相同的清理。唯一需要注意的是,这个清理阶段不应该在训练阶段“瞥见”测试数据。您具体指的是哪些清洁步骤?
      • 我指的是例如,删除一些奇怪/错误的值。因此,在进行预测之前,对看不见的数据应用相同的删除。
      • 是的,在预测中肯定也会这样做。
      猜你喜欢
      • 1970-01-01
      • 2019-03-18
      • 2021-11-01
      • 2020-06-26
      • 1970-01-01
      • 2021-01-06
      • 2014-12-19
      • 2021-07-10
      • 2014-12-29
      相关资源
      最近更新 更多