在 机器学习 Studio 中执行 Python 机器学习脚本(经典版)
适用于:机器学习 Studio(经典版)Azure 机器学习
重要
对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习。
从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。
ML 工作室(经典)文档即将停用,将来可能不会更新。
Python 是许多数据科学家工具箱中的一个有价值的工具。 它用于典型机器学习工作流的每个阶段,包括数据探索、特征提取、模型训练和验证以及部署。
本文介绍如何通过“执行 Python 脚本”模块在机器学习工作室(经典版)试验和 Web 服务中使用 Python 代码。
使用执行 Python 脚本模块
Studio 中 Python 的主要接口(经典版)是通过 执行 Python 脚本 模块。 它最多接受三个输入并生成最多两个输出,类似于 执行 R 脚本 模块。 Python 代码通过一 azureml_main
个名为特殊命名的入口点函数输入到参数框中。
输入参数
Python 模块的输入公开为 Pandas 数据帧。 该 azureml_main
函数最多接受两个可选的 Pandas 数据帧作为参数。
可以定位输入端口和函数参数之间的映射:
- 第一个连接的输入端口映射到函数的第一个参数。
- 第二个输入(如果已连接)映射到函数的第二个参数。
- 第三个输入用于 导入其他 Python 模块。
下面显示了有关输入端口如何映射到函数参数的 azureml_main
更详细的语义。
输出返回值
该 azureml_main
函数必须返回打包在 Python 序列 中的单个 Pandas 数据帧,例如元组、列表或 NumPy 数组。 此序列的第一个元素将返回到模块的第一个输出端口。 模块的第二个输出端口用于 可视化效果 ,不需要返回值。 此方案如下所示。
输入和输出数据类型的转换
工作室数据集与 Panda DataFrame 不同。 因此,工作室(经典)中的输入数据集将转换为 Pandas 数据帧,输出数据帧将转换回 Studio(经典)数据集。 在此转换过程中,还将执行以下翻译:
Python 数据类型 | 工作室翻译过程 |
---|---|
字符串和数字 | 按原样翻译 |
Pandas “NA” | 已转换为“缺失值” |
索引向量 | 支持* |
非字符串列名称 | 调用 str 列名 |
复制列名 | 添加数字后缀:(1)、(2)、(3)等。 |
*Python 函数中的所有输入数据帧始终具有 64 位的数字索引,范围从 0 到行数减去 1 的值。
导入现有的 Python 脚本模块
用于执行 Python 的后端基于 Anaconda,这是一种广泛使用的科学 Python 分发。 它附带了近 200 个在以数据为中心的工作负载中使用的最常见 Python 包。 工作室(经典版)目前不支持使用 Pip 或 Conda 等包管理系统来安装和管理外部库。 如果发现需要合并其他库,请使用以下方案作为指南。
常见的用例是将现有 Python 脚本合并到工作室(经典)试验中。 执行 Python 脚本模块接受包含第三个输入端口上的 Python 模块的 zip 文件。 在运行时执行框架会解压缩该文件,内容将添加到 Python 解释器的库路径。 然后,azureml_main
入口点函数可直接导入这些模块。
例如,请考虑包含简单“Hello, World”函数的文件 Hello.py。
接下来,我们创建包含 Hello.py 的 Hello.zip 文件:
将 zip 文件作为数据集上传到工作室(经典)。 然后创建并运行一个试验,该试验使用 Hello.zip 文件中的 Python 代码,方法是将其附加到执行 Python 脚本模块的第三个输入端口,如下图所示。
模块输出显示,zip 文件未打包,并且函数 print_hello
已运行。
访问Azure 存储 Blob
可以使用以下步骤访问存储在Azure Blob 存储帐户中的数据:
- 在本地下载适用于 Python 的 Azure Blob 存储 包。
- 将 zip 文件作为数据集上传到工作室(经典)工作区。
- 使用 创建 BlobService 对象
protocol='http'
from azure.storage.blob import BlockBlobService
# Create the BlockBlockService that is used to call the Blob service for the storage account
block_blob_service = BlockBlobService(account_name='account_name', account_key='account_key', protocol='http')
- 在“存储配置”设置选项卡中禁用所需的安全传输
实现 Python 脚本
任何在评分实验中使用的执行 Python 脚本模块在发布为 Web 服务时都将受到调用。 例如,下图显示了一个评分实验,其中包含用于计算单个 Python 表达式的代码。
从此试验创建的 Web 服务将执行以下操作:
- 将 Python 表达式作为输入(作为字符串)
- 将 Python 表达式发送到 Python 解释器
- 返回包含表达式和计算结果的表。
使用可视化效果
使用 MatplotLib 创建的绘图可由执行 Python 脚本返回。 但是,绘图不会在使用 R 时自动重定向到图像。因此,用户必须将任何绘图显式保存到 PNG 文件。
若要从 MatplotLib 生成图像,必须执行以下步骤:
- 将后端从默认的基于 Qt 的呈现器切换到“AGG”。
- 创建新的图形对象。
- 获取轴并生成其中的所有绘图。
- 将该图保存到 PNG 文件。
下图演示了此过程,这些图像使用 Pandas 中的scatter_matrix函数创建散点图矩阵。
通过将多个数字保存到不同的图像中,可以返回多个数据。 工作室(经典)运行时会选取所有图像,并连接它们进行可视化。
高级示例
Studio(经典)中安装的 Anaconda 环境包含常见包,例如 NumPy、SciPy 和 Scikits-Learn。 这些包可以有效地用于机器学习管道中的数据处理。
例如,以下试验和脚本演示了如何使用 Scikits-Learn 中的合奏学习器计算数据集的特征重要性分数。 分数可用于在馈送到另一个模型之前执行监督功能选择。
下面演示如何使用 Python 函数计算重要性评分,并根据评分为特征排序:
以下实验则在机器学习工作室(经典版)的“Pima Indian Diabetes”数据集中计算并返回功能的重要性得分:
限制
执行 Python 脚本模块当前具有以下限制:
沙盒执行
Python 运行时当前已沙盒化,不允许以持久性方式访问网络或本地文件系统。 所有本地保存的文件都将隔离,并在模块完成后删除。 Python 代码无法访问运行它的计算机上的大部分目录,当前目录及其子目录除外。
缺乏复杂的开发和调试支持
Python 模块当前不支持诸如 intellisense 和调试等 IDE 功能。 此外,如果模块在运行时失败,则整个 Python 堆栈跟踪可用。 但必须在模块的输出日志中查看跟踪。 我们目前建议在诸如 IPython 的环境中开发和调试 Python 脚本,然后将代码导入模块。
单个数据帧输出
Python 入口点仅允许将单个数据帧返回为输出。 目前无法将任意 Python 对象(如训练的模型)直接返回工作室(经典)运行时。 就像具有相同限制的执行 R 脚本一样,在许多情况下可将对象转换为字节数组,并在数据帧中返回字节数组。
无法自定义 Python 安装
当前添加自定义 Python 模块的唯一方法是如前所述的使用 zip 文件机制。 虽然这对于小型模块来说可行,但对于大型模块(尤其是具有本机 DLL 的模块)或大量模块来说,这很麻烦。
后续步骤
有关详细信息,请参阅 Python 开发人员中心。