如何使用OneHotEncoder和LabelEncoder预处理看不见的数据,以便匹配火车组?

时间:2017-08-07 01:07:14

标签: python scikit-learn

我编写了一个分类器并进行了数据预处理(它是分类数据),scikit学习了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与火车组不同
  3. 我在这里失踪了什么? THKS!

2 个答案:

答案 0 :(得分:2)

您必须存储(即腌制)您安装的LabelEncoders和OneHotEncoder。请在此处查看:model persistence

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

答案 1 :(得分:0)

您尝试使用相同的实例对两个不同的类别进行分类。 尝试使用下面的内容

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是您要预处理以进行预测的样本数据。

同样,您可以使用相同的方法进行编码