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

mac*_*475 3 scikit-learn

我对scikit-learn完全是新手.

我想知道当我想在测试数据集上转换相同特征的分类数据时是否应该使用在训练数据集上使用的相同Label Encoder实例.并且,它意味着如下

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' ] )
Run Code Online (Sandbox Code Playgroud)

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

RPr*_*sle 8

问题是你实际使用它的方式.

由于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]...)
Run Code Online (Sandbox Code Playgroud)

来自官方文件


Mat*_*ice 6

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

一般来说,你只需要拟合一次LabelEncoder(训练集中的特征)并转换测试集中的特征即可。但是,如果您的测试集具有训练集中没有的特征值,则当您拟合标签编码器时,请将训练特征集和测试集的并集放入其中。

  • 我试图回答这个问题。我只是编辑了一点@Mayur (4认同)