构建和部署你的第一个机器学习 Web 应用
构建和部署你的第一个机器学习 Web 应用
一位初学者的指南:使用 PyCaret 在 Python 中训练和部署机器学习流水线
作者:Moez Ali
在我们的上一篇文章中,我们演示了如何使用PyCaret在 Power BI 中训练和部署机器学习模型。如果你之前没有听说过 PyCaret,请阅读我们的公告以快速入门。
在本教程中,我们将使用 PyCaret 开发一个机器学习流水线,其中包括预处理转换和回归模型,用于根据人口统计学和基本患者健康风险指标(如年龄、BMI、吸烟状况等)预测患者住院费用。
👉 你将在本教程中学到什么
- 什么是部署,以及为什么要部署机器学习模型。
- 使用 PyCaret 开发机器学习流水线并训练模型。
- 使用名为“Flask”的 Python 框架构建一个简单的 Web 应用程序。
- 在“Heroku”上部署 Web 应用程序并查看你的模型运行情况。
💻 本教程中我们将使用哪些工具?
PyCaret
PyCaret 是一个开源的、低代码的 Python 机器学习库,用于在生产环境中训练和部署机器学习流水线和模型。可以使用 pip 轻松安装 PyCaret。
# 适用于本地计算机上的 Jupyter 笔记本
pip install pycaret
# 适用于 Azure 笔记本和 Google Colab
!pip install pycaret
Flask
Flask 是一个框架,可以用于构建 Web 应用程序。Web 应用程序可以是商业网站、博客、电子商务系统,或者是使用训练好的模型实时生成预测结果的应用程序。如果你还没有安装 Flask,可以使用 pip 安装它。
# 安装 Flask
pip install Flask
GitHub
GitHub 是一个基于云的服务,用于托管、管理和控制代码。想象一下,你正在一个大型团队中工作,有多个人(有时是数百人)在进行更改。PyCaret 本身就是一个开源项目的例子,数百名社区开发人员不断为源代码做出贡献。如果你之前没有使用过 GitHub,可以注册一个免费账户。
Heroku
Heroku 是一个平台即服务(PaaS),它基于托管容器系统,提供集成的数据服务和强大的生态系统,可以部署 Web 应用程序。简单来说,这将允许你将应用程序从本地计算机部署到云端,以便任何人都可以使用 Web URL 访问它。在本教程中,我们选择使用 Heroku 进行部署,因为当你注册一个新账户时,它提供免费的资源时间。
为什么要部署机器学习模型?
部署机器学习模型是将模型在生产环境中提供给 Web 应用程序、企业软件和 API 使用的过程,这些应用程序和软件可以通过提供新数据点并生成预测来使用训练好的模型。
通常,机器学习模型的构建是为了用于预测结果(分类问题的二进制值,如 1 或 0,回归问题的连续值,聚类问题的标签等)。生成预测的方式有两种:(i)批量预测;(ii)实时预测。在我们的上一个教程中,我们演示了如何在 Power BI 中部署机器学习模型并进行批量预测。在本教程中,我们将看到如何部署一个机器学习模型以进行实时预测。
业务问题
一家保险公司希望通过在患者住院时使用人口统计学和基本患者健康风险指标来更好地预测患者费用,从而改进其现金流预测。
(数据来源)
目标
构建一个 Web 应用程序,在 Web 表单中输入患者的人口统计学和健康信息,以预测费用。
任务
- 训练和验证模型,并开发一个机器学习流水线以进行部署。
- 使用一个基本的 HTML 前端构建一个包含独立变量(年龄、性别、BMI、子女数、吸烟者、地区)输入表单。
- 使用 Flask 框架构建 Web 应用程序的后端。
- 在 Heroku 上部署 Web 应用。一旦部署完成,它将变为公开可访问,并可以通过 Web URL 访问。
👉 任务 1 — 模型训练和验证
在集成开发环境(IDE)或笔记本中进行模型训练和验证,可以在本地计算机上或云端进行。在本教程中,我们将使用 Jupyter Notebook 中的 PyCaret 来开发机器学习流水线并训练回归模型。如果您之前没有使用过 PyCaret,点击这里 了解更多关于 PyCaret 的信息,或查看我们网站上的 入门教程。
在本教程中,我们进行了两个实验。第一个实验使用 PyCaret 中的默认预处理设置(缺失值填充、分类编码等)。第二个实验包含一些额外的预处理任务,如缩放和归一化、自动特征工程以及将连续数据分成区间。查看第二个实验的设置示例:
# 实验 2
from pycaret.regression import *
r2 = setup(data, target = 'charges', session_id = 123,
normalize = True,
polynomial_features = True, trigonometry_features = True,
feature_interaction=True,
bin_numeric_features= ['age', 'bmi'])
只需几行代码,就能实现神奇的效果。请注意,在实验 2中,经过转换的数据集有 62 个特征用于训练,而这些特征仅来自原始数据集中的 7 个特征。所有新特征都是在 PyCaret 中的转换和自动特征工程的结果。
PyCaret 中模型训练和验证的示例代码:
# 模型训练和验证
lr = create_model('lr')
请注意转换和自动特征工程的影响。R2 值增加了 10%,而付出的努力 却很少。我们可以比较两个实验中线性回归模型的残差图,观察转换和特征工程对模型异方差性的影响。
# 绘制训练模型的残差图
plot_model(lr, plot = 'residuals')
机器学习是一个迭代过程。迭代次数和使用的技术取决于任务的重要性,以及如果预测错误会产生什么影响。在医院 ICU 实时预测患者结果的机器学习模型的严重性和影响远远大于用于预测客户流失的模型。
在本教程中,我们仅进行了两次迭代,第二个实验中的线性回归模型将用于部署。然而,在这个阶段,模型仍然只是笔记本中的一个对象。要将其保存为可以传输并被其他应用程序使用的文件,请运行以下代码:
# 保存转换流水线和模型
save_model(lr, model_name = 'c:/*username*/ins/deployment_28042020')
在 PyCaret 中保存模型时,基于在**setup()**函数中定义的配置创建整个转换流水线。所有相互依赖关系都会自动协调。查看存储在 'deployment_28042020' 变量中的流水线和模型:
我们已经完成了训练和选择模型以进行部署的第一个任务。最终的机器学习流水线和线性回归模型现在以文件的形式保存在本地驱动器中,位置在**save_model()**函数中定义的位置。(在此示例中:c:/username/ins/deployment_28042020.pkl)。
👉 任务 2 — 构建 Web 应用程序
现在我们的机器学习流水线和模型已经准备就绪,我们将开始构建一个可以连接到它们并实时生成新数据预测的 Web 应用程序。此应用程序有两个部分:
- 前端(使用 HTML 设计)
- 后端(使用 Python 中的 Flask 开发)