工业场景全流程!机器学习开发并部署服务到云端 ⛵

简介: 本文以保险金额预估为例,讲解机器学习从开发到云端服务部署的全流程:基于PyCaret开发机器学习全流程、基于Flask搭建简易前端Web应用程序、在Heroku云上部署机器学习应用。
f8eb45dd85d5ebbc98945f6494fa0eb3.png
💡 作者: 韩信子@ ShowMeAI
📘 机器学习实战系列https://www.showmeai.tech/tutorials/41
📘 本文地址https://www.showmeai.tech/article-detail/333
📢 声明:版权所有,转载请联系平台与作者并注明出处
📢 收藏 ShowMeAI查看更多精彩内容
783d03d5708ac55d6f9408021a25e38c.png

本篇内容 ShowMeAI 将带大家学习,从头开始构建机器学习管道,使用 Flask 框架构建 Web 应用程序,并部署到云服务器上的过程。具体包括:

f33cc23e9d9c2bb17bc8435c9f401ce1.png
  • 何为机器学习应用部署
  • 基于 PyCaret 开发机器学习全流程
  • 基于 Flask 搭建简易前端 Web 应用程序
  • 在 Heroku 云上部署机器学习应用

本示例中的应用为保险金额预估,部署好的云端服务页面如下图所示,可以点击 📘这里体验。

c010bba8a49a4195da3c12733060430e.png

💡 环境&工具

💦 PyCaret

d91b13d365b005b0b70c674a5d8f5772.png

📘PyCaret 是一个开源的低代码机器学习库,用于在生产中训练和部署机器学习管道/流水线和模型。我们可以通过pip安装 PyCaret。

# 安装pycaret
pip install pycaret

💦 Flask

383360b29f8bcedc7523b06d589c38e4.png

📘Flask 是一个用于在 Python 中构建 Web 应用程序的轻量化框架。我们本次的应用需要部署成Web端可交互操作使用的形态,会用到这个工具库,我们同样可以通过pip安装它。

# 安装flask
pip install flask

💦 Heroku

6a57be686296c0ff6ab999629dfa0a67.png

💡 部署机器学习服务

在企业的实际生产中,我们经常会把机器学习模型构建成服务形态,这样协作的开发同事可以通过接口(API)来访问模型服务,完成预估任务,这被称为部署机器学习应用过程。

更全一点说,生产中使用机器学习管道有两种广泛的方式:

  • 批量预测

将模型或管道存储在磁盘中,定期运行脚本,加载模型和数据,生成预测并将输出写入磁盘。这种情况下,多个预测会并行。它对于时效性要求不高。

  • 在线预测

需要实时预测,大家使用到的很多 app,其实都是输入信息,然后在单击提交按钮时,实时预估生成预测的。比如你在电商平台输入搜索词,点击查询,可以看到模型排序好的结果列表返回。

本教程中,我们讲解的是『在线预测』这种模式。我们将首先使用 PyCaret 在 Python 中构建机器学习管道,然后使用 Flask 构建 Web 应用程序,最后将所有这些部署在 Heroku 云上。

整个机器学习管道(pipeline)如下图所示:

a90da1019802af63a7779770f61e53c5.png

💡 场景案例&手把手

本案例中用作示例的数据来自保险场景,保险公司希望通过使用人口统计学信息和基本患者健康风险特征,更准确地预测患者保单费用,以优化其使用的现金流预测的准确性。数据是 PyCaret 自带的,数据的简单速览如下:

0840ecf04f6f096b98b1fa2d732bc52a.png

下面我们逐步完成机器学习管道构建与云端部署的过程。

💦 第一步:构建机器学习流水线

我们把整个建模过程构建为一个流水线,这里我们使用 PyCaret,几乎可以自动化地完成这个过程。

# 加载数据
from pycaret.datasets import get_data
data = get_data('insurance')

# 初始化设置
from pycaret.regression import *
s = setup(data, target = 'charges', session_id = 123, normalize = True, polynomial_features = True, trigonometry_features = True, feature_interaction=True, bin_numeric_features= ['age', 'bmi'])
5d2ae043b5e6eb9a4046d15b73e82abe.png

上述的代码会自动化完成数据转换,转换后的数据集有 62 个用于训练的特征,这些特征由原始数据集的 7 个特征变换而来。以下为对应的特征列表:

62b7e0f1614785f6e6eb66efae6cb66e.png

使用PyCaret进行建模和评估非常简单,下面示例代码中,我们选择逻辑回归模型,并进行10折交叉验证:

# 模型训练
lr = create_model('lr')
3de5ef9347f5d169a4021bdf87382af9.png
# 绘制训练模型的残差 
plot_model(lr, plot='residuals')
40986848edb1f39cd09dd6ce02a5a495.png

上述流程之后,我们可以使用该save_model函数保存整个建模流水线。

# 保存转换流水线和模型
save_model(lr, model_name='/username/ins/deployment')
a42500b040689f11c8072fce29acf172.png

这样我们就快速完成了第 1 步,注意,实际业务场景下,大家会做更精细化的数据清洗、特征工程和模型调优,我们本次的目标是给大家演示从建模到部署的全流程方法,因此这个部分相对简略。

PyCaret 自动化建模的输出是一个流水线/pipeline,包含几个数据转换步骤(如特征工程、缩放、缺失值插补等)和机器学习模型。流水线保存为pkl格式的文件,我们在后续构建 Flask 应用程序会使用到它。

💦 第二步:使用 Flask 构建前端应用程序

在完成我们的机器学习流水线和模型之后,我们要开始开发 Web 应用程序,它由两个部分组成:

  • 前端(基于 HTML 构建网页端可显示和交互的内容)
  • 后端(基于 Flask 开发完成接收请求后可以进行预估的程序)

① Web 应用前端

很多 Web 应用程序的前端都是使用 HTML 构建的,我们在本篇内容中不会深入讲解前端相关的内容。为了构建一个输入表单(以接收用户实时预估时输入的字段取值),我们基于一个基本的 HTML 模板完成前端网页,然后包含一个 CSS 样式表。

◉ HTML 代码实现

以下是我们 Web 应用程序主页的 HTML 代码。

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Predict Insurance Bill</title>
  <link href='https://fonts.googleapis.com/css?family=Pacifico' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Arimo' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Hind:300' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Open+Sans+Condensed:300' rel='stylesheet' type='text/css'>
<link type="text/css" rel="stylesheet" href="{{ url_for('static', filename='./style.css') }}">
  
</head>

<body>
 <div class="login">
    <h1>Predict Insurance Bill</h1>

     <!-- Form to enter new data for predictions  -->
    <form action="{{ url_for('predict')}}"method="POST">
      <input type="text" name="age" placeholder="Age" required="required" /><br>
        <input type="text" name="sex" placeholder="Sex" required="required" /><br>
        <input type="text" name="bmi" placeholder="BMI" required="required" /><br>
        <input type="text" name="children" placeholder="Children" required="required" /><br>
        <input type="text" name="smoker" placeholder="Smoker" required="required" /><br>
        <input type="text" name="region" placeholder="Region" required="required" /><br>

        <button type="submit" class="btn btn-primary btn-block btn-large">Predict</button>
    </form>

   <br>
   <br>
  
   
 </div>
 {{pred}}

</body>
</html>
c357663dc9e2593fa3c90111bb19f988.png
大家如果要构建简单的应用程序,不需要专门去学一遍 HTML 的高级知识。大家在互联网上可以找到大量 HTML 和 CSS 模板,甚至有些 📘 在线平台 可以通过使用拖拽构建用户界面,并快速生成对应的 HTML 代码。

◉ CSS 样式表 CSS 负责描述 HTML 元素在屏幕上的呈现样式,借助 CSS 可以非常有效地控制应用程序的布局。存储在样式表中的信息包括边距、字体大小和颜色以及背景颜色。这些信息以 CSS 扩展名的文件格式存储在外部位置,主 HTML 文件包含对 CSS 文件的引用。

87fb52b2c849501c6e6e91fd8a279630.png

② Web 应用后端

下面我们完成这个应用的后端,我们在 Python 中可以使用 Flask 工具库完成。关于 Flask 的详细知识大家可以参考 📘官方网站。我们的部分代码如下:

bfb15952654520acf27c449d6965ea6f.png

在云端部署之前,我们需要在本地测试应用是否正常工作。我们在命令行运行 python app.py

python app.py
7a7d141e4fbf29d0eff5d37b9c1ff070.png

上图中大家可以在最后一行看到本地的测试 URL,我们把它粘贴到浏览器可以查看 Web 应用程序是否正常。我们还可以通过输入一些测试数据来检查预测功能是否正常运行。如下例中,我们输入信息:19 岁、吸烟、西南地区、没有孩子、女性,模型预测住院费用为 20900 美元。

e34758e5c7e58af37ab0b0609b5534a2.png

好啦,测试完毕,完全可以正常工作,我们在下一步把它部署到云端。

💦 第三步:在 Heroku 上部署 ML 流水线和应用程序

模型训练完成后,机器学习流水线已经准备好,且完成了本地测试,我们现在准备开始部署到 Heroku。有多种方法可以完成这个步骤,最简单的是将代码上传 GitHub ,并连接 Heroku 帐户完成部署。

下图是上传好的截图,大家可以在 📘https://www.github.com/pycaret/deployment-heroku 查看。

2130b8e98d5269b40d74741fee1f7a75.png

将所有文件上传到 GitHub 后,我们就可以开始在 Heroku 上进行部署了。如下为操作步骤:

① 注册并点击 『 创建新应用 』

在 📘heroku 上可以完成上述操作,如下图所示

876efdacb8044d17e36c634a36730a95.png

② 输入应用名称和地区

cfa8fd5a2c3d35f7ee602ec916300954.png

③ 连接到托管代码的 GitHub 存储库

69450039ecfc8ff1e206fd4f0f7d83ef.png

④ 部署分支

92cf57c09070653058121a09b5e8c337.png

⑤ 等待部署完成

9b90a4d1b7815457b8c621486c7910d3.png

部署完成后,在有网络的情况下,就都可以访问对应的应用程序了 📘https ://pycaret-insurance.herokuapp.com/

f4d83d9b86267218718bdbfa21041e88.png

参考资料

e9190f41b8de4af38c8a1a0c96f0513b~tplv-k3u1fbpfcp-zoom-1.image

目录
相关文章
|
2月前
|
机器学习/深度学习 算法 算法框架/工具
为什么使用C++进行机器学习开发
C++作为一种高性能语言,在某些性能要求极高或资源受限的场景下也具有非常重要的地位。C++的高效性和对底层硬件的控制能力,使其在大规模机器学习系统中发挥重要作用,尤其是当需要处理大数据或实时响应的系统时。
41 3
|
10天前
|
机器学习/深度学习 数据采集 Python
从零到一:手把手教你完成机器学习项目,从数据预处理到模型部署全攻略
【10月更文挑战第25天】本文通过一个预测房价的案例,详细介绍了从数据预处理到模型部署的完整机器学习项目流程。涵盖数据清洗、特征选择与工程、模型训练与调优、以及使用Flask进行模型部署的步骤,帮助读者掌握机器学习的最佳实践。
35 1
|
3月前
|
人工智能 编解码 算法
使用PAI-DSW x Free Prompt Editing开发个人AIGC绘图小助理
本文介绍如何借助阿里云PAI-DSW及Free Prompt Editing算法开发个性化AIGC绘图助手,实现图像智能编辑与生成。首先需领取PAI-DSW免费试用资源并创建实例;随后通过运行教程文件完成环境搭建。WebUI界面预设了多种参数供调整,如图像分辨率、编辑层数量等,支持更改图像背景与风格等功能演示。完成实验后应及时清理资源以避免额外费用。此外,参与阿里云开发者社区的“AIGC绘图小助手”活动,不仅可获得免费云资源试用,还有机会赢得桌面折叠风扇、小度智能屏X9等礼品。
|
3月前
|
机器学习/深度学习 Kubernetes Docker
机器学习开发的灵药:Docker容器
机器学习开发的灵药:Docker容器
|
3月前
|
监控 数据安全/隐私保护 异构计算
借助PAI-EAS一键部署ChatGLM,并应用LangChain集成外部数据
【8月更文挑战第8天】借助PAI-EAS一键部署ChatGLM,并应用LangChain集成外部数据
89 1
|
3月前
|
机器学习/深度学习 数据采集 人工智能
揭秘大型机器学习模型背后的秘密:如何在技术深度与广度之间找到完美平衡点,探索那些鲜为人知的设计、训练与部署技巧,让你的作品脱颖而出!
【8月更文挑战第21天】大型机器学习模型是人工智能的关键方向,借助不断增强的计算力和海量数据,已实现在学术与产业上的重大突破。本文深入探讨大型模型从设计到部署的全过程,涉及数据预处理、模型架构(如Transformer)、训练技巧及模型压缩技术,旨在面对挑战时提供解决方案,促进AI技术的实用化进程。
69 1
|
3月前
|
机器学习/深度学习 监控 API
基于云计算的机器学习模型部署与优化
【8月更文第17天】随着云计算技术的发展,越来越多的数据科学家和工程师开始使用云平台来部署和优化机器学习模型。本文将介绍如何在主要的云计算平台上部署机器学习模型,并讨论模型优化策略,如模型压缩、超参数调优以及分布式训练。
611 2
|
3月前
|
机器学习/深度学习 JSON API
【Python奇迹】FastAPI框架大显神通:一键部署机器学习模型,让数据预测飞跃至Web舞台,震撼开启智能服务新纪元!
【8月更文挑战第16天】在数据驱动的时代,高效部署机器学习模型至关重要。FastAPI凭借其高性能与灵活性,成为搭建模型API的理想选择。本文详述了从环境准备、模型训练到使用FastAPI部署的全过程。首先,确保安装了Python及相关库(fastapi、uvicorn、scikit-learn)。接着,以线性回归为例,构建了一个预测房价的模型。通过定义FastAPI端点,实现了基于房屋大小预测价格的功能,并介绍了如何运行服务器及测试API。最终,用户可通过HTTP请求获取预测结果,极大地提升了模型的实用性和集成性。
231 1
|
3月前
|
机器学习/深度学习 人工智能 关系型数据库
【机器学习】Qwen2大模型原理、训练及推理部署实战
【机器学习】Qwen2大模型原理、训练及推理部署实战
599 0
【机器学习】Qwen2大模型原理、训练及推理部署实战
|
3月前
|
开发者 算法 虚拟化
惊爆!Uno Platform 调试与性能分析终极攻略,从工具运用到代码优化,带你攻克开发难题成就完美应用
【8月更文挑战第31天】在 Uno Platform 中,调试可通过 Visual Studio 设置断点和逐步执行代码实现,同时浏览器开发者工具有助于 Web 版本调试。性能分析则利用 Visual Studio 的性能分析器检查 CPU 和内存使用情况,还可通过记录时间戳进行简单分析。优化性能涉及代码逻辑优化、资源管理和用户界面简化,综合利用平台提供的工具和技术,确保应用高效稳定运行。
73 0

热门文章

最新文章

  • 1
    机器学习实战:房价预测项目
    201
  • 2
    强化学习(Reinforcement Learning, RL)** 是一种机器学习技术,其中智能体(Agent)通过与环境(Environment)交互来学习如何执行决策以最大化累积奖励。
    74
  • 3
    集成学习(Ensemble Learning)是一种机器学习技术,它通过将多个学习器(或称为“基学习器”、“弱学习器”)的预测结果结合起来,以提高整体预测性能。
    218
  • 4
    `sklearn.metrics`是scikit-learn库中用于评估机器学习模型性能的模块。它提供了多种评估指标,如准确率、精确率、召回率、F1分数、混淆矩阵等。这些指标可以帮助我们了解模型的性能,以便进行模型选择和调优。
    453
  • 5
    在机器学习和数据科学中,数据预处理是一个至关重要的步骤。数据规范化(或称为特征缩放)是预处理的一种常见技术,它可以帮助我们改进模型的性能。`sklearn.preprocessing`模块提供了多种数据规范化的方法,其中`StandardScaler`和`MinMaxScaler`是最常用的两种。
    88
  • 6
    在人工智能和机器学习的领域中,语音识别(Speech Recognition,SR)是一个重要的研究方向。它旨在将人类的语音转换为计算机可读的文本。
    103
  • 7
    OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
    119
  • 8
    驾驭大数据洪流:Pandas与NumPy在高效数据处理与机器学习中的核心作用
    83
  • 9
    探索机器学习在图像识别中的应用
    52
  • 10
    智能化运维:机器学习在故障预测和自动化修复中的应用
    65