使用PyWebIO快速部署机器学习模型

在当今的数据驱动世界中,机器学习已成为一个重要的工具,它涉及到数据收集、处理、特征提取以及从数据中得出预测或分类模型。然而,如果这些模型不能被第三方用于测试或实际应用,它们的价值就会大打折扣。将机器学习模型集成到应用程序中可能是一个独立的任务,可能需要一套不同的软件开发技能。但如果希望能够立即展示发现,而不需要额外的努力呢?如果告诉,可以用最少的代码创建一个基于Web的GUI应用程序,并且它可以轻松地部署到任何云平台,如Heroku,会怎么想?这就是PyWebIO发挥作用的地方。

PyWebIO简介

PyWebIO是一个库,它为任何基于Python的脚本提供了前端实现。它的最佳之处在于,函数调用与目前使用的非常相似。首先,通过pip安装它:

pip install pywebio

假设想要创建一个薪资预测器,根据一些初始因素预测预期薪资。将在后面构建这个机器学习模型,但为了理解这个库是如何工作的,假设薪资仅依赖于年龄和行业经验年数。因此,暂时设定这些规则(这些是没有有效证据的假设规则):

年龄 | 经验年数 | 预期薪资 16至20岁 | 少于1年 | 10000元 21至26岁 | 2至5年 | 40000元 27岁以上 | 5年以上 | 90000元

这些规则的脚本看起来像这样(没有使用PyWebIO):

# 假设脚本代码

终端输出看起来像这样:

这很无聊吗?让使用PyWebIO进行输入和输出。(本文提到的所有代码都可以在GitHub仓库中找到)

编写第一个脚本

需要从pywebio.input导入input函数。还可以指定输入类型,如FLOAT、NUMBER、TEXT、PASSWORD、URL、DATE和TIME。这创建了一个自动类型检查器,不允许任何不符合指定数据类型的值!

from pywebio.input import *

使用print函数在终端上获取输出。在这里,将使用put_text函数在网页上显示结果。这些是唯一需要的修改!新的脚本看起来像这样:

# 假设脚本代码

当运行这个脚本时,会打开一个带有输入区域的网页!自动为创建了带有按钮和框区域的Web界面。一定注意到了输入不在同一页面上。每次只能有一个输入,每次点击提交对于每个输入来说可能是耗时的。让将这些输入分组到一个页面上。

在一页上分组不同的输入

要将所有输入框放在一个页面上,需要使用input_groups。这个函数接受整个输入框的标题和要包含的输入列表。现在可能会问,将如何识别和访问这些输入?需要为列表中的每个输入传递一个name参数。

一个重要的注意事项:PyWebIO的工作方式是,如果input函数中的name参数存在,则它将被包含在input_group中,否则是独立的输入。确保只在input_group函数中定义name参数,而不是在独立输入中。

input_group返回一个字典对象,可以通过键(在这种情况下是name)轻松访问。让将其应用到旧脚本中:

# 假设脚本代码

现在所有的输入都在一个页面上可见,并且在这里提供所有这些输入将一次性给出结果!但是,由于正在构建一个机器学习模型,还向模型提供标签或分类数据(以编码形式)。

(在文章末尾实现所有类型输入的一个程序)

1. textarea:顾名思义,这个函数用于从用户那里获取长文本。这可以是任何段落或多行字符串输入。这在需要进行文本分析/预测的情况下很有用。

2. select:这个函数向用户显示一个选项列表。可以将这个实现为分类值,因为函数定义了标签和关联的值。这意味着可以将软件工程师的标签设置为2。这样,向模型传递值将变得容易。

3. checkbox:复选框有助于选择/取消选择值。这在获取反馈时很有用,例如当为文本段落预测了主题,并将预测的主题作为复选框呈现给用户时。现在,根据用户的输入,可以重新训练模型并反向传播变化。

4. radio:单选按钮对于从用户那里获得一个明确的答案很有用。这些可以是是非问题、性别选择或任何二进制类型的答案。它将对任何机器学习模型输入都很有用。

这个库中还有更多的输入类型,但这些对用例最有用。让在input_group中实现它们,并将它们的返回值仅在Web上显示:

# 假设脚本代码

现在将创建文章开头提到的机器学习模型的代码。数据集包含当前就业部门、职位角色、一些关于是否有技术栈经验的是非问题、工作评级等列。请注意,已经从GitHub上已有的模型中获得灵感,然后使用自定义重新训练了模型。这些将是模型的输入:

评级 | 工作部门 | 职位 | 熟悉Python、R、Tableau、Power BI、机器学习和深度学习

评级是浮点类型,因此将使用普通输入。对于工作部门和职位,由于它们是分类值,需要从一系列选择中选择。在数据集中有很多,已经为这个例子挑选了一些。对技术栈的熟悉是一个是/否选择,因此,单选按钮。这就是输入组的样子:

# 假设脚本代码

如果将模型加载和预测集成到脚本中,它会很好地工作,但仍然有一个错误。在所有的例子中,一旦呈现输出,网页就会变得不活跃。目前,它像终端脚本一样工作。要将其转换为重新加载的Web应用程序,需要一个服务器。PyWebIO默认带有tornado服务器。其他可用的后端包括Flask、FastAPI、Django和aiohttp。

可以参考这篇文章,其中讨论了Flask和FastAPI的主要区别。FastAPI:Flask的正确替代品。将间接使用tornado。要启动服务器,只需从PyWebIO导入start_server函数,并将要执行的函数传递给它。就是这样!整个模型预测代码可以在GitHub仓库中找到。

使用了put_markdown函数用于标题和预测。还有更多的输出函数可用,如put_html用于HTML代码,put_link,put_image等。最终的输出看起来像这样:

# 假设脚本代码

当前应用程序已部署在Heroku上。可以在测试这个应用程序。

在这篇详细的文章中,讨论了PyWebIO。涵盖了所有基本的输入输出,如何将基本脚本转换为这个库的代码,以及它如何连接到在机器学习中的用例。希望喜欢这篇文章。如果愿意,可以通过以下平台与联系:

Medium | LinkedIn | GitHub

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485