使用 PyCaret 和 MLflow 轻松实现 MLOps
最后更新于
这有用吗?
最后更新于
这有用吗?
PyCaret 是一个开源的低代码机器学习库,也是一个内置于 Python 中的端到端模型管理工具,用于自动化机器学习工作流程。它以易用性、简洁性以及快速高效地构建和部署端到端机器学习原型而闻名。
PyCaret 是一个替代性的低代码库,只需几行代码就可以取代数百行代码。这使得实验周期呈指数级加快且更高效。
MLflow 是一个开源平台,用于管理机器学习生命周期,包括实验、可复现性、部署和集中式模型注册中心。MLflow 目前提供四个组件
安装 PyCaret 非常简单,只需几分钟。我们强烈建议使用虚拟环境,以避免与其他库发生潜在冲突。
在我谈论 MLOps 之前,让我们先从宏观层面谈谈机器学习生命周期
业务问题 — 这是机器学习工作流程的第一步。完成这一步可能需要几天到几周的时间,具体取决于用例和问题的复杂性。在此阶段,数据科学家与主题专家 (SME) 会面,以理解问题、访谈关键利益相关者、收集信息,并设定项目的总体预期。
数据源和 ETL — 一旦对问题有了理解,接下来就是利用访谈中获得的信息从企业数据库中获取数据。
探索性数据分析 (EDA) — 建模尚未开始。EDA 是你分析原始数据的地方。你的目标是探索数据,评估数据质量、缺失值、特征分布、相关性等。
数据准备 — 现在是准备数据模型训练的时候了。这包括将数据划分为训练集和测试集、填充缺失值、one-hot 编码、目标编码、特征工程、特征选择等。
模型训练与选择 — 这是每个人都感到兴奋的一步。这包括训练大量模型、调优超参数、模型集成、评估性能指标(如 AUC、混淆矩阵、残差等),最后选择一个最佳模型部署到生产环境供业务使用。
部署与监控 — 这是最后一步,主要涉及 MLOps。这包括将最终模型打包、创建 Docker 镜像、编写评分脚本,然后将它们协同工作,最后将其发布为可用于对通过管道的新数据获取预测的 API。
完成所有这些的传统方式相当繁琐、耗时,需要大量的技术知识,我可能无法在一个教程中涵盖。然而,在本教程中,我将使用 PyCaret 来演示数据科学家如何非常高效地完成所有这些工作变得如此容易。在我们进入实践部分之前,让我们再多谈谈 MLOps。
MLOps 是一门工程学科,旨在结合机器学习开发,即实验(模型训练、超参数调优、模型集成、模型选择等),这通常由数据科学家进行,并结合机器学习工程和运维,以标准化和简化机器学习模型在生产环境中的持续交付。
如果你是完全的初学者,你很可能不知道我在说什么。别担心。让我给你一个简单的非技术性定义
*MLOps 是一系列技术工程和操作任务,使得你的机器学习模型能够被组织内的其他用户和应用程序使用。基本上,它是一种方法,通过这种方法,你的工作,即机器学习模型被发布到线上,以便其他人可以使用它们并达成一些业务目标。
这是对 MLOps 的一个非常简化了的定义。实际上,它涉及更多的工作和好处,但如果你刚接触这些,这是一个好的开始。
现在让我们按照上面图表中所示的相同工作流程进行实践演示,请确保你已经安装了 pycaret。
让我们做一些快速可视化,以评估独立特征(重量、切工、颜色、净度等)与目标变量(即价格)的关系
让我们检查目标变量的分布。
注意价格分布是右偏的,我们可以快速检查对数变换是否能使价格近似正态分布,从而为假设正态分布的算法提供机会。
这证实了我们的假设。该变换将帮助我们摆脱偏态,使目标变量近似正态分布。基于此,我们将在训练模型之前对价格变量进行变换。
当你在 PyCaret 中初始化 setup 函数时,它会分析数据集并推断所有输入特征的数据类型。如果所有数据类型都正确推断,你可以按 Enter 继续。
注意
数据已准备好进行建模,现在让我们使用 compare_models 函数开始训练过程。它将训练模型库中所有可用的算法,并使用 k 折交叉验证评估多个性能指标。
现在让我们确定最佳模型,即在包括测试集在内的整个数据集上训练最佳模型,然后将管道保存为 pickle 文件。
save_model 函数会将整个管道(包括模型)保存为本地磁盘上的 pickle 文件。默认情况下,它会保存到你的 Notebook 或脚本所在的同一文件夹中,但你也可以传入完整的路径。
记住我们在 setup 函数中传递了 log_experiment = True 以及 experiment_name = 'diamond' 。让我们看看 PyCaret 在 MLflow 的帮助下在幕后做了什么神奇的事情。要看到这个神奇之处,让我们启动 MLflow 服务器
现在打开你的浏览器并输入“localhost:5000”。它将打开一个如下图所示的 UI
上表中每个条目代表一次训练运行,产生一个训练好的管道以及一系列元数据,例如运行的日期时间、性能指标、模型超参数、标签等。让我们点击其中一个模型
注意你有一个 logged_model 的地址路径。这是使用 Catboost Regressor 训练的管道。你可以使用 load_model 函数读取这个管道。
现在让我们使用这个管道对新数据生成预测
太棒了!我们现在从训练好的管道中得到了推断结果。如果这是你的第一个,恭喜你。注意所有转换,如目标变换、one-hot 编码、缺失值填充等,都在幕后自动发生了。你得到一个包含实际比例预测的数据框,这就是你关心的结果。
我今天展示的只是借助 MLflow 将 PyCaret 训练的管道投入生产环境的众多方法之一。在下一个教程中,我计划展示如何使用 MLflow 原生服务功能注册模型、版本化模型并将其作为 API 提供服务。
使用这个轻量级的 Python 工作流自动化库,你可以实现的目标没有限制。如果你觉得这有用,请不要忘记在我们的 GitHub 仓库给我们一个 ⭐️。
点击下方链接查看文档和工作示例。
要了解更多关于 PyCaret 的信息,你可以查看他们的.
要了解更多关于 MLflow 的信息,你可以查看.
PyCaret 的默认安装是 pycaret 的精简版本,只安装硬性依赖.
当你安装完整版 pycaret 时,所有可选依赖项,例如也会安装。MLflow 是 PyCaret 的依赖项之一,因此不需要单独安装。
在本教程中,我将使用达顿商学院发表的非常流行的案例研究,该案例发表于。该案例讲述了两个即将结婚的人的故事。一个名叫 Greg 的男人想买一枚戒指向一个名叫 Sarah 的女孩求婚。问题是找到 Sarah 会喜欢的戒指,但在他密友的建议下,Greg 决定购买一颗钻石原石,以便 Sarah 可以自己决定。Greg 随后收集了 6000 颗钻石的数据,包括它们的价格以及切工、颜色、形状等属性。
在本教程中,我将使用达顿商学院发表的非常流行的案例研究中的数据集,该案例发表于。本教程的目标是根据钻石的属性,如克拉重量、切工、颜色等,预测钻石价格。你可以从此处下载数据集.
与 PyCaret 中的所有模块一样,setup 是使用 PyCaret 进行任何机器学习实验的第一步,也是唯一强制的步骤。该函数负责在训练模型之前所需的所有数据准备工作。除了执行一些基本的默认处理任务外,PyCaret 还提供广泛的预处理功能。要了解 PyCaret 中所有预处理功能的更多信息,你可以查看此.
我传递了 log_experiment = True 和 experiment_name = 'diamond' ,这将告诉 PyCaret 在你进行建模阶段时,在幕后自动记录所有指标、超参数和模型制品。这得益于与.
此外,我在 setup 中使用了 transform_target = True。PyCaret 将在幕后使用 box-cox 变换来变换价格变量。它对数据分布的影响与对数变换类似 (技术上不同)。如果你想了解更多关于 box-cox 变换的信息,可以参考此.
要了解更多关于 PyCaret 的信息,请关注我们和.
加入我们的 Slack 频道。邀请链接.