当前位置: 首页 > 知识库问答 >
问题:

对训练和测试数据帧使用相同的标签编码器

全誉
2023-03-14

我有两个不同的csv,其中包含列车数据和测试数据。我从这些train_features_df和test_features_df创建了两个不同的数据帧。请注意,测试和训练数据有多个分类列,因此我需要对它们应用labelEncoder,因为它适合我的数据集。所以我在列车和测试数据上分别应用了标签编码器。当我打印列车和测试数据集的新编码值时,我看到对于相同特征的相同分类值,新编码数据的输出是不同的。这是否意味着我必须合并列车和测试数据。然后应用标签编码,然后再次将它们分开?

 from sklearn.preprocessing import LabelEncoder
 target=train_features_df['y']
 train_features_df=train_features_df.drop(['y'], axis=1)
 train_features_df.head()
 y = target.values
 print("printing feature column of train datasets: \n")
 print(train_features_df.values)
 le=LabelEncoder()
 X_train_label_encoded=train_features_df.apply(le.fit_transform)
 print("\n printing feature column of train datasets after label encoder: \n")
 print(X_train_label_encoded.head())

 print("printing test feature datasets: \n")
 print(test_features_df)
 X_test_label_encoded=test_features_df.apply(le.fit_transform)
 print("printing test feature encoded  datasets: \n")
 print(X_test_label_encoded)

以上结果如下:-

printing feature column of train datasets: 

[['k' 'v' 'at' ... 0 0 0]
 ['k' 't' 'av' ... 0 0 0]
 ['az' 'w' 'n' ... 0 0 0]

    X0  X1  X2  X3  X4  X5  X6  X8  X10  X12  ...  X375  X376  X377  X378  \
 0  32  23  17   0   3  24   9  14    0    0  ...     0     0     1     0   
 1  32  21  19   4   3  28  11  14    0    0  ...     1     0     0     0   
 2  20  24  34   2   3  27   9  23    0    0  ...     0     0     0     0

 printing test feature datasets: 

       X0  X1  X2 X3 X4  X5 X6 X8  X10  X12  ...  X375  X376  X377  X378  X379  \
 0     az   v   n  f  d   t  a  w    0    0  ...     0     0     0     1     0   
 1      t   b  ai  a  d   b  g  y    0    0  ...     0     0     1     0     0   
 2     az   v  as  f  d   a  j  j    0    0  ...     0     0     0     1     0

       X0  X1  X2  X3  X4  X5  X6  X8  X10  X12  ...  X375  X376  X377  X378  \
 0     21  23  34   5   3  26   0  22    0    0  ...     0     0     0     1   
 1     42   3   8   0   3   9   6  24    0    0  ...     0     0     1     0   
 2     21  23  17   5   3   0   9   9    0    0  ...     0     0     0     1   
 3     21  13  34   5   3  31  11  13    0    0  ...     0     0     0     1   
 4     45  20  17   2   3  30   8  12    0    0  ...     1     0     0     0

如果我们看到在lebel编码后的列车数据帧中,第一列中的az值转换为值20,而在lebel编码后的测试数据帧中,第一列中的az值转换为值21。

共有1个答案

叶景龙
2023-03-14

训练集和测试集中出现的唯一值可能不同。在这种情况下,编码也会有所不同。

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
le.fit_transform([1,2,3,4,5])
# array([0, 1, 2, 3, 4], dtype=int64)
le.fit_transform([2,3,4,5])
# array([0, 1, 2, 3], dtype=int64)

您应该对列车数据进行拟合,然后对测试数据进行变换,以获得相同的编码:

l_train = [1,2,3,4,5]
le.fit(l_train)
le.transform(l_train)
# array([0, 1, 2, 3, 4], dtype=int64)
le.transform([2,3,4,5])
#array([1, 2, 3, 4], dtype=int64)

但请注意,不应为分类功能使用标签编码器。有关分类功能,请参见LabelEncoder?为了解释原因<代码>标签编码只能在标签上使用。例如,您应该查看OneHotEncoder

 类似资料:
  • 为了评估我们的监督模型的泛化能力,我们可以将数据分成训练和测试集: from sklearn.datasets import load_iris iris = load_iris() X, y = iris.data, iris.target 考虑如何正常执行机器学习,训练/测试分割的想法是有道理的。真实世界系统根据他们拥有的数据进行训练,当其他数据进入时(来自客户,传感器或其他来源),经过训

  • 我正在用python构建一个预测模型,其中包含两个独立的训练集和测试集。培训数据包含数字类型分类变量,例如邮政编码[915212315112355,…],以及字符串分类变量,例如,城市[‘芝加哥’、‘纽约’、‘洛杉矶’、…]。 为了训练数据,我首先使用“pd”。获取_dummies'以获取这些变量的虚拟变量,然后用转换后的训练数据拟合模型。 我对测试数据进行同样的转换,并使用经过训练的模型预测结果

  • 问题内容: 因此,我对此有疑问,一直在寻找答案。所以问题是我何时使用 这之后,我将训练和测试模型(,作为特征,如标签),并得到一些准确度得分。现在我的疑问是,当我必须预测新数据集的标签时会发生什么。说, 因为当我规范化列时,和的值将根据新数据而不是将在其上训练模型的数据来更改。因此,现在将是下面的数据准备步骤之后的数据。 的价值和将关于改变和价值。的数据准备是关于的。 有关不同数字的数据准备如何有

  • 我有一个相当大的dataframe形式的数据集,我想知道如何将dataframe拆分为两个随机样本(80%和20%)进行训练和测试。 谢谢!

  • 问题内容: 我像这样使用scikit-learn的SVM: 我的问题是,当我使用分类器预测训练集成员的班级时,即使在scikit- learns实现中,分类器也可能是错误的。(例如) 问题答案: 是的,可以运行以下代码,例如: 分数是0.61,因此将近40%的训练数据被错误分类。部分原因是,即使默认内核是(理论上也应该能够对任何训练数据集进行完美分类,只要您没有两个带有不同标签的相同训练点),也可

  • 从excel文件读取测试数据。要求:我想首先我的所有测试应该运行在相同的测试数据,即excel行,然后所有测试与另一行。 解决方案:尝试将@Factory与我的@DataProvider一起使用 问题:如果我在@dataProvider中使用核心值,那么它可以正常工作。但是当从excel动态获取时,如果给我错误:[错误]导致:java.lang.NullPointerException } 基类

  • 我有一个数据集,它包含多个列,这些列的值是字符串格式的。现在我需要使用labelEncoder将这些文本列转换为数值。在下面的例子中,y是我的tain数据集的目标,A0到A13是不同的特征。还有50个特性,但我在这里提供了一个子集。现在,我如何将labelencoder应用于从A0到A8的数据集,并为创建模型创建一个新的编码数据帧?我知道我们可以像下面这样做,但这会说只编码一列。我希望编码器应用于

  • 问题内容: 我正在尝试运行以下Colab项目,但是当我想将训练数据分为验证和训练部分时,出现此错误: 我使用以下代码: 如何解决此错误? 问题答案: 根据Tensorflow Dataset docs ,百分比拆分是可能的,例如 如示例所示,更改列表时,您的代码将起作用: 使用上面的代码,有2590个条目,而有1080个。