探索机器学习:从数据处理到模型部署
一、数据查询与分析基础
1.1 多数据源数据查询
Oracle Cloud SQL 具备强大的查询能力,可对存储于多个大数据源中的非关系型数据进行查询。这些数据源包括:
- Apache Hive
- HDFS
- Oracle NoSQL Database
- Apache Kafka
- Apache HBase
- 对象存储(Oracle 对象存储和 S3)
1.2 结合 OML4Spark 与 Oracle Cloud SQL 进行分析
将 OML4Spark 与 Oracle Cloud SQL 相结合,能够开展大规模的数据驱动分析,并在大数据、关系型数据或二者的组合中发现模式。OML4Spark 在分布式集群中提供可扩展的数据摄取和数据预处理功能,是复杂机器学习管道的重要组成部分。
二、自动化数据处理与特征工程
2.1 通用数据处理自动化
OML 自动化数据准备(ADP)支持常见的数据转换任务,例如分箱、归一化以及异常值/缺失值插补。ADP 可配置为自动执行特定算法所需的转换。不同算法下 ADP 的转换操作如下表所示:
| 算法 | ADP 执行的转换 |
| ---- | ---- |
| GLM | 数值属性归一化 |
| k - Means | 数值属性归一化 |
| MDL | 所有属性使用监督分箱进行分箱 |
| 朴素贝叶斯 | 所有属性使用监督分箱进行分箱 |
| NMF | 数值属性归一化 |
| O - cluster | 数值属性使用特殊形式的等宽分箱进行分箱,自动计算每个属性的分箱数,移除全为 null 或单一值的数值列 |
| SVD | 数值属性归一化 |
用户可以在自动转换的基础上补充额外的转换,也可以选择自行处理所有转换。
2.2 文本处理自动化
对于文本处理,OML 会自动处理文本列,基于 TF - IDF 分数提取标记。得到的稀疏标记化数据会自动与提供的训练数据集中的其他特征集成,并提供给算法。
2.3 AutoML 功能
即将推出的 Oracle Machine Learning for Python(OML4Py)引入了 AutoML 新特性,它包括自动模型选择、特征选择和超参数调整。
-
自动模型选择
:自动模型选择能够识别出在数据库中比穷举搜索更快实现最高模型质量的算法。
-
自动特征选择
:自动特征选择通过识别最相关的特征来减少特征数量,从而提高模型性能和准确性。
-
自动超参数调整
:自动超参数调整在机器学习的指导下显著提高模型准确性,避免手动或穷举搜索技术。
三、可扩展的数据库内模型训练与评分
3.1 数据库内并行执行
3.1.1 嵌入式算法实现并行执行
嵌入在 Oracle 数据库内核中的 OML 算法可消除数据从数据库中移动的问题。以 Oracle Machine Learning for R 中的嵌入式 R 执行函数为例,它们支持数据库内并行执行。为支持嵌入式 R 执行,Oracle 数据库承担以下责任:
1. 通过在数据库服务器上生成多个服务器端 R 引擎来管理和控制 R 脚本的执行。
2. 自动对数据进行分区并将其传递给并行执行的 R 引擎。
3. 通过 ore.frame 代理对象引用数据,避免从 Oracle 数据库移动数据。
4. 确保所有数据/任务分区的 R 引擎执行完成,若未完成则返回错误。
5. 以 ore.list 格式提供每个用户定义的嵌入式 R 函数的执行结果,该列表会存储在数据库中,直到用户需要结果。
3.1.2 不同类型的并行执行
- 任务并行执行 :通过 ore.indexApply 函数进行任务并行执行时,用户定义的函数会被划分为多个任务,这些任务会分配给一个或多个 R 引擎进行处理。任务并行能力在模拟、实验等场景中非常有价值,或者当整个模型太大无法在单个 R 引擎中运行时也很有用。
-
数据并行执行
:
- 通过 ore.groupApply 和 rq.groupEval 函数进行数据并行执行时,一个或多个 R 引擎会对不同的数据分区执行相同的用户定义 R 函数或任务。基于组的数据并行执行可实现大量的并行模型训练会话。
- 通过 ore.rowApply 和 rq.rowEval 函数进行数据并行执行时,一个或多个 R 引擎会对数据批次(按行)执行相同的用户定义 R 函数。基于行的数据并行执行适用于对大型数据集进行可扩展的模型评分。
3.1.3 并行度与执行环境
ore.groupApply、ore.rowApply 和 ore.indexApply 函数依赖其 parallel 参数来指定嵌入式 R 执行中使用的并行度。对于 SQL 等效函数 rq.groupEval 和 rq.rowEval,并行度由输入游标参数中的 PARALLEL 提示指定。rq.groupEval 和 rq.rowEval 函数可在 SQL 环境(如 SQL*Plus)中实现并行执行,而 ore.groupApply、ore.rowApply 和 ore.indexApply 函数则可在 R 环境中实现并行执行。需要注意的是,使用 ore.doEval 或 ore.tableApply 调用的用户定义 R 函数永远不会并行执行。
3.2 分区模型的数据库内并行执行
分区模型是一种集成模型,OML 中的分区模型功能可根据一个或多个列自动对数据进行分区。OML4SQL 会为分区构建、组织、维护和持久化子模型。子模型在顶级模型实体中以分区的形式表示,使用户能够轻松构建和管理针对独立数据切片定制的多个模型。在对分区模型进行评分时,必须在 USING 子句中包含分区列。分区模型的构建过程如下:
1. 用户从输入数据集中指定一个分区键(即逗号分隔的列列表)。
2. 输入数据根据分区键的不同值被切片成多个数据分区。
3. 每个数据切片对应一个模型分区,但子模型不是独立的模型,用户不可见。最大分区数可配置,默认值为 1000 个分区。
4. 子模型使用数据库内并行执行进行训练。
5. 用户直接访问顶级模型进行模型评分。
需要注意的是,分区键仅支持 NUMBER 和 VARCHAR2 列数据类型。
3.3 集群内并行执行
OML4Spark 可以访问整个 Hadoop 集群,执行并行、分布式机器学习算法,包括:
- OML4Spark 算法,如深度神经网络、自定义线性模型(LM)、ELM、广义线性模型(GLM)、H - ELM、PCA 和 SCD 等。这些算法针对 Spark 并行执行进行了优化,性能优于 Spark MLlib。
- Spark MLlib 算法,如 GLM、LM、梯度提升树、PCA、k - means、SVM、LASSO、岭回归、决策树和随机森林等。
- 基于 R 的通用并行、分布式 MapReduce 作业,借助开源 CRAN 包实现。
类似的核心功能也可在 Java 库中使用,可从任何 Java 或 Scala 平台调用。
四、模型管理
4.1 模型存储与查询
Oracle Machine Learning 支持用户在 Oracle 数据库内构建和部署预测模型。为支持模型管理和模型分析,训练好的模型及相关信息(训练/测试数据、版本、参数等)必须持久化。如果模型在 Oracle 数据库中创建,模型及相关信息会存储在以下特定的数据库表和视图中,用户可以查询这些表和视图来了解模型:
- ALL_MINING_MODELS:该视图包含当前用户可访问的所有 OML 模型的记录,每条记录包含模型所有者、名称、创建日期、大小和模型算法(分类、回归、聚类等)等详细信息。
- ALL_MINING_MODEL_ATTRIBUTES:该视图包含用于构建模型的训练数据中各列的信息。
- ALL_MINING_MODEL_SETTINGS:该视图描述了训练模型所使用的参数。
- ALL_MINING_MODEL_VIEWS:该视图描述了用户可访问的所有模型视图。
4.2 使用 R 数据存储保存模型
ML 管道由在会话中运行的脚本(如 R)编排和驱动,R 允许会话中的任何 R 对象持久化到磁盘并在不同 R 会话中重新加载。OML 支持使用 Oracle 数据库中的 R 数据存储进行对象持久化。通过数据存储可以实现模型注册表,它可以跟踪训练模型的多个版本以及相应的训练/测试数据集、特征、参数和其他模型评分、监控和管理所需的元数据。Oracle R Enterprise(ORE)作为 Oracle Machine Learning 平台的关键元素,支持将训练好的模型(如 “mod”)以及元数据作为 R 对象持久化到数据库中。ORE 代理对象(如 “IRIS”)以及任何 R 对象(如 “tree10” 和 “ans”)都可以作为命名实体(如 “iris_class_model_v1_ds”)在 Oracle 数据库中保存和恢复。用户可以选择覆盖或删除数据存储。在 Oracle 数据库中,可以使用数据存储名称检索任何保存的训练模型及其所有相关元数据、训练/测试集、指标和超参数,这种持久化机制允许可靠地重复任何实验,而无需专门管理磁盘上的文件。
五、利用开源包增强 ML 管道功能
5.1 TensorFlow Extended(TFX)进行数据验证
TensorFlow Data Validation(TFDV)是 TensorFlow Extended 的一个组件,但可以在不依赖 TFX 的情况下部署。TFDV 验证可应用于输入数据和预测值中的所有重要特征/标签,支持以下异常检测用例:
-
基于模式的验证
:根据数据类型、范围和其他统计信息对照模式进行有效性检查,所有异常都会作为数据验证的结果报告。用户可以使用 infer_schema() 方法自动从任何输入数据集中生成模式的初始版本,并根据需要修改生成的模式,而无需手动从头构建模式。
-
训练和服务偏差检测
:检测训练数据和服务数据之间的以下类型的偏差:
- 模式偏差:检测训练数据集和服务数据集是否符合相同的模式。
- 特征偏差:检测训练期间的特征值是否与服务时的特征值不同。
- 分布偏差:检测训练数据的特征值分布是否与服务数据有显著差异。
-
漂移检测
:数据漂移检测涉及比较一系列数据,仅对连续两个数据集(如连续几天的训练数据)中的分类特征进行比较,漂移以 L - 无穷距离衡量。用户可以定义可接受的阈值距离值,当漂移高于阈值时会收到通知。
5.2 scikit - multiflow 进行模型监控
基于自适应窗口算法(ADWIN),scikit - multiflow Python 包可以检测动态环境中的概念漂移变化。每当向数据中添加新值时,ADWIN 会跟踪自适应窗口内数据的一些统计属性,包括所有值的总和、窗口宽度和总方差。通过 detected_change() 方法指示变化。一旦检测到变化,自动 ML 管道将被触发重新启动,使用最新的数据集训练模型。如果需要手动调查或代码更改,更显著的漂移会通知数据科学家,新代码可以触发整个 ML 管道的重新部署。
5.3 Kubeflow 实现云原生 ML 管道部署
Kubeflow 是一个开源项目,可实现云原生 ML 管道部署,适用于任何符合 Kubernetes 标准的集群(云环境或本地环境)。使用 Kubeflow 可以完成以下操作:
- 使用 Jupyter Notebook 开发模型。
- 使用 Kale 将 Jupyter Notebook 转换为 ML 管道,Kubeflow 控制器会自动启动并协调管道步骤的 Pod。
- 使用 Kubeflow 仪表板查看管道运行图,所有管道运行都会保存以便查看/重新运行。
- 使用 Katib 提交或监控超参数调整作业。
- 使用 KFServing 创建和部署推理服务器。
- 使用自定义资源(如 TFJob 或 PyTorch)简化深度学习框架(如 TensorFlow 和 PyTorch)的分布式训练。定义 TFJob 或 PyTorch 资源后,自定义控制器会负责启动和管理所有单个 Pod,并配置它们相互通信。
六、构建可重现的 ML 管道示例
6.1 ML 管道步骤
以一个实际的监督机器学习模型为例,展示如何将开源包集成到 OML 平台,实现 ML 管道的端到端自动化,并跟踪 ML 管道所有工件(源代码、数据、模型、指标等)的版本,使管道实验可重现。ML 管道包括以下步骤:
1. 数据提取
2. 数据验证
3. 特征工程
4. 数据准备
5. 模型训练
6. 模型评估
7. 模型验证
8. 模型监控
6.2 开源包的集成
在示例中,Oracle Machine Learning(OML)组件提供了大部分功能,如数据安全、可扩展的模型训练和模型评分。为了实现额外的管道功能或特定定制,通过 OML4Py 或 OML4R 将开源包集成到 ML 管道中。示例中使用的开源包包括:
- TensorFlow Data Validation(TFDV):用于数据验证和模型监控。
- Data Version Control(DVC):用于 ML 管道实验跟踪。
在示例中,开源包用 Python 编写,但选择的 OML 集成机制是 OML4R,通过 Python 子进程模块连接到 Rscript 中的 OML 客户端代码。
6.3 环境搭建
为了实现上述 ML 管道示例,需要了解 OML 客户端和服务器以及开源组件(如 DVC 和 TFDV)的软件栈,并掌握主要的安装和配置步骤。
通过上述介绍,我们可以看到 Oracle Machine Learning 在数据处理、模型训练、评分和管理等方面提供了强大的功能,结合开源包的使用,能够进一步增强 ML 管道的功能,实现端到端的机器学习解决方案。
七、环境搭建与配置详细步骤
7.1 OML 客户端与服务器软件栈
OML 客户端和服务器构成了整个机器学习环境的基础。OML 客户端是用户与系统交互的界面,可通过不同的 API(如 OML4R、OML4Py、OML4SQL、OML4Spark)实现与服务器的通信。OML 服务器则负责执行具体的机器学习任务,包括模型训练、评分等操作。
7.2 开源组件安装
7.2.1 TensorFlow Extended(TFX)与 TensorFlow Data Validation(TFDV)
安装 TFX 和 TFDV 可以使用 Python 的包管理工具 pip。具体步骤如下:
1. 打开命令行终端。
2. 输入以下命令安装 TFX:
pip install tfx
- 由于 TFDV 是 TFX 的一个组件,安装 TFX 后 TFDV 也会被安装。可以通过以下命令验证 TFDV 是否安装成功:
import tensorflow_data_validation as tfdv
print(tfdv.__version__)
7.2.2 Data Version Control(DVC)
安装 DVC 同样可以使用 pip,步骤如下:
1. 打开命令行终端。
2. 输入以下命令安装 DVC:
pip install dvc
- 安装完成后,可以通过以下命令验证 DVC 是否安装成功:
dvc --version
7.2.3 scikit - multiflow
安装 scikit - multiflow 可以使用以下命令:
pip install scikit - multiflow
安装完成后,可以通过以下 Python 代码验证是否安装成功:
import skmultiflow
print(skmultiflow.__version__)
7.2.4 Kubeflow
Kubeflow 的安装相对复杂,因为它依赖于 Kubernetes 集群。以下是大致的安装步骤:
1. 确保已经有一个符合 Kubernetes 标准的集群(可以是云环境或本地环境)。
2. 下载并安装 Kustomize,用于管理 Kubeflow 的配置。
3. 使用 Kustomize 部署 Kubeflow 到 Kubernetes 集群中。具体命令如下:
kubectl apply -k "github.com/kubeflow/manifests/kustomize/cluster - basic?ref=v1.7.0"
- 等待 Kubeflow 部署完成,可以通过以下命令检查部署状态:
kubectl get pods -n kubeflow
7.3 配置步骤
7.3.1 OML 客户端与服务器配置
配置 OML 客户端与服务器需要确保它们之间的网络连接正常,并且客户端可以通过相应的 API 访问服务器。具体配置步骤如下:
1. 配置 OML 客户端的连接信息,包括服务器的 IP 地址、端口号等。
2. 确保客户端和服务器使用相同的数据库实例和用户权限。
3. 测试客户端与服务器的连接,例如使用 OML4R 或 OML4Py 编写简单的代码进行连接测试。
7.3.2 开源组件配置
不同的开源组件有不同的配置需求:
-
TFDV
:在使用 TFDV 进行数据验证时,需要配置数据的输入路径、模式文件的存储路径等。可以通过 Python 代码进行配置,例如:
import tensorflow_data_validation as tfdv
# 配置输入数据路径
input_data_path = 'path/to/your/data.csv'
# 生成模式
stats = tfdv.generate_statistics_from_csv(data_location=input_data_path)
schema = tfdv.infer_schema(statistics=stats)
# 保存模式
tfdv.write_schema_text(schema, 'path/to/schema.pbtxt')
- DVC :需要配置数据存储的远程仓库,例如使用 Git 作为版本控制工具,将数据存储在远程的 Git 仓库中。具体配置步骤如下:
# 初始化 DVC 项目
dvc init
# 配置远程仓库
dvc remote add -d myremote ssh://user@server/path/to/repo
# 推送数据到远程仓库
dvc push
- Kubeflow :需要配置 Kubeflow 的各种组件,例如 Jupyter Notebook、Kale、Katib 等。可以通过修改 Kubernetes 的配置文件进行配置。
八、ML 管道实验可重复性实现
8.1 版本跟踪的重要性
在机器学习项目中,版本跟踪至关重要。它可以确保实验的可重复性,让不同的团队成员能够在相同的环境下复现实验结果。通过跟踪源代码、数据、模型、指标等所有工件的版本,可以清晰地了解每个实验的具体情况,便于进行问题排查和模型优化。
8.2 使用 DVC 进行实验跟踪
DVC 是一个专门用于机器学习实验跟踪的工具,它可以与 Git 集成,实现对数据和模型的版本控制。以下是使用 DVC 进行实验跟踪的具体步骤:
1.
初始化 DVC 项目
:在项目根目录下执行以下命令:
dvc init
- 添加数据到 DVC 管理 :将需要跟踪的数据集添加到 DVC 管理中,例如:
dvc add data.csv
- 配置远程存储 :将数据存储到远程仓库,例如:
dvc remote add -d myremote ssh://user@server/path/to/repo
- 推送数据到远程仓库 :
dvc push
- 跟踪模型和指标 :在模型训练完成后,将模型文件和评估指标添加到 DVC 管理中,例如:
dvc add model.pkl metrics.json
- 提交版本信息到 Git :将 DVC 生成的文件和相关的源代码提交到 Git 仓库,例如:
git add data.csv.dvc model.pkl.dvc metrics.json.dvc
git commit -m "Add data, model and metrics"
8.3 确保实验可重复性的其他方法
除了使用 DVC 进行版本跟踪外,还可以通过以下方法确保实验的可重复性:
-
固定依赖版本
:在项目中使用 requirements.txt 文件固定所有依赖库的版本,例如:
tensorflow==2.8.0
pandas==1.4.2
scikit - learn==1.1.1
- 记录实验参数 :在每次实验中记录所有的实验参数,包括模型的超参数、数据预处理的参数等。可以将这些参数存储在一个配置文件中,例如 JSON 文件:
{
"model": {
"learning_rate": 0.001,
"batch_size": 32,
"epochs": 10
},
"data_preprocessing": {
"normalization": true,
"feature_selection": ["feature1", "feature2"]
}
}
九、总结
通过以上内容,我们全面了解了如何利用 Oracle Machine Learning 构建端到端的机器学习管道。从数据查询与分析基础,到自动化数据处理与特征工程,再到可扩展的数据库内模型训练与评分,以及模型管理和利用开源包增强 ML 管道功能,最后实现 ML 管道实验的可重复性。
整个过程中,我们介绍了多个关键技术和工具:
1.
Oracle Cloud SQL
:用于多数据源数据查询。
2.
OML4Spark
:实现集群内并行执行,提高模型训练和评分的效率。
3.
AutoML
:包括自动模型选择、特征选择和超参数调整,提高模型性能。
4.
开源包
:如 TensorFlow Extended(TFX)、scikit - multiflow、Kubeflow 等,增强 ML 管道的功能。
5.
DVC
:用于实验跟踪,确保实验的可重复性。
通过合理运用这些技术和工具,我们可以构建出高效、可扩展、可重复的机器学习管道,满足不同场景下的机器学习需求。
下面是一个 mermaid 流程图,展示了整个 ML 管道的主要步骤:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke - width:2px;
A(数据提取):::process --> B(数据验证):::process
B --> C(特征工程):::process
C --> D(数据准备):::process
D --> E(模型训练):::process
E --> F(模型评估):::process
F --> G(模型验证):::process
G --> H(模型监控):::process
I(TensorFlow Data Validation):::process --> B
J(Data Version Control):::process --> A
J --> E
J --> F
K(Kubeflow):::process --> E
K --> H
这个流程图清晰地展示了 ML 管道的主要步骤以及开源包在其中的作用,帮助我们更好地理解整个机器学习过程。通过不断优化和改进这个管道,我们可以在实际项目中取得更好的机器学习效果。
超级会员免费看

被折叠的 条评论
为什么被折叠?



