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

Scikit learn 是否使用相同的标签编码器来测试数据集?还是新的标签编码器?,scikit-learn,Scikit Learn,我对scikit learn完全是新手 我想知道当我想在测试数据集上转换相同功能的分类数据时,是否应该使用在训练数据集上使用的相同标签编码器实例。它的意思如下 from sklearn import preprocessing # trainig data label encoding le_blood_type = preprocessing.LabelEncoder() df_training[ 'BLOOD_TYPE' ] = le_blood_type.fit_transform( d

我对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]...)

我想雷斯勒已经给出了答案。我只是想更直接地谈谈问题中的情况:


通常,您只需要对LabelEncoder(在训练集中具有特性)进行一次拟合,并在测试集中转换特性。但如果您的测试集具有不在训练集中的特征值,则在装配标签编码器时,将训练特征集和测试集的并集放入其中

谢谢你的回答。所以,您的意思是LabelEncoder应该只安装一次训练数据集的分类功能。它应该具有所有的名义特征。如果是这样的话,在那之后,它可以用来测试数据集吗?一旦你的标签安可符合你所有的标称特征,你就可以将它与你想要的每个数据集的转换方法一起使用。明白了。谢谢你的友好和快速的回答。如果我有两个不同的数据帧用于测试和训练数据呢?我有两个不同的csv,我已经加载在两个不同的数据帧中。这是否意味着我将不得不合并,然后执行标签编码,然后进行一些分解?我试图回答这个问题。我刚刚编辑了一点@mayuri如果您想在一个程序中执行
fit\u transform()
,并在另一个程序中执行
transform()
,请检查此答案