构建和部署你的第一个机器学习 Web 应用
最后更新时间
这有帮助吗?
最后更新时间
这有帮助吗?
在本教程中,我们将使用 PyCaret 开发一个机器学习管道,其中包括预处理转换和一个回归模型,用于根据患者的人口统计信息和基本健康风险指标(例如年龄、BMI、吸烟状况等)来预测患者的住院费用。
什么是部署?为什么要部署机器学习模型?
使用 PyCaret 开发机器学习管道并训练模型。
使用名为“Flask”的 Python 框架构建一个简单的 Web 应用。
将 Web 应用部署到“Heroku”并查看你的模型实际运行效果。
机器学习模型的部署是指将模型投入生产环境,供 Web 应用、企业软件和 API 使用的过程,通过提供新的数据点来消耗训练好的模型并生成预测结果。
一家保险公司希望通过在患者住院时使用其人口统计信息和基本健康风险指标来更好地预测患者费用,从而改善其现金流预测。
构建一个 Web 应用,在 Web 表单中输入患者的人口统计信息和健康信息,以预测费用。
训练和验证模型,并开发用于部署的机器学习管道。
构建一个包含自变量(年龄、性别、BMI、子女数量、吸烟者、区域)输入表单的基本 HTML 前端。
使用 Flask 框架构建 Web 应用的后端。
将 Web 应用部署到 Heroku。部署后,它将公开可用,并可以通过 Web URL 访问。
在本教程中,我们进行了两次实验。第一次实验使用了 PyCaret 的默认预处理设置(缺失值插补、类别编码等)。第二次实验进行了一些额外的预处理任务,如缩放和归一化、自动特征工程以及将连续数据分箱成间隔。参见第二次实验的设置示例
只需几行代码即可实现神奇的效果。请注意,在实验 2 中,转换后的数据集用于训练的特征数量为 62 个,而原始数据集只有 7 个特征。所有新特征都是 PyCaret 中转换和自动特征工程的结果。
PyCaret 中模型训练和验证的示例代码
注意转换和自动特征工程的影响。R2 只需很少的努力就增加了 10%。我们可以比较两次实验的线性回归模型的残差图,并观察转换和特征工程对模型异方差性的影响。
机器学习是一个*迭代*过程。迭代次数和使用的技术取决于任务的关键程度以及预测错误带来的影响。预测医院重症监护室患者实时结果的机器学习模型的严重性和影响远大于预测客户流失的模型。
在本教程中,我们只进行了两次迭代,第二次实验的线性回归模型将用于部署。但是,在此阶段,模型仍然只是 Notebook 中的一个对象。要将其保存为可以传输并由其他应用程序使用的文件,请运行以下代码
在 PyCaret 中保存模型时,会根据setup() 函数中定义的配置创建整个转换管道。所有内部依赖项都会自动协调。请参阅存储在“deployment_28042020”变量中的管道和模型。
我们已经完成了训练和选择用于部署模型的第一个任务。最终的机器学习管道和线性回归模型现在已作为文件保存在本地驱动器中,位置由save_model() 函数定义。(在本例中:c:/用户名/ins/deployment_28042020.pkl)。
现在我们的机器学习管道和模型已经准备就绪,我们将开始构建一个 Web 应用,该应用可以连接到它们并对新数据进行实时预测。此应用包含两个部分
前端(使用 HTML 设计)
后端(使用 Python 中的 Flask 开发)
通常,Web 应用的前端使用 HTML 构建,这不是本文的重点。我们使用了简单的 HTML 模板和 CSS 样式表来设计一个输入表单。以下是我们 Web 应用前端页面的 HTML 代码片段。
构建简单应用不需要成为 HTML 专家。有许多免费平台提供 HTML 和 CSS 模板,并可以通过使用拖放界面快速构建漂亮的 HTML 页面。
**CSS 样式表** CSS(也称为层叠样式表)描述了 HTML 元素如何在屏幕上显示。这是控制应用布局的有效方法。样式表包含背景颜色、字体大小和颜色、边距等信息。它们作为 .css 文件外部保存,并通过包含一行代码链接到 HTML。
Web 应用的后端使用 Flask 框架开发。对于初学者来说,直观地将 Flask 视为一个库,就像在 Python 中导入其他任何库一样。请参阅使用 Python 中的 Flask 框架编写的后端代码片段示例。
如果你还记得上面的第一步,我们已经最终确定了线性回归模型,该模型是在 PyCaret 自动生成的 62 个特征上训练的。但是,我们 Web 应用的前端有一个输入表单,只收集了六个特征,即年龄、性别、BMI、子女数量、吸烟者、区域。
如何在实时将新数据点的 6 个特征转换为模型训练所用的 62 个特征?随着模型训练期间应用一系列转换,编码变得越来越复杂和耗时。
在 PyCaret 中,所有转换,如类别编码、缩放、缺失值插补、特征工程甚至特征选择,都会在生成预测之前自动实时执行。
想象一下,在可以使用模型进行预测之前,你需要编写多少代码来严格按照顺序应用所有转换。实际上,当你考虑机器学习时,你应该考虑整个机器学习管道,而不仅仅是模型本身。
**测试应用** 在将应用发布到 Heroku 之前,最后一步是在本地测试 Web 应用。打开 Anaconda Prompt 并导航到计算机上保存‘app.py’ 的文件夹。使用以下代码运行 python 文件
执行后,将 URL 复制到浏览器中,它应该会打开托管在你本地机器 (127.0.0.1) 上的 Web 应用。尝试输入测试值,看看预测函数是否正常工作。在下面的示例中,一位 19 岁、无子女、来自西南地区的女性吸烟者的预期费用为 $20,900。
恭喜!你现在已经构建了你的第一个机器学习应用。现在是时候将这个应用从本地机器迁移到云端,以便其他人可以通过 Web URL 使用它了。
现在模型已经训练完成,机器学习管道也准备好了,并且应用也在本地机器上进行了测试,我们可以开始在 Heroku 上进行部署了。将应用源代码上传到 Heroku 有几种方法。最简单的方法是将 GitHub 仓库链接到你的 Heroku 账户。
到目前为止,你应该已经熟悉了上面所示仓库中的所有文件,除了两个文件:‘requirements.txt’ 和 ‘Procfile’。
**requirements.txt** 文件是一个文本文件,其中包含执行应用所需的 python 包的名称。如果这些包未安装在应用运行的环境中,应用将失败。
**Procfile** 只是简单的一行代码,向 Web 服务器提供启动指令,指示用户登录应用时应首先执行哪个文件。在此示例中,应用文件名是 ‘**app.py’**,应用的名称也是 ‘app’。(因此是 app:app)
将所有文件上传到 GitHub 仓库后,我们现在就可以开始在 Heroku 上部署了。请按照以下步骤操作
步骤 1 — 在 heroku.com 注册并点击“创建新应用”
步骤 2 — 输入应用名称和区域
步骤 3 — 连接到托管代码的 GitHub 仓库
步骤 4 — 部署分支
步骤 5 — 等待 5-10 分钟,然后就搞定!
在结束本教程之前,还有最后一件事要看。
到目前为止,我们已经构建并部署了一个与我们的机器学习管道协同工作的 Web 应用。现在假设你已经有一个企业应用,并希望将模型的预测集成到其中。你所需要的是一个 Web 服务,你可以通过 API 调用提供输入数据点并获取预测结果。为了实现这一点,我们在‘app.py’ 文件中创建了predict_api 函数。请参阅代码片段
以下是如何在 Python 中使用 requests 库调用此 Web 服务
在下一篇关于部署机器学习管道的教程中,我们将深入探讨如何使用 Docker 容器部署机器学习管道。我们将演示如何在 Linux 上轻松部署和运行容器化的机器学习应用。
截至首次发布 1.0.0 版本,PyCaret 提供了以下可用的模块。点击下面的链接查看文档和 Python 中的实际示例。
PyCaret Notebook 入门教程
在我们的我们演示了如何使用在 Power BI 中训练和部署机器学习模型。如果你之前没听说过 PyCaret,请阅读我们的快速入门。
是一个开源、低代码的 Python 机器学习库,用于在生产环境中训练和部署机器学习管道和模型。PyCaret 可以使用 pip 轻松安装。
是一个允许你构建 Web 应用的框架。Web 应用可以是商业网站、博客、电子商务系统,或者是一个使用训练好的模型实时从提供的数据中生成预测的应用。如果你没有安装 Flask,可以使用 pip 进行安装。
是一个基于云的服务,用于托管、管理和控制代码。想象一下,你正在一个大型团队中工作,多个人(有时是几百人)正在进行更改。PyCaret 本身就是一个开源项目的例子,数百名社区开发者持续为源代码做贡献。如果你之前没使用过 GitHub,可以获取免费账户。
是一个平台即服务(PaaS),它支持基于托管容器系统部署 Web 应用,集成了数据服务和强大的生态系统。简单来说,这将允许你将应用从本地机器迁移到云端,以便任何人都可以使用 Web URL 访问它。在本教程中,我们选择 Heroku 进行部署,因为它在你新账户时提供免费资源时长。
通常构建机器学习模型是为了预测结果(对于,对于,对于等等)。有两种主要的预测方式:(i) 批量预测;(ii) 实时预测。在我们的我们演示了如何在 Power BI 中部署机器学习模型并进行批量预测。在本教程中,我们将了解如何部署机器学习模型进行实时预测。
()
训练和模型验证在集成开发环境 (IDE) 或 Notebook 中进行,无论是在本地机器还是云端。在本教程中,我们将在 Jupyter Notebook 中使用 PyCaret 开发机器学习管道并训练回归模型。如果你之前没使用过 PyCaret,了解更多关于 PyCaret 的信息,或者查看在我们的.
如果你想跟着做,可以 fork 这个来自 GitHub 仓库。如果你不知道如何 fork 仓库,请官方 GitHub 教程。
应用已发布到 URL
关注我们的并订阅我们的频道,了解更多关于 PyCaret 的信息。
我们正在积极改进 PyCaret。我们未来的开发路线图包括一个新的时间序列预测模块、与TensorFlow 的集成以及 PyCaret 可扩展性的重大改进。如果您想分享您的反馈并帮助我们进一步改进,可以在网站上,或在我们的或页面上留言。
PyCaret 是一个开源项目。欢迎所有人贡献。如果您想贡献,请随意处理。dev-1.0.1 分支接受包含单元测试的拉取请求。
请在我们的上给我们点亮 ⭐️,如果您喜欢 PyCaret。
Medium