确保机器学习模型在未知环境中泛化的一种尝试是拆分数据。这可以通过多种方式实现,从3向(训练、测试、评估)拆分到用于交叉验证的k拆分。其基本原理是,通过在数据子集上训练机器学习模型并在未见数据上对其进行评估,可以更好地推断模型在训练期间是欠拟合还是过拟合。对于大多数工作,简单的3-way就足够了。在实际生产中,拆分方式往往需要更复杂的方法来保证泛化问题。这些拆分更加复杂,因为它们源自实际数据,而不是普通拆分方法所基于的数据结构。这篇文章试图解释一些在机器学习开发中拆分数据的非常规方法,以及它们背后的原因。让我们从数据集开始为了简单起见,让我们使用以表格格式表示的简单多元时间序列数据集。数据由3个数字特征、1个分类特征和1个时间戳特征组成。这是一个可视化:这种类型的数据集在机器学习的许多用例和行业中很常见。一个具体的例子是从工厂车间的多个传感器传输的时间流数据。分类变量是机器的ID,数字特征是传感器记录的信息(例如压力、温度等),时间戳是数据传输和记录在数据库中的时间。拆分假设您从数据工程部门收到此数据集作为csv文件,并负责编写分类或回归模型。在这种情况下,标签可以是任何特征或额外的列。首先要做的是将数据拆分为有意义的子集。为了方便起见,您可以简单地分成训练集和测试集。问题来了,简单的数据拆分在这里不起作用:数据由多个时间索引的传感器数据流组成。那么,您如何拆分数据以保持顺序并且后续的机器学习模型可以很好地泛化?数据的另一种视图我们可以做的最直接的转换是表示每个分类类的数据(在我们的运行示例中可视化每台机器的数据)。这导致以下结果:水平拆分分组使拆分问题更容易一些,并且在很大程度上取决于您的假设。您可能会问:在一个组上训练的机器学习模型如何推广到其他组,也就是说,如果在class_1、class_2和class_3时间流上训练,模型在class_4和class_5时间流上表现如何?以下是可视化ofthissplit:上面的拆分方法,我称之为水平拆分。在大多数机器学习库中,这种拆分很容易通过简单地按类别特征分组并沿着类别进行分区来实现。使用此拆分进行训练,该模型已收集信息以在看不见的子组中进行概括。值得注意的是,拆分并不以拆分本身为基础。但是,可以假设您还将按每个时间流的时间顺序进行拆分,以维护数据中的这种关系。这就引出了下一种分裂方式。垂直分割但是如果你想跨越时间本身怎么办?对于大多数时间序列建模,常见的数据拆分方式是过去和未来。即训练集的历史数据与评估集的数据进行比较。这种情况下的假设是:根据每个组的历史数据训练的机器学习模型如何推广到每个组的未来数据?这个问题可以通过所谓的垂直分割来回答:对这种分割的成功训练将表明A模型能够在它看到的时间流中提取模式,并对未来行为做出准确的预测。然而,这本身并不表示该模型可以很好地泛化到来自不同组的其他时间流。当然,你的多个时间流现在必须单独排序,所以我们仍然需要分组。但是这一次,我们不是跨组,而是从过去的每组中抽取样本并将它们放入训练中,并将未来的组相应地放入评估中。在这个理想化的例子中,所有时间流都具有相同的长度,即每个时间流都具有完全相同数量的数据点。然而,在现实世界中,情况可能并非如此——因此您需要一个系统来为每个组建立索引以进行拆分。混合拆分??有人可能想知道,他们能否生成一个在水平和垂直拆分的约束下都能很好地泛化的模型?在这种情况下,假设是:在某些历史数据组上训练的机器学习模型如何推广到这些组的未来数据和其他组的所有数据?这种混合拆分的可视化看起来是这样的:当然,如果模型训练成功,这个模型肯定会比现实世界中的其他模型更健壮。它不仅可以展示它所见过的一些群体的学习模式,还可以展示它已经获得了跨群体概括的信息。如果我们将来要在工厂中添加更多这样的机器,这可能会有用。多维拆分水平和垂直拆分的概念可以推广到多个维度。例如,可能需要按两个分类特征而不是一个分类特征进行分组,以进一步隔离数据中的子组并按子组对它们进行排序。中间可能还有复杂的逻辑来过滤样本量较小的组,以及与该领域相关的其他业务级逻辑。结论这个假设示例用于说明可以创建的各种机器学习拆分的无限可能性。正如在评估模型时确保机器学习的公平性很重要一样,花足够的时间考虑分区数据集及其对下游模型产生偏差的后果也同样重要。
