使用相同的标签编码器来测试数据集?还是新的标签编码器?

Usng same Label Encoder to test dataset? or new Label Encoder?

我完全是 scikit-learn 的新手。

我想知道当我想在测试数据集上转换相同特征的分类数据时,是否应该使用与训练数据集相同的标签编码器实例。而且,它的意思如下

from sklearn import preprocessing

# trainig data label encoding
le_blood_type = preprocessing.LabelEncoder()
df_training[ 'BLOOD_TYPE' ] = le_blood_type.fit_transform( df_training[ 'BLOOD_TYPE' ] )    # labeling from string
....
1. Using same label encoder
   df_test[ 'BLOOD_TYPE' ] = le_blood_type.fit_transform( df_test[ 'BLOOD_TYPE' ] )

2. Using different label encoder
   le_for_test_blood_type = preprocessing.LabelEncoder()
   df_test[ 'BLOOD_TYPE' ] = le_for_test_blood_type.fit_transform( df_test[ 'BLOOD_TYPE' ] )

哪一个是正确的代码? 或者,无论我选择上面的代码,它都没有任何区别 因为训练数据集的分类数据和测试数据集的分类数据应该与结果相同。

问题其实是你的使用方式。

由于 LabelEncoder 将标称特征与数字增量相关联,因此您应该适配一次并在对象适配后进行转换。不要忘记你需要在训练阶段拥有所有的标称特征。

使用它的好方法可能是让你拥有标称特征,对其进行拟合,然后只使用变换方法。

>>> from sklearn import preprocessing
>>> le = preprocessing.LabelEncoder()
>>> le.fit([1, 2, 2, 6])
LabelEncoder()
>>> le.classes_
array([1, 2, 6])
>>> le.transform([1, 1, 2, 6]) 
array([0, 0, 1, 2]...)

来自 official doc

我想RPresle已经给出了答案。只是想更直接地说明问题中的情况:

一般情况下,只需要对LabelEncoder(训练集中的特征)拟合一次,对测试集中的特征进行变换即可。但是,如果您的测试集具有不在训练集中的特征值,则当您安装标签编码器时,将训练特征集和测试集的并集放入其中。