目录
机器学习项目的开始阶段通常涉及到探索性数据分析 (EDA)、数据预处理(清理、特征工程)以及生成机器学习模型原型来验证假设,本教程介绍如何执行下列操作:将数据上传到云存储空间,创建 Azure 机器学习数据资产,访问笔记本中的数据以进行交互式开发, 创建新版本的数据资产。
关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。
一、环境准备
-
若要使用 Azure 机器学习,你首先需要一个工作区。 如果没有工作区,请完成创建开始使用所需的资源以创建工作区并详细了解如何使用它。
-
登录到工作室,选择工作区(如果尚未打开)。
-
在工作区中打开或创建一个笔记本:
- 如果要将代码复制/粘贴到单元格中,请创建新的笔记本。
- 或者从工作室的"示例 "部分打开 tutorials/get-started-notebooks/explore-data.ipynb 。 然后选择"克隆 ",将笔记本添加到你的"文件"。
二、设置内核
- 在打开的笔记本上方的顶部栏中,创建一个计算实例(如果还没有计算实例)。
- 如果计算实例已停止,请选择"启动计算",并等待它运行。
- 确保右上角的内核为
Python 3.10 - SDK v2
。 如果不是,请使用下拉列表选择此内核。
- 如果看到一个横幅,提示你需要进行身份验证,请选择"身份验证"。
三、下载使用的数据
本文使用此 CSV 格式的信用卡客户数据示例作为示例。 我们可以看到 Azure 机器学习资源中的步骤继续执行。 在该资源中,我们将直接在此笔记本所在的文件夹下创建一个本地文件夹,并使用建议的名称"data"。
- 选择三点下方的"打开终端",如此图所示:
-
终端窗口将在新选项卡中打开。
-
请确保
cd
此笔记本所在的同一文件夹。 例如,如果笔记本位于名为 get-started-notebooks 的文件夹中:cd get-started-notebooks # modify this to the path where your notebook is located
-
在终端窗口中输入以下命令,将数据复制到计算实例:
mkdir data cd data # the sub-folder where you'll store the data wget https://azuremlexamples.blob.core.windows.net/datasets/credit_card/default_of_credit_card_clients.csv
-
现在可以关闭终端窗口。
四、创建工作区的句柄
在深入了解代码之前,需要一种方法来引用工作区。 你将为工作区句柄创建 ml_client
。 然后,你将使用 ml_client
来管理资源和作业。
在下一个单元格中,输入你的订阅 ID、资源组名称和工作区名称。 若要查找这些值:
-
在右上方的 Azure 机器学习工作室工具栏中,选择你的工作区名称。
-
将工作区、资源组和订阅 ID 的值复制到代码中。
-
需要复制一个值,关闭区域并粘贴,然后返回下一个值。
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypesauthenticate
credential = DefaultAzureCredential()
Get a handle to the workspace
ml_client = MLClient(
credential=credential,
subscription_id="<SUBSCRIPTION_ID>",
resource_group_name="<RESOURCE_GROUP>",
workspace_name="<AML_WORKSPACE_NAME>",
)
五、将数据上传到云存储空间
Azure 机器学习使用统一资源标识符 (URI),它们指向云中的存储位置。 使用 URI 可以轻松访问笔记本和作业中的数据。 数据 URI 格式类似于在 Web 浏览器中用于访问网页的 Web URL。 例如:
- 从公共 https 服务器访问数据:
https://<account_name>.blob.core.windows.net/<container_name>/<folder>/<file>
- 从 Azure Data Lake Gen 2 访问数据:
abfss://<file_system>@<account_name>.dfs.core.windows.net/<folder>/<file>
Azure 机器学习数据资产类似于 Web 浏览器书签(收藏夹)。 可以创建数据资产,然后使用易记名称访问该资产,而无需记住指向最常用数据的冗长存储路径 (URI)。
通过创建数据资产,还可以创建对数据源位置的引用及其元数据的副本。 由于数据保留在其现有位置中,因此不会产生额外的存储成本,也不会损害数据源的完整性。 可以从 Azure 机器学习数据存储、Azure 存储、公共 URL 和本地文件创建数据资产。
下一个笔记本单元格会创建数据资产。 此代码示例将原始数据文件上传到指定的云存储资源。
每次创建数据资产时,都需要为其创建唯一版本。 如果版本已存在,则会收到错误。 在此代码中,我们将对数据第一次读取使用"initial"。 如果该版本已存在,我们将跳过再次创建它。
还可以省略 version 参数,版本号会为你生成,从 1 开始,然后递增。
在本文中,我们使用名称"initial"作为第一个版本。 创建生产机器学习管道教程也将使用此版本的数据,因此在这里,我们使用你将在该教程中再次看到的值。
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes
# update the 'my_path' variable to match the location of where you downloaded the data on your
# local filesystem
my_path = "./data/default_of_credit_card_clients.csv"
# set the version number of the data asset
v1 = "initial"
my_data = Data(
name="credit-card",
version=v1,
description="Credit card data",
path=my_path,
type=AssetTypes.URI_FILE,
)
## create data asset if it doesn't already exist:
try:
data_asset = ml_client.data.get(name="credit-card", version=v1)
print(
f"Data asset already exists. Name: {my_data.name}, version: {my_data.version}"
)
except:
ml_client.data.create_or_update(my_data)
print(f"Data asset created. Name: {my_data.name}, version: {my_data.version}")
可以通过选择左侧的"数据"来查看上传的数据。 你将看到数据已上传且数据资产已创建:
此数据命名为 credit-card ,在"数据资产 "选项卡中,可以在"名称 "列中看到它。 此数据上传到工作区的默认数据存储 workspaceblobstore ,显示在"数据源"列中。
Azure 机器学习数据存储是对 Azure 上现有存储帐户的引用。 数据存储具有以下优势:
- 一种通用且易用的 API,可以与不同的存储类型(Blob/文件/Azure Data Lake Storage)和身份验证方法进行交互。
- 一种在团队协作时更轻松地发现有用的数据存储的方式。
- 在你的脚本中,隐藏基于凭据的数据访问连接信息的方法(服务主体/SAS/密钥)。
六、访问笔记本中的数据
Pandas 直接支持 URI - 此示例演示如何从 Azure 机器学习数据存储读取 CSV 文件:
import pandas as pd
df = pd.read_csv("azureml://subscriptions/<subid>/resourcegroups/<rgname>/workspaces/<workspace_name>/datastores/<datastore_name>/paths/<folder>/<filename>.csv")
# 但是,如前所述,可能很难记住这些 URI。 此外,必须手动将 **pd.read\_csv** 命令中的所有 **<_substring_\>** 值替换为资源的实际值。
# 需要为经常访问的数据创建数据资产。 下面是在 Pandas 中访问 CSV 文件的更简单的方法:
%pip install -U azureml-fsspec
import pandas as pd
# get a handle of the data asset and print the URI
data_asset = ml_client.data.get(name="credit-card", version=v1)
print(f"Data asset URI: {data_asset.path}")
# read into pandas - note that you will see 2 headers in your data frame - that is ok, for now
df = pd.read_csv(data_asset.path)
df.head()
阅读在交互式开发期间从 Azure 云存储访问数据,详细了解笔记本中的数据访问。
七、创建新版本的数据资产
你可能已注意到,数据需要稍微清理一下,使其适合训练机器学习模型。 它具有:
- 两个标头
- 客户端 ID 列;我们不会在机器学习中使用此功能
- 响应变量名称中的空格
此外,与 CSV 格式相比,Parquet 文件格式成为存储此数据的更好方法。 Parquet 可提供压缩,并维护架构。 因此,若要清理数据并将其存储在 Parquet 中,请使用:
# read in data again, this time using the 2nd row as the header
df = pd.read_csv(data_asset.path, header=1)
# rename column
df.rename(columns={"default payment next month": "default"}, inplace=True)
# remove ID column
df.drop("ID", axis=1, inplace=True)
# write file to filesystem
df.to_parquet("./data/cleaned-credit-card.parquet")
此表显示了在前面的步骤中下载的原始 default_of_credit_card_clients.csv .CSV 文件中的数据结构。 上传的数据包含 23 个解释变量和 1 个响应变量,如下所示:
列名 | 变量类型 | 说明 |
---|---|---|
X1 | 解释型 | 给予的信贷金额(新台币):它包括个人消费信贷和他们的家庭(附加)信贷。 |
X2 | 解释型 | 性别(1 = 男性;2 = 女性)。 |
X3 | 解释型 | 教育(1 = 研究生;2 = 本科;3 = 高中;4 = 其他)。 |
X4 | 解释型 | 婚姻状况(1 = 已婚;2 = 单身;3 = 其他)。 |
X5 | 解释型 | 年龄(年)。 |
X6-X11 | 解释型 | 过去付款的历史记录。 我们跟踪了过去的每月付款记录(从 2005 年 4 月到 9 月)。 -1 = 按期付款;1 = 付款延迟一个月;2 = 付款延迟两个月; . 8 = 付款延迟 8 个月;9 = 付款延迟 9 个月及以上。 |
X12-17 | 解释型 | 2005 年 4 月到 9 月账单金额流水(新台币)。 |
X18-23 | 解释型 | 2005 年 4 月到 9 月的先前付款金额(新台币)。 |
Y | 响应 | 默认付款(是 = 1,否 = 0) |
接下来,创建数据资产的新_版本_(数据会自动上传到云存储空间)。 对于此版本,我们将添加一个时间值,以便每次运行此代码时,都会创建不同的版本号。
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes
import time
# Next, create a new *version* of the data asset (the data is automatically uploaded to cloud storage):
v2 = "cleaned" + time.strftime("%Y.%m.%d.%H%M%S", time.gmtime())
my_path = "./data/cleaned-credit-card.parquet"
# Define the data asset, and use tags to make it clear the asset can be used in training
my_data = Data(
name="credit-card",
version=v2,
description="Default of credit card clients data.",
tags={"training_data": "true", "format": "parquet"},
path=my_path,
type=AssetTypes.URI_FILE,
)
## create the data asset
my_data = ml_client.data.create_or_update(my_data)
print(f"Data asset created. Name: {my_data.name}, version: {my_data.version}")
清理的 parquet 文件是最新版本的数据源。 此代码先显示 CSV 版本结果集,然后显示 Parquet 版本:
import pandas as pd
# get a handle of the data asset and print the URI
data_asset_v1 = ml_client.data.get(name="credit-card", version=v1)
data_asset_v2 = ml_client.data.get(name="credit-card", version=v2)
# print the v1 data
print(f"V1 Data asset URI: {data_asset_v1.path}")
v1df = pd.read_csv(data_asset_v1.path)
print(v1df.head(5))
# print the v2 data
print(
"_____________________________________________________________________________________________________________\n"
)
print(f"V2 Data asset URI: {data_asset_v2.path}")
v2df = pd.read_parquet(data_asset_v2.path)
print(v2df.head(5))
八、清理资源
停止计算实例
如果不打算现在使用它,请停止计算实例:
- 在工作室的左侧导航区域中,选择"计算"。
- 在顶部选项卡中,选择"计算实例"
- 在列表中选择该计算实例。
- 在顶部工具栏中,选择"停止"。
删除所有资源
如果你不打算使用已创建的任何资源,请删除它们,以免产生任何费用:
-
在 Azure 门户中,选择最左侧的"资源组" 。
-
从列表中选择你创建的资源组。
-
选择"删除资源组"。
- 输入资源组名称。 然后选择"删除"。
关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。