组织将由多个模型使用的数据集的预处理

数据挖掘 预处理
2022-02-08 20:42:54

在数据科学项目中,数据通常是经过预处理的。我们还构建、测试和选择不同的模型。模型还带有自己的预处理要求,这些要求可能因模型而异,例如,一些模型需要缩放,而另一些则不需要。

在管理将提供多个不同模型的数据集(或多个数据集)的预处理和转换时,什么被认为是最佳实践,每个模型都有自己的预处理要求?

我想知道如何使预处理足够灵活以支持多个模型,同时还可以轻松管理更改。

我最近开始使用cookiecutter 数据科学项目,该项目提倡使用临时数据集。据推测,这个临时数据集形成了一个基础集,从中构建了特定于模型的预处理。这是一种方法,但想知道什么是最佳实践。

3个回答

如果数据准备步骤需要大量处理时间,那么最佳做法是制作该临时数据集。如果它不重要,则为您构建的每个模型重复数据准备步骤,因为它更简单并为您提供更大的灵活性。

前者的一个例子:比如说,你有 NLP 训练数据,一些在 PDF 中,一些在 docx 中,一些在 html 中,一些在 epub 中,等等。但是你所有的模型都需要纯文本句子或纯文本段落。首先运行各种脚本以将每个段落提取为文本文件中的单行(例如)是明智的。

作为后者的示例,不要将其标记为句子:这应该是您根据需要为每个模型执行的管道步骤,因为它相对较快。(而且只有某些型号需要它。)

另一个例子是你有一组非常大的图像,这些图像将在一个集群上进行处理。如果您计划通过对每个镜像进行训练来增强数据,您会发现将数据加载到集群中需要大量时间,但翻转图像非常快。如果您提前制作所有这些镜像,您将拥有两倍的数据,因此瓶颈阶段现在将花费两倍的时间。

但是,如果这些图像都是高分辨率照片,但您的所有模型都希望将它们调整为 256x256,我会提前准备好。假设平均而言,新文件大小为 1/10。您的总存储需求仅增加了 10%(如果您保留原始存储),但加载到集群的瓶颈阶段现在将快 10 倍。

一种方法是管道。管道是创建和使用模型的顺序步骤的显式列表。

预处理、训练和后处理,以及通过交叉验证正确调整模型超参数和基准模型是一项复杂且耗时的工作。为了促进这项工作,在 R(最著名的是mlr3tidymodels)和 python(scikit-learn)中开发了几个“元”机器学习包。

这些包不仅实现了所有 ML 管道最佳实践,而且对于在试验实际数据时学习这些实践也非常有用。我建议选择其中一个(并不重要,它们都很棒)和一些Kaggle数据集,并在进行实际建模的同时学习。