AutoML是机器学习和人工智能领域中引起广泛关注的重要工具之一。本文将带了解AutoML,这是Google Cloud AutoML提供的无需编码即可构建机器学习模型的解决方案。AutoML是Google Cloud Platform上Vertex AI的一部分,Vertex AI是构建和创建云端机器学习管道的端到端解决方案。不过,将在将来的文章中讨论Vertex AI的细节。AutoML主要依赖于两个要素:迁移学习和神经搜索架构。只需提供数据,之后AutoML将为用例构建一个最优的定制模型。
本文旨在让读者了解如何使用代码与AutoML一起工作,理解AutoML的优势,以及如何使用客户端库创建机器学习管道。本文是作为数据科学博客马拉松的一部分发布的。
构建机器学习模型是一个耗时的过程,需要大量的专业知识,比如编程语言的熟练掌握、数学和统计学的良好知识,以及对机器学习算法的理解。在过去,只有拥有技术技能的人才能在数据科学领域工作并构建模型。对于非技术人员来说,构建机器学习模型是一项极其困难的任务。然而,对于构建模型的技术人士来说,路径也不容易。一旦模型构建完成,其维护、部署和自动扩展需要额外的努力、人工小时,并且需要稍微不同的技能集。为了克服这些挑战,全球搜索巨头谷歌在2014年推出了AutoML,但后来才公开提供。
AutoML减少了手动干预,并且几乎不需要机器学习专业知识。
AutoML允许技术和非技术人员在不编写任何代码的情况下构建机器学习模型。它负责构建模型的每一个步骤,如数据预处理、特征工程、模型构建、超参数调整、模型评估和在测试数据上的预测,因此不需要编写任何代码来执行这些任务。AutoML具有直观的用户界面,并提供不同的API。AutoML还提供了Python和其他编程语言的客户端库。
AutoML支持非结构化和结构化数据,分为四种类型:图像、表格、视频和文本。有了这四种数据类型,可以执行AutoML支持的某些活动。
使用图像数据集,可以在AutoML中执行以下任务:图像分类(单标签)、图像分类(多标签)、目标检测、图像分割。
使用表格数据集,可以执行以下任务:回归、分类、时间序列预测。
使用视频数据集,可以执行以下活动:目标检测、视频动作识别、视频目标跟踪。
AutoML文本数据支持以下任务:情感分析、文本分类(单标签)、文本分类(多标签)、实体提取。
要使用AutoML,需要在Google Cloud Platform上拥有一个账户。账户设置是一个非常简单的过程,只需访问URL https://console.cloud.google.com/ 并点击加入,它会要求提供Gmail电子邮件ID和密码,然后就会在GCP上创建一个账户。点击搜索栏并搜索Vertex AI,在左侧将看到Vertex AI的所有组件,点击工作台。
工作台为提供了一个Jupyter实验室,可以在云端使用虚拟机创建一个笔记本实例。选择“用户管理的笔记本”实例,然后点击“新建笔记本”,选择Python 3并保留默认设置,它将需要两到三分钟,一个Jupyter实验室将为创建。还可以创建一个带或不带GPU的TensorFlow和PyTorch实例。点击“打开JupyterLab”,然后点击笔记本部分的Python 3 (ipykernel)。Jupyter笔记本已经准备好了;现在可以编写类似于本地Python Jupyter笔记本的代码。
将使用Python中的AutoML客户端库创建一个表格分类模型作为演示。首先,需要安装两个包。
!pip install --upgrade google-cloud-aiplatform
!pip install --upgrade google-cloud-storage
一旦这两个包成功安装,重启内核。可以通过两种方式重启内核,一种是从用户界面,从顶部栏选择“内核”选项卡,然后点击“重启内核”,第二种选项是程序性地重启。
# 重启内核
import os
if not os.getenv("IS_TESTING"):
import ipython
app = Ipython.Application.instance()
app.kernel.do_shutdown(True)
设置项目ID、存储桶名称和区域。如果不知道项目ID,运行以下代码,使用gcloud命令了解Google Cloud项目ID。
import os
PROJECT_ID = ''
if not os.getenv("IS_TESTING"):
proj_output = !gcloud config list --format 'value(core.project)' 2>/dev/null
PROJECT_ID = proj_output[0]
print("Project ID: ", PROJECT_ID)
# 设置项目ID、存储桶名称和区域
PROJECT_ID = '@YOUR PROJECT ID' #从上面的代码中可以获取项目ID
BUCKET_NAME = 'gs://PROJECT_ID' #可以设置自己的存储桶名称
REGION = 'us-west1' #如果不同,请更改区域
为什么需要存储桶名称?在AutoML中,可以使用三种方式上传数据:
在这个例子中,从云存储上传数据集,因此需要创建一个存储桶,将CSV文件上传到其中。
# 使用gsutil命令,可以在云存储中创建一个存储桶
! gsutil mb -l $REGION $BUCKET_NAME
# 检查存储桶是否已创建
! gsutil ls -al $BUCKET_NAME
# 在GCS中设置数据路径
IMPORT_FILE = 'data.csv'
gcs_path = f"{BUCKET_NAME}/{IMPORT_FILE}"
现在,需要在AutoML中创建一个数据集,然后将在该数据集上训练模型。
# 导入必要的库
import os
from google.cloud import aiplatform
# 初始化AI平台
aiplatform.init(project=PROJECT_ID, location=REGION)
# 在AutoML中创建数据集
ds = aiplatform.TabularDataset.create(
display_name = 'data_tabular', #设置自己的名称
gcs_source = gcs_path)
# 在AutoML中创建训练作业以运行模型
job = aiplatform.AutoMLTabularTrainingJob(
display_name = '#设置自己的名称',
optimization_prediction_type = 'classification',
column_transformations = [
{'categorical' : {'column_name': 'City'}}, #随机给出名称
{'numeric' : {'column_name': 'Age'}},
{'numeric' : {'column_name': 'Salary'}}])
# 运行模型
# 这将需要一些时间,取决于数据集
model = job.run(
dataset = ds,
target_column = 'Adopted',
training_fraction_split = 0.8,
test_fraction_split = 0.2,
model_display_name = '#给出自己的名称',
disable_early_stopping = False)
# 部署模型
endpoint = model.deploy(machine_type = 'n1-standard-4')
# 进行预测
pred = endpoint.prediction([
{'City': 'Madrid',
'Age': 52,
'Salary': 70000}]
)
print(pred)