机器学习流水线

2025 年 6 月 20 日 | 阅读 8 分钟

什么是机器学习管道?

机器学习管道是自动化完成的完整机器学习任务工作流的过程。它可以通过实现一系列数据转换和模型之间的关联,以便进行分析以获得输出。典型的管道包括原始数据输入、特征、输出、模型参数、ML模型和预测。此外,ML管道包含多个连续步骤,以模块化方法执行从数据提取和预处理到模型训练和部署的全部内容。这意味着在管道中,每个步骤都被设计为一个独立的模块,所有这些模块都绑定在一起以获得最终结果。

ML管道是“spark.ml”包内MLlib的高级API。典型的管道包含各种阶段。然而,有两种主要的管道阶段:

Machine Learning Pipeline
  1. Transformer(转换器):它接受数据集作为输入,并生成增强的数据集作为输出。例如,分词器(tokenizer)作为Transformer,它接收文本数据集,并将其转换为分词后的单词。
  2. Estimator(估计器):估计器是一种在输入数据集上进行拟合以生成模型的算法,该模型是一个Transformer。例如,回归(regression)是一个估计器,它在带有标签和特征的数据集上进行训练,并产生逻辑回归模型。

机器学习管道的重要性

要理解机器学习管道的重要性,我们首先需要理解ML任务的典型工作流。

Machine Learning Pipeline

典型的 ML 工作流包括数据摄取、数据清洗、数据预处理、建模和部署。

在ML工作流中,所有这些步骤都与同一个脚本一起运行。这意味着同一个脚本将被用于提取数据、清洗数据、建模和部署。然而,这可能会在尝试扩展ML模型时产生问题。这些问题包括:

  • 如果我们想部署同一模型的多个版本,我们需要多次运行完整的工作流周期,即使在每个模型中,第一个步骤,即数据摄取和准备,都完全相同。
  • 如果我们想扩展我们的模型,我们需要从头开始复制粘贴代码,这是一种低效且糟糕的软件开发方式。
  • 如果我们想更改工作流的任何部分配置,我们需要手动进行,这是一个非常耗时的过程。

为了解决以上所有问题,我们可以使用机器学习管道。使用ML管道,工作流的每个部分都作为一个独立模块。因此,每当我们想更改任何部分时,我们可以选择那个特定的模块并根据我们的需求使用它。

我们可以通过一个例子来理解这一点。构建任何ML模型都需要大量的训练数据。由于数据是从不同来源收集的,因此有必要清洗和预处理数据,这是ML项目中的一个关键步骤。然而,每当包含新数据集时,我们需要在将其用于训练之前执行相同的预处理步骤,这对ML专业人员来说是一个耗时且复杂的过程。

为了解决这类问题,可以使用ML管道,它可以记住并自动化整个预处理步骤,并保持相同的顺序。

机器学习管道的步骤

根据ML模型的用例和组织的具体需求,每个机器学习管道在一定程度上可能会有所不同。然而,每个管道都遵循/工作于通用的机器学习工作流,或者有些共同的阶段是每个ML管道都包含的。管道的每个阶段都接收其前一个阶段的输出,作为该特定阶段的输入。典型的ML管道包含以下阶段:

Machine Learning Pipeline

1. 数据摄取

每个ML管道都从数据摄取步骤开始。在此步骤中,数据被处理成一个组织良好的格式,适合应用于后续步骤。此步骤不执行任何特征工程,而是可能执行输入数据的版本管理。

2. 数据验证

下一步是数据验证,在训练新模型之前需要执行此步骤。数据验证侧重于新数据的统计信息,例如范围、类别数量、类别分布等。在此步骤中,数据科学家可以检测数据中是否存在任何异常。有各种数据验证工具可以帮助我们比较不同的数据集以检测异常。

3. 数据预处理

数据预处理是每个ML生命周期和管道中最关键的步骤之一。我们不能直接将收集到的数据输入以训练模型,而不进行预处理,因为这可能会产生不理想的结果。

预处理步骤包括准备原始数据并使其适合ML模型。该过程包括不同的子步骤,例如数据清洗、特征缩放等。数据预处理步骤的产品或输出成为可用于模型训练和测试的最终数据集。ML中有各种用于数据预处理的工具,其范围可以从简单的Python脚本到图模型。

4. 模型训练与调优

模型训练步骤是每个ML管道的核心。在此步骤中,模型被训练以接收输入(预处理后的数据集)并以最高可能的准确度预测输出。

然而,对于大型模型或大型训练数据集,可能会有一些困难。因此,需要高效地分配模型训练或模型调优。

管道可以解决模型训练阶段的这个问题,因为它们是可扩展的,并且可以同时处理大量模型。

5. 模型分析

模型训练后,我们需要使用准确率损失指标来确定最优参数集。除此之外,对模型性能进行深入分析对于模型的最终版本至关重要。深入分析包括计算其他指标,如精度(precision)、召回率(recall)、AUC(Area Under the Curve)等。这也有助于我们确定模型对训练中使用的特征的依赖性,并探索如果我们改变单个训练样本的特征,模型的预测会如何变化。

6. 模型版本管理

模型版本管理步骤跟踪哪些模型、超参数集和数据集被选为下一个要部署的版本。在各种情况下,仅仅通过应用更多/更好的训练数据而不更改任何模型参数,模型性能可能会出现显著差异。因此,记录新模型版本的所有输入并跟踪它们很重要。

7. 模型部署

在训练和分析模型后,是时候部署模型了。ML模型可以通过三种方式部署,它们是:

  • 使用模型服务器(Model server),
  • 在浏览器中
  • 在边缘设备上

然而,部署模型的常用方法是使用模型服务器。模型服务器允许同时托管多个版本,这有助于运行模型的A/B测试,并为模型改进提供有价值的反馈。

8. 反馈循环

每个管道都形成一个闭环以提供反馈。通过这个闭环,数据科学家可以确定已部署模型的有效性和性能。此步骤可以根据需求自动化或手动完成。除了两个手动审查步骤(模型分析和反馈步骤)之外,我们可以自动化整个管道。

机器学习管道的优点

使用管道进行ML工作流的一些优点如下:

  • 无人值守运行
    管道允许以可靠且无人值守的方式安排不同步骤并行运行。这意味着在数据建模和准备过程进行时,您可以同时专注于其他任务。
  • 易于调试
    使用管道,每个任务都有一个单独的函数(例如,数据清洗和数据建模有不同的函数)。因此,调试整个代码并找出某个步骤中的问题变得容易。
  • 易于跟踪和版本管理
    我们可以使用管道显式命名和版本化数据源、输入和输出,而不是手动跟踪每次迭代的数据和输出。
  • 快速执行
    如上所述,在ML管道中,工作流的每个部分都扮演着独立元素的作用,这使得软件运行得更快,并产生高效且高质量的输出。
  • 协作
    使用管道,数据科学家可以在ML设计过程的每个阶段进行协作,并且可以同时处理不同的管道步骤。
  • 可重用性
    我们可以为特定场景创建管道模板,并根据需要重用它们。例如,为再训练和批量评分创建模板。
  • 异构计算
    我们可以使用多个管道,这些管道在异构计算资源和不同的存储位置上可靠地协调。它允许通过在不同的计算资源(例如,GPU、数据科学VM等)上运行单独的管道步骤来有效利用资源。

构建机器学习管道时的注意事项

  • 将每个步骤创建为可重用组件
    在创建ML模型时,我们应该考虑ML工作流中涉及的所有步骤。从如何收集和预处理数据开始构建管道,并一直进行到最后。建议限制每个组件的范围,使其更容易理解和迭代。
  • 始终将测试编码到组件中
    测试应被视为管道的固有部分。如果您在手动过程中对输入数据和模型预测应该是什么样子进行了一些检查,您应该将其编码到管道中。
  • 将所有步骤放在一起
    我们必须将所有步骤放在一起,并定义工作流组件的处理顺序,包括输入和输出如何通过管道。
  • 按需自动化
    当我们创建一个管道时,它已经实现了工作流的自动化,因为它可以在没有人为干预的情况下管理和处理工作流的各种运行步骤。然而,许多人的目标是当满足特定标准时,使整个管道实现自动化。例如,您可以监控生产中的模型漂移以触发重新训练运行,或者——更简单地说,更定期地进行,例如每天。

ML管道工具

在机器学习中,有许多不同的工具用于构建管道。以下是一些及其用法:

构建管道的步骤工具
获取数据数据库管理 - PostgreSQL, MongoDB, DynamoDB, MySQL。分布式存储 - Apache Hadoop, Apache Spark/Apache Flink。
清洗/整理数据脚本语言 - SAS, Python, 和 R。分布式处理 - MapReduce/ Spark, Hadoop。数据整理工具 - R, Python Pandas。
探索/可视化数据以查找模式和趋势Python, R, MATLAB, 和 Weka。
建模数据以进行预测机器学习算法 - 监督、无监督、强化、半监督和半无监督学习。重要库 - Python (Scikit learn) / R (CARET)。
解释结果数据可视化工具 - ggplot, Seaborn, D3.JS, Matplotlib, Tableau。