如何使用OneHotEncoder和LabelEncoder预处理看不见的数据,以便与列车集相匹配?



我写了一个分类器,并使用LabelEncoder(LE(和OneHotEncoder(OHE(的scikit learn进行了数据预处理(它是分类数据(,它在训练和测试数据上工作得很好。现在,我想对新数据进行预测。我的问题:我如何使用 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与火车组不同

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

你必须存储(即泡菜(你安装的标签编码器和OneHotEncoder。在这里查看:模型持久性

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

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

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

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

最新更新