我报名参与金石方案1期挑战——分割10万奖池,这是我的第15篇文章,点击查看活动详情
- 作者:韩信子@ShowMeAI
- 机器学习实战系列:www.showmeai.tech/tutorials/4…
- 本文地址:www.showmeai.tech/article-det…
- 声明:版权所有,转载请联系渠道与作者并注明出处
- 保藏ShowMeAI查看更多精彩内容
本篇内容 ShowMeAI 将带咱们学习,从头开端构建机器学习管道,运用 Flask 结构构建 Web 运用程序,并布置到云服务器上的进程。具体包括:
- 何为机器学习运用布置
- 根据 PyCaret 开发机器学习全流程
- 根据 Flask 搭建简易前端 Web 运用程序
- 在 Heroku 云上布置机器学习运用
本示例中的运用为保险金额预估,布置好的云端服务页面如下图所示,能够点击 这里体验。
环境&东西
PyCaret
PyCaret 是一个开源的低代码机器学习库,用于在生产中练习和布置机器学习管道/流水线和模型。咱们能够经过pip
装置 PyCaret。
# 装置pycaret
pip install pycaret
Flask
Flask 是一个用于在 Python 中构建 Web 运用程序的轻量化结构。咱们本次的运用需求布置成Web端可交互操作运用的形态,会用到这个东西库,咱们同样能够经过pip
装置它。
# 装置flask
pip install flask
Heroku
Heroku 是一个渠道即服务(PaaS),它支持根据托管容器系统布置 Web 运用程序,具有集成的数据服务和强大的生态系统。咱们将根据它将运用程序布置到云端,进而咱们能够直接经过 URL 在浏览器端拜访运用。
布置机器学习服务
在企业的实践生产中,咱们常常会把机器学习模型构建成服务形态,这样协作的开发同事能够经过接口(API)来拜访模型服务,完结预估任务,这被称为布置机器学习运用进程。
更全一点说,生产中运用机器学习管道有两种广泛的方式:
- 批量猜测
将模型或管道存储在磁盘中,定时运转脚本,加载模型和数据,生成猜测并将输出写入磁盘。这种情况下,多个猜测会并行。它对于时效性要求不高。
- 在线猜测
需求实时猜测,咱们运用到的许多 app,其实都是输入信息,然后在单击提交按钮时,实时预估生成猜测的。比如你在电商渠道输入搜索词,点击查询,能够看到模型排序好的成果列表回来。
本教程中,咱们解说的是『在线猜测』这种形式。咱们将首先运用 PyCaret 在 Python 中构建机器学习管道,然后运用 Flask 构建 Web 运用程序,最终将所有这些布置在 Heroku 云上。
整个机器学习管道(pipeline)如下图所示:
场景事例&手把手
本事例中用作示例的数据来自保险场景,保险公司期望经过运用人口统计学信息和根本患者健康危险特征,更精确地猜测患者保单费用,以优化其运用的现金流猜测的精确性。数据是 PyCaret 自带的,数据的简略速览如下:
下面咱们逐步完结机器学习管道构建与云端布置的进程。
第一步:构建机器学习流水线
咱们把整个建模进程构建为一个流水线,这里咱们运用 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'])
上述的代码会自动化完结数据转化,转化后的数据集有 62 个用于练习的特征,这些特征由原始数据集的 7 个特征变换而来。以下为对应的特征列表:
运用PyCaret进行建模和评价十分简略,下面示例代码中,咱们挑选逻辑回归模型,并进行10折穿插验证:
# 模型练习
lr = create_model('lr')
# 绘制练习模型的残差
plot_model(lr, plot='residuals')
上述流程之后,咱们能够运用该save_model
函数保存整个建模流水线。
# 保存转化流水线和模型
save_model(lr, model_name='/username/ins/deployment')
这样咱们就快速完结了第 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>
咱们假如要构建简略的运用程序,不需求专门去学一遍 HTML 的高级常识。咱们在互联网上能够找到大量 HTML 和 CSS 模板,甚至有些 在线渠道 能够经过运用拖拽构建用户界面,并快速生成对应的 HTML 代码。
◉ CSS 款式表 CSS 负责描绘 HTML 元素在屏幕上的出现款式,借助 CSS 能够十分有效地控制运用程序的布局。存储在款式表中的信息包括边距、字体大小和色彩以及背景色彩。这些信息以 CSS 扩展名的文件格局存储在外部位置,主 HTML 文件包括对 CSS 文件的引用。
② Web 运用后端
下面咱们完结这个运用的后端,咱们在 Python 中能够运用 Flask 东西库完结。关于 Flask 的具体常识咱们能够参阅 官方网站。咱们的部分代码如下:
在云端布置之前,咱们需求在本地测验运用是否正常作业。咱们在命令行运转 python app.py
:
python app.py
上图中咱们能够在最终一行看到本地的测验 URL,咱们把它粘贴到浏览器能够查看 Web 运用程序是否正常。咱们还能够经过输入一些测验数据来查看猜测功能是否正常运转。如下例中,咱们输入信息:19 岁、吸烟、西南地区、没有孩子、女性,模型猜测住院费用为 20900 美元。
好啦,测验完毕,完全能够正常作业,咱们在下一步把它布置到云端。
第三步:在 Heroku 上布置 ML 流水线和运用程序
模型练习完结后,机器学习流水线现已准备好,且完结了本地测验,咱们现在准备开端布置到 Heroku。有多种办法能够完结这个过程,最简略的是将代码上传 GitHub ,并衔接 Heroku 帐户完结布置。
下图是上传好的截图,咱们能够在 www.github.com/pycaret/dep… 查看。
将所有文件上传到 GitHub 后,咱们就能够开端在 Heroku 进步行布置了。如下为操作过程:
① 注册并点击 『 创立新运用 』
在 heroku 上能够完结上述操作,如下图所示
② 输入运用称号和地区
③ 衔接到托管代码的 GitHub 存储库
④ 布置分支
⑤ 等候布置完结
布置完结后,在有网络的情况下,就都能够拜访对应的运用程序了 https ://pycaret-insurance.herokuapp.com/。
参阅资料
- PyCaret:www.pycaret.org/
- Flask:flask.palletsprojects.com/en/2.2.x/
- Heroku:www.heroku.com/
- HTML 和 CSS 模板在线渠道:www.vvveb.com/vvvebjs/edi…
- Flask 的具体常识:dormousehole.readthedocs.io/en/latest/