gpt4 book ai didi

python - 火车验证和测试集中的一种热编码(生产数据)

转载 作者:行者123 更新时间:2023-12-04 03:30:40 24 4
gpt4 key购买 nike

例如我有以下训练集。

   name     values
0 Tony 100
1 Smith 110
2 Sam 120
3 Shane 130
4 Sam 140
5 Ram 160

经过一次热编码就变成了

    values   0    1    2    3    4   
0 100 1 0 0 0 0
1 110 0 1 0 0 0
2 120 0 0 1 0 0
3 130 0 0 0 1 0
4 140 0 0 1 0 0
5 160 0 0 0 0 1

现在假设我在生产中有测试数据,Dannyname 中有一个新级别:

   name     values
0 Shane 200
1 Danny 210
2 Sam 220
3 Tony 180
4 Danny 150

经过一次热编码

    values   0    1    2    3    
0 200 1 0 0 0
1 210 0 1 0 0
2 220 0 0 1 0
3 180 0 0 0 1
4 150 0 1 0 0

基于上述情况,我有几个问题:

  1. 如何处理生产测试数据中类别变量的水平或值的新条目?
  2. 如何保持模型的输入特征大小(对于上面的例子,训练数据为 6,测试数据为 5)?
  3. 此外,Tony 在训练集中是特征 0,但在测试中它是特征 3;它会影响训练模型对测试输入的预测吗?

最佳答案

生产测试数据新增level如何处理?

OneHotEncoder 针对这个问题有一个超参数:handle_unknown

handle_unknown{‘error’, ‘ignore’}, default=’error’Whether to raise anerror or ignore if an unknown categorical feature is present duringtransform (default is to raise). When this parameter is set to‘ignore’ and an unknown category is encountered during transform, theresulting one-hot encoded columns for this feature will be all zeros.In the inverse transform, an unknown category will be denoted as None.

如您所见,此超参数有两个不同的值。如果在你的测试中可以出现新类(比如你的例子 Danny),我建议使用值 ignore:

enc = OneHotEncoder(handle_unknown='ignore')

如何保持模型的输入特征尺寸?上课顺序?

模型将始终保持拟合数据的输入特征大小。例如,使用您提供的数据,如果您为 OneHotEncoder 安装训练数据,您将始终有 6 个输入。

并且,同样始终,此输入将具有与训练数据相同的类别。我的意思是,在你的数据中,特征 0 总是指 Tony特征 1 指的是 Smith,..

如果你想将适配的 OneHotEncoder 转移到另一个脚本,你可以使用 joblib 库来完成。例如:

import joblib

enc = OneHotEncoder(handle_unknown='error')
enc.fit(data)
joblib.dump(enc, 'encoder.joblib')

然后,从另一个脚本加载:

enc = joblib.load('encoder.joblib')

说明

最后,我想澄清一下这个过程以及你是如何进行 OneHotEncode 的,因为我认为它根本不清楚:

  1. 对于 OneHotEncoding,首先,您需要适合到一个数据集(几乎总是训练数据)。你在这一步做什么?基本上你要告诉类(class)的人数、类次和顺序(在你的案例:你有 6 个类(class),顺序为:Tony, Smith, ..)

  2. 然后,您可以使用之前使用 transform 安装的 OneHotEncoder 转换任何数据。例如,您的测试结果将是:

Shane,有没有想过,它是第一个出现在你的测试数据中的类,它将保持特征 3(所以 1 将出现在特征 3 中并归零到其他特征),因为它是在训练数据的 fit 部分中定义的。

Danny,特征中没有任何 1,因为这个名字没有出现在训练数据中。正如我们在问题 1 中所说的,如果将超参数 handle_unknow 设置为 error,您将获得一个错误,如果将其设置为 ignore 您将继续使用 0 的所有功能。

基本上,如您所见,您首先要适应一个数据,然后应用您学到的知识来转换另一个数据。您只需适应一次 OneHotEncoder

注意:您可以一步完成训练数据的拟合和转换:fit_transform

关于python - 火车验证和测试集中的一种热编码(生产数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66901180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com