本系列介绍 开发和部署 ( M L ) 模型 。在这篇文章中,您 训练并保存 ML 模型 ,因此它可以作为 ML 系统的一部分部署。 第 1 部分给出了一个 ML 工作流概括 ,考虑了使用机器学习和数据科学实现商业价值所涉及的各个阶段。第 3 部分介绍 如何部署 ML 模型到 Google 云平台 ( GCP )。
培训一个可以作为机器学习系统一部分的模型需要了解您的数据、业务目标以及许多其他技术和组织要求。
在本文中,您创建了一个 Python 脚本,当执行该脚本时,它训练一个 ML 模型,然后将其保存以供将来使用。
首先,我强调了为应用程序训练 ML 模型时的一些重要考虑事项。
培训模型前的注意事项
从模型选择到数据集的复杂性和大小,数据从业者必须战略性地规划资源和期望的需求。在培训模型之前要考虑的因素包括:
- 型号的选择
- 解释能力
- 模型超参数
- 硬件的选择
- 数据大小
型号的选择
您可以使用许多类 ML 模型来解决问题。您选择的模型取决于您的用例和可能的约束。
解释能力
如果要将您的模型部署为在受监管行业(如金融或医疗保健)中运行的系统的一部分,则您的模型可能是 explainable 。这意味着,对于模型做出的任何预测,都可以说明模型做出该决定的原因。
在这种情况下,您可能希望使用易于解释的 linear regression 或 logistic regression 等模型。
模型超参数
模型具有可调超参数。了解这些超参数对应于什么以及它们如何影响模型非常重要。
根据超参数的选择,模型的性能可能会发生很大变化。
硬件的选择
大多数数据从业者都知道,模型训练通常可以在 GPU 上加速。但即使在您进入模型训练阶段之前, GPU 也可以极大地帮助您的数据科学工作流。
从预处理管道到数据探索和可视化,一切都可以加快。这有助于您更快地迭代并尝试更昂贵的计算技术。
数据大小
当处理比一个内核或机器上的内存更大的数据时,重要的是要考虑充分利用所有数据的技术。
也许使用 RAPID 等工具转移到 GPU 来加速 pandas 和 scikit-learn 风格的工作流是有意义的。或者你可能想研究一个扩展框架,比如 Dask ,它可以扩展模型训练和数据处理,无论你是在 CPU 还是 GPU 上工作。
了解数据集
在本文中,您在一个经典数据集上训练一个模型: UCI Machine Learning Repository 中的 Iris Dataset 。这个数据集包含 150 朵鸢尾花的花瓣长度和宽度以及萼片长度和宽度的记录。每个虹膜属于三种类型之一: setosa 、 virginica 或 versicolor 。
你使用这些数据来训练分类模型,目的是根据花瓣和萼片的尺寸来预测虹膜的类型。
CPU 培训
在部署 ML 模型之前,必须首先构建一个 ML 模型。首先下载流行的 Iris Dataset 。本示例假设虹膜数据集已下载并保存为当前工作目录中的iris.data
。
要训练逻辑回归模型,请执行以下步骤:
- 阅读培训数据。
- 将训练数据拆分为要素和标签。
- 将数据分成训练和测试集( 75% 是训练数据, 25% 是测试数据)。
- 训练 Logistic Regression 模型。
- 坚持训练后的模型。
import joblib
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
def run_training():
"""
Train the model
"""
# Read the training data
dataset = pd.read_csv(
filepath_or_buffer="iris.data",
names=["sepal_length_cm", "sepal_width_cm", "petal_length_cm", "petal_width_cm", "class"]
)
# Split into labels and targets
X = dataset.drop("class", axis=1).copy()
y = dataset["class"].copy()
# Create train and test set
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=26)
# Training the model
model = LogisticRegression(random_state=26)
model.fit(X_train, y_train)
# Persist the trained model
joblib.dump(model, "logistic_regression_v1.pkl")
if __name__ == "__main__":
run_training()
train_test_split
和LogisticRegression
调用中的random_state
参数有助于确保该脚本每次运行时都产生相同的结果。
运行脚本会生成一个保存在文件logistic_regression_v1.pkl
中的模型,您可以使用该模型根据花瓣和萼片的尺寸对其他虹膜进行分类。
GPU 加速模型训练
在本例中,您使用的是一个小数据集,仅包含 150 行数据。由于数据的简单性,该模型在 CPU 上几秒钟就能训练。
然而,在处理真实世界数据集时,模型训练成为瓶颈并不罕见。在这种情况下,通常可以通过使用 GPU 而不是 CPU 来加快工作流的模型训练阶段。
例如, RAPIDS 提供了一套开源软件工具,使数据科学家和工程师能够在 GPU 上快速运行工作负载和数据科学管道。通过模仿常见数据科学库(如pandas
和scikit-learn
)的 API ,您可以通过少量代码更改来加快机器学习模型训练(以及探索性数据科学)。
接下来是什么?
现在您已经有了一个经过培训的模型,可以考虑将其部署到生产环境中。在下一篇文章 Machine Learning in Practice: Deploy an ML Model on Google Cloud Platform 中,您将学习在 GCP 上部署模型的三种方法。
寻求从数据摄取到部署机器学习的帮助或指导?加入 Data Processing 论坛。