我正在研究一种自动ML(回归)算法,其流程如下: 用户上传数据-数据清理-编码(目标编码器)-拟合模型-结果。
到目前为止,我完全没问题,我的困惑是,当用户想要在没有目标变量的情况下在看不见的数据中对其进行测试时,那么我需要再次执行数据清理-编码和编码技术我曾经在拟合模型时使用过,只有在有目标变量(看不见的数据将没有目标变量)时,我才能工作,并且由于需要测试数据,我无法更改对看不见的数据的编码技术据我所知,通过与在拟合模型时使用的数据相同的过程进行操作。
有人可以帮助我找到解决此问题的方法吗,否则任何建议都会有很大帮助。
谢谢你。
答案 0 :(得分:1)
您上面概述的是培训管道。在测试(推理)场景中,管道会稍作修改。数据上载和数据清理应与训练方案中的执行相同,但是您要确认没有必要(甚至可能)执行目标编码,因为目标是我们在测试过程中使用模型预测的目标。在这种情况下,不会执行编码,并且该模型将用于基于清除的数据预测目标。
简而言之,对于训练/测试,模型管道应该几乎相同,除了在测试场景中不执行目标编码外,最后一步将适合训练场景并在测试中进行预测场景。答案 1 :(得分:0)
对于看不见的数据的预测,您应该仅从管道中省略目标编码。因此,您可以实现管道的两个版本。
这将是您的培训/测试/交叉验证流程:
用户上传训练数据-数据清理-编码(目标编码器)-训练模型-结果
注意:在运行训练数据时对编码使用fit_transform,在运行测试或验证数据时进行转换,以避免数据泄漏
这将是您的预测管道:
用户上传测试数据-数据清理-使用经过训练的模型进行预测
答案 2 :(得分:0)
您的问题不清楚。
但是让我们假设两种情况:
您正在以某种奇怪的方式对具有目标信息的输入特征进行编码
您只是对回归值进行编码,例如,您已为结果设置了存储桶值:
类似
[0, 20] -> 1
[21, 40] -> 2
[41, 60] -> 3
[61, 80] -> 4
[81, 100] -> 5
答案
如果您以某种奇怪的方式用目标值对要素进行编码,则说明存在问题。您基本上是在尝试在源中引入要预测的信息,这就是数据泄漏。具有这种设置的模型无法处理真实数据,因为这就像作弊
如果要编码目标(这很常见),则管道中没有任何更改。因为特征编码和目标编码是两个独立的步骤
通常会有两种编码器功能,一种用于功能,一种用于目标,并且这些功能将是独立的。在训练情况下,您将使用ag(x)编码器用于特征(其中x是输入矩阵特征),以及用于编码目标的t(y)函数(其中y是目标值)
进行培训时,既需要编码功能也需要编码标签来计算错误并改进模型,因此您将执行以下操作:
model.fit(g(x_train), t(y_train)) # iterate: train data on g(x_train), calculate loss with t(y_train) and change the model accordingly
进行预测时,您将使用以下内容:
y_test = model.predict(g(x_test)) # test with encoded unseen data
假设您使用了上面的示例存储桶,则y_test
已被编码,其值类似于[1, 2, 3, 4, 5]
。
因此,无需使用目标输出的编码,因为目标是预测的输出,并且在任何情况下都不应将其用作信息(以某种方式进行编码)训练功能
仅在训练过程中将目标用于损失功能
因此,总而言之:
,并且这些编码器是独立的(例如,它们是在彼此不了解的情况下构造的)