自从20 多年前 Oracle 数据库 9i R2 发布以来,Oracle数据库就提供了内置的机器学习 (ML) 算法,使用户能够快速查找表中数据的模式和趋势并预测客户行为。这些机器学习算法使用户无需复杂的 ETL 操作即可实现机器学习模型训练和获得预测结果。当用户的数据插入或加载到 Oracle 数据库中时,这些模型可用于分类、聚类和预测,从而获得实实在在的业务价值,例如客户推荐和欺诈检测。Oracle在持续改进Oracle 数据库过程中,为Oracle数据库内机器学习(OML)不断添加新的机器学习算法和功能,正是因为Oracle数据库内机器学习操作简单、功能极其强大和丰富,越来越多企业客户使用Oracle数据库作为企业机器学习和数据挖掘平台。
本文对Oracle数据库内机器学习作一个全面的介绍,同时也会更新Oracle数据库23ai中针对OML的增强。
什么是Oracle机器学习(OML)
Oracle Machine Learning (以下简称OML)通过提供广泛的强大数据探索和准备功能,以及在 Oracle 数据库和 Oracle 自治数据库中实施的机器学习算法,为数据驱动的问题提供支持。用户可以直接通过 SQL 以及 Python 和 R API 使用数据库内机器学习算法。
Oracle 机器学习算法利用底层 SQL 功能,可以分析Oracle数据库中存储的各种数据,包括标准结构化表和视图,事务和聚合数据,甚至原始星型架构表示中的数据;使用 Oracle 文本提取令牌或主题,可以分析字符大对象 (CLOB) 数据类型中的非结构化数据。通过 Oracle 融合数据库,用户可以获得一个将机器学习与地理空间分析和属性图分析相结合的单一环境。
Oracle Machine Learning 数据库内算法利用数据库并行性进行模型构建和评分,遵循安全性和权限方案,并遵守审计跟踪数据库功能。在 Exadata(本地部署、公有云或专有云)和自治数据库上,使用 OML 数据库内模型的评分支持使用 Oracle 智能扫描技术卸载到存储层。其他一些机器学习平台面临的挑战之一是需要数据适合内存。使用 OML,数据可根据需要以增量方式导入内存。此外,模型被缓存,并且在用于评分时可以在查询之间共享。OML 利用磁盘感知结构 – 依靠数据库内存管理器在多用户环境中进行高效分配。在构建分区模型或对分区模型进行评分时,并非所有组件模型都需要一次加载。
Oracle 机器学习支持数据分析和机器学习方法的混合。例如,用户可能希望将交易数据、人口统计数据、客户服务数据和客户评论结合起来,以构建 360 度客户视图。用户可以决定对客户执行聚类分析,先对客户进行分群,然后针对每个群体构建单独的分类、回归或异常检测模型,从而提高准确性。
Oracle数据库内机器学习示例
我们展示一个如何使用SQL实现客户分类模型训练和客户行为预测的示例,让大家对OML有个快速的了解。
示例中使用的表MINING_DATA_BUILD_V结构如下,数据可以从oracle-samples(链接地址https://github.com/oracle-samples/oracle-db-examples/blob/main/machine-learning/datasets/MINING_DATA_BUILD_V.csv)中下载后直接导入到Oracle数据库中。

该表具有18列,其中CUST_ID表示客户代码,AFFINITY_CARD表示是否客户申请了认同卡,我们基于该表数据,训练和构建客户申领认同卡的模型,预测新的客户行为(申领认同卡)的可能性。
1、训练和创建模型,模型名称为DT_CLASS_CUSTVIP_MODEL
BEGIN DBMS_DATA_MINING.DROP_MODEL('DT_CLASS_CUSTVIP_MODEL');
EXCEPTION WHEN OTHERS THEN NULL; END;
/
DECLARE
v_setlst DBMS_DATA_MINING.SETTING_LIST;
BEGIN
v_setlst('PREP_AUTO') := 'ON';
v_setlst('ALGO_NAME') := 'ALGO_DECISION_TREE';
DBMS_DATA_MINING.CREATE_MODEL2(
'DT_CLASS_CUSTVIP_MODEL',
'CLASSIFICATION',
'SELECT * FROM mining_data_build_v',
v_setlst,
'CUST_ID',
'AFFINITY_CARD');
END;
/
2、使用单条实时客户数据,预测客户申领认同卡的可能性
从返回的结果可以看到这两个客户信息预测出来的申领认同卡的可能性分别为0.737和0.141;显然前者更倾向于申请使用,更值得推荐。
3、使用测试数据集,预测客户申领认同卡的可能性
从Github网站https://github.com/oracle-samples/oracle-db-examples/blob/main/machine-learning/datasets/MINING_DATA_BUILD_V.csv
SELECT * FROM
( SELECT CUST_ID, HOUSEHOLD_SIZE, YRS_RESIDENCE, Y_BOX_GAMES, Cust_Marital_status, AGE, education, occupation,
PREDICTION_PROBABILITY(DT_CLASS_CUSTVIP_MODEL, '1' USING A.*) PROBABILITY
FROM mining_data_test_v A)
WHERE PROBABILITY > 0.5;

可以看到测试表中的新客户申领认同卡的可能性。
以上快速展示了Oracle Machine Learning for SQL(OML4SQL)如何在数据库中训练构建模型和预测客户行为的可能性,短短十几行SQL代码就可以完成模型训练和预测功能,而且生成的模型存储在数据库中,受到Oracle数据库统一安全管控,整个过程可以充分利用了Oracle数据平台的企业级特性,例如集群RAC,分区,内存计算,并行等,并且可以支持本地部署和云中的Oracle数据库环境。如果用户希望对算法的超参等进行高级配置,可以访问Github网站上的oracle-samples参考详细SQL代码。
为什么选择Oracle数据库内机器学习?
从以上的示例能够看到Oracle数据库内机器学习的特点和优势,包括:
·无数据移动:某些机器学习产品要求从公司数据库导出数据并将其转换为专用格式。使用OML,不需要数据移动或转换。这使得整个过程变得不那么复杂、耗时且不易出错,并且可以充分利用数据库平台分析非常大的数据集。
·安全性:用户的数据受到 Oracle 数据库广泛的安全机制的保护。此外,不同的机器学习活动需要特定的数据库权限。只有具有适当权限的用户才能定义、操作或应用机器学习模型对象。
·数据准备和管理:大多数数据在挖掘之前必须以各种方式进行清理、过滤、标准化、采样和转换。机器学习项目中高达 80% 的工作通常致力于数据准备。OML以自动管理数据准备过程中的关键步骤。此外,Oracle 数据库还提供了广泛的管理工具来准备和管理数据。
·轻松数据刷新: Oracle 数据库中的机器学习流程可以随时访问刷新的数据。OML可以轻松地提供基于当前数据的机器学习结果,从而更好地提升及时性和相关性。
·Oracle 数据库分析:Oracle 数据库提供了许多高级分析和商业智能功能。用户可以轻松地将机器学习与数据库的其他分析功能集成,例如统计分析和地理位置分析等。
·Oracle 技术堆栈:用户可以利用 Oracle 技术堆栈的各个方面,将机器学习集成到更大的商业智能或科学探索框架中。
·领域环境:机器学习模型必须在适当的应用程序领域环境中构建、测试、验证、管理和部署。机器学习结果可能需要作为特定领域计算的一部分进行后处理(例如,计算估计风险和响应概率),然后存储到永久存储库或数据仓库中。使用OML,机器学习之前和之后的活动都可以在同一环境中完成。
·应用程序编程接口:Oracle 数据库中 机器学习功能的提供了多种访问方式,包括PL/SQL API ,SQL 语言运算符,R语言,Python接口等。
Oracle机器学习包含了哪些组件?
除了上面示例中提及的OML4SQL,Oracle机器学习还包含了众多组件,分别支持本地化部署和OCI云中部署方式,具体参见:


Oracle Machine Learning for SQL (OML4SQL) 提供强大的数据库内机器学习算法,支持使用 PL/SQL 构建模型,并使用 SQL 查询对数据进行评分以进行预测。这些可扩展的算法是并行化的,并且可针对具有内存优化的多节点集群进行扩展。这些相同的数据库内算法也通过 Python 和 R 接口、OML Notebook 和 Oracle Data Miner 公开。这将数据库扩展为企业级分析平台,用于解决数据驱动的问题,例如客户流失预测、客户细分、欺诈和异常检测、交叉销售和追加销售机会识别、市场篮子分析和预测性维护等。
OML4SQL在 Oracle 数据库中提供了强大、先进的机器学习功能。数据库中的并行算法将数据置于数据库控制之下。无需将数据提取到单独的机器学习引擎,这会增加数据访问的延迟并引发对数据安全、存储和新近度的担忧。该算法快速且可扩展,支持特定于算法的自动数据准备,并且可以批量或实时评分。用户可以使用OML4SQL构建和部署预测性和描述性机器学习应用程序,向现有应用程序添加智能功能,以及生成用于数据探索的预测查询。OML4SQL在对数据进行评分时提供解释性预测详细信息,因此用户可以了解为何进行单独预测。
OML4SQL通过 PL/SQL 和 SQL API 提供可扩展的数据库内机器学习算法。该算法快速且可扩展,支持特定于算法的自动数据准备,并且可以批量或实时评分。
OML4SQL通过 PL/SQL 和 SQL API ,提供了一组可扩展的,广泛的数据库内机器学习算法,用于执行各种机器学习任务,例如分类、回归、异常检测、特征提取、聚类和购物篮分析。这些算法可以处理标准案例数据、事务数据、星型模式和非结构化文本数据,支持特定于算法的自动数据准备,并且可以批量或实时评分,特别适合混合负载模式下的实时结果预测。具体算法请参考后文。

Oracle Machine Learning for Python (OML4Py) 使数据科学家和 Python 开发人员能够利用 Python 环境处理由 Oracle 数据库和 Oracle 自治数据库管理的数据。Python 提供了一套用于数据操作、数据探索、图形、统计函数和机器学习算法的软件包。
1. 使用重载的熟悉的 Python 语法和函数来探索和准备数据库数据,这些语法和函数可以透明地生成 SQL。
2. 使用自然 Python 接口实现了数据库内机器学习算法的调用。
3. 通过 REST 和 SQL API 通过嵌入式 Python 执行,易于部署用户定义的 Python 函数。
4. 支持自动化机器学习 (AutoML)。对于透明访问,OML4Py 会重载选定的 Python 函数,例如 Pandas DataFrame 对象上的函数,并以透明方式生成用于数据库内处理的 SQL。借助 AutoML,OML4Py 支持自动算法选择、特征选择和模型调优,以提高用户的生产力以及模型的准确性和性能。
在 Oracle 自治数据库中,OML4Py 已安装。OML4Py 安装包括 Python、其他必需的 Python 库和 OML4Py 服务器组件。自治数据库中的 Oracle Machine Learning Notebooks 包含 Python 解释器。 用户可以通过 conda 解释器在 conda 环境中安装第三方 Python 库,以便在 OML Notebooks 会话和 OML4Py 嵌入式执行调用中使用。 用户可以在本地 Oracle 数据库中安装 OML4Py。在这种情况下,用户必须安装 Python、所需的其他 Python 库、OML4Py 服务器组件和 OML4Py 客户端。

Oracle Machine Learning for R (OML4R) 通过与 Oracle 数据库和 Oracle 自治数据库集成,使开源 R 统计编程语言和环境更具可扩展性。R 为数据操作、图形、统计函数和机器学习算法提供了丰富的软件包生态系统。OML4R 通过三个主要领域扩展了 R 的功能:1、使用熟悉的 R 语法和函数探索和准备数据库数据,透明地生成 SQL;2、使用自然 R 接口使用数据库内机器学习算法;3、通过 SQL API 轻松部署具有嵌入式 R 执行的用户定义 R 函数。

Oracle Data Miner 是 Oracle SQL Developer 的扩展,可通过拖放式工作流的用户界面自动执行机器学习过程中的许多步骤。Oracle SQL Developer 是一个广泛使用的免费集成开发环境,可简化 Oracle 数据库和 Oracle 自治数据库的数据库开发和管理。借助 Oracle Data Miner,用户可以共享分析工作流并生成 SQL 脚本,以加速解决方案部署。Oracle Data Miner 还提供用于工作流调度和自动化的 PL/SQL API。

在 Oracle 自治数据库上,OML Notebooks 可帮助用户开发和运行 SQL、PL/SQL、Python 和 R 脚本,并使用 Markdown 语言编写笔记本内文档。OML Notebooks 将 Oracle 自治数据库扩展为机器学习和数据科学平台,为数据科学家、数据工程师、数据分析师、应用开发人员和 IT 专业人员(包括 DBA)提供支持。OML Notebooks 通过实时并发编辑会话、集成图形、轻松共享笔记本和模板以及基于权限的访问、版本控制和作业调度来促进协作,同时保持安全性并启用从 Oracle 数据库继承的数据的权限。

借助 Oracle 自治数据库上的 Oracle Machine Learning AutoML 用户界面,用户可以使用少量的输入(数据和要预测的目标)构建数据库内机器学习模型,而该工具将自动化完成其余工作,以生成由机器学习元模型指导的模型。OML AutoML 用户界面提高了数据科学家的工作效率,同时使非专家更容易访问机器学习。OML AutoML UI 还可以帮助用户将数据库内模型部署到 OML 服务,并使用 OML4Py Python API 为所选模型生成可编辑的笔记本。配套的 OML 模型界面可帮助用户管理模型和部署模型。

Oracle 机器学习服务支持模型管理、部署和监控,同时受益于系统提供的基础设施和集成式数据库架构。模型管理和部署服务使用户能够从本地部署 Oracle 数据库和自治数据库部署数据库内机器学习模型,用于分类、回归、聚类和特征提取机器学习技术。OML Services 支持数据库内机器学习模型以及以 ONNX 格式导出的模型。此类 ONNX 格式的模型可以与第三方软件包(如 Tensorflow、PyTorch、Scikit-learn 等)分开生成。此外,OML Services 还支持认知文本分析,包括提取主题和关键字、情感分析以及文本摘要和相似性。OML 服务针对评分进行了优化,以支持流式处理和实时应用程序。而且,与其他需要为模型预配 24*7的 VM 的解决方案不同,OML 服务包含在 Oracle 自治数据库中,因此用户在生成实际预测时只需为额外的计算付费。
Oracle不同数据库版本,部署方式对于OML不同组件的支持:

使用 Oracle Machine Learning 进行数据库内处理
Oracle 机器学习通过强大的数据库内分析功能(算法直接在数据库中对数据库数据进行操作)扩展了 Oracle 数据库和 Oracle 自治数据库,使其成为数据科学和机器学习平台。Oracle Machine Learning 数据库内模型是一流的数据库模式对象,通过调用 PL/SQL 过程或 OML4R 或 OML4Py 中的相应函数来构建。用户可以使用这些模型对数据进行评分,并通过 OML4SQL、OML4R 或 OML4Py 函数和数据库视图浏览模型详细信息(模型揭示的模式和洞察)。
在构建模型时,Oracle Machine Learning 使用标准的可扩展数据库技术,包括并行执行、位图列索引、存储级分区、查询优化和聚合技术。Oracle 机器学习还利用了定制技术,包括并行基础设施、IEEE 浮点数、INTEL数学核心函数库 (MKL)、对非结构化文本数据的支持,以及用于分箱、one-hot编码和缺失值处理的自动数据准备。
在对机器学习模型进行评分时,无论是在批处理环境中还是在联机事务处理 (OLTP) 环境中,数据库内算法作为 SQL 函数的强大功能都更加明显。用户可以获得高性能评分 – 在几秒钟内获得数百万条记录。使用 Oracle Exadata 存储单元的智能扫描技术,SQL 谓词和 OML 模型被推送到存储层进行处理。在这两种情况下,只有满足谓词的记录才会从磁盘中提取,以便在数据库内进行进一步处理。
例如,下面是一个简单的 SQL 查询,用于查找可能流失的客户:
SELECT cust_id FROM customers WHERE region='US' AND prediction_probability(churn_model,'Y' using *) > 0.8;
此查询相当于根据称为 churn_model 的模型获取流失概率超过 80%的客户标识。OML 使用 Oracle 专有的 Exadata 智能扫描技术,通过谓词函数将评分计算推送到存储层,评分性能比非智能扫描的数据库内评分快 2-5 倍。
无论是构建模型还是对数据进行评分,数据库内机器学习都可以帮助用户将数据科学项目从几天和几周简化为几秒钟、几分钟或几小时。
Oracle数据库内的优化算法
Oracle 数据库中的机器学习支持使用 SQL、R、Python、REST、自动化机器学习 (AutoML) 和无代码接口进行大规模数据探索、准备和机器学习 (ML) 建模。它包括 30 多种高性能数据库内算法,可生成可立即在应用程序中使用的模型。通过将数据保存在数据库中,组织可以简化其整体架构并维护数据同步和安全性。它使数据科学家和其他数据专业人员能够通过简化和自动化机器学习生命周期的关键元素来快速构建模型。
以下是Oracle数据库内机器学习算法和类别列表:

Oracle数据库23ai针对机器学习的增强
MSET-SPRT和XGBoost算法
Oracle在最近的版本中增加了对于机器学习 MSET-SPRT 算法和XGBoost 算法的支持:
多元状态估计技术-顺序概率比测试 ( MSET-SPRT) 算法是一种用于监控关键过程的非线性、非参数异常检测技术。该DBMS_DATA_MINING.ALGO_MSET_SPRT算法可以检测细微的异常情况,同时产生极少的误报。它根据受监控信号正常操作序列的可用历史数据来校准预期行为。它将系统学习到的行为合并到持久 MSET-SPRT模型中。用户可以将该模型应用于新记录以检测异常行为。
XGBoost 是一种高效、可扩展的梯度树增强机器学习算法,用于回归和分类。该DBMS_DATA_MINING.ALGO_XBGOOST算法准备训练数据,构建并保存模型,并应用该模型进行预测。用户可以将其用作独立预测器,也可以将其纳入现实世界的生产流程中,以解决各种问题,例如广告点击率预测、危险风险预测、网络文本分类等。
OML4SQL 中嵌入密集投影的显式语义分析支持
非结构化文本分析算法显式语义分析 (ESA) 能够输出带有嵌入的密集投影,其功能相当于流行的 doc2vec(文档到向量)表示形式。
生成 doc2vec 表示可用作其他机器学习技术(例如分类和回归)的输入,以提高其单独与文本或与其他结构化数据结合使用时的准确性。使用案例包括处理来自呼叫中心代表关于客户的注释或医生关于患者的注释的非结构化文本以及其他客户或患者结构化数据,以改善预测结果。
GLM 链接功能
数据库内广义线性模型 (GLM) 算法现在支持逻辑回归的附加链接函数:probit、cloglog 和 cauchit。这些附加的链接函数扩展了可用的集合,以匹配标准广义线性模型 (GLM) 实现。它们通过处理更广泛的目标列数据分布并扩展处理的数据集类别来提高模型质量(例如准确性)。具体来说,概率链接函数支持二元(例如,是/否)目标变量,例如在预测赢/输、流失/不流失、购买/不购买时。非对称链接函数complementary-log-log (cloglog) 支持二进制目标变量,其中一种结果相对较少,例如在预测医疗状况的复发时间时。cauchit链接功能支持更稳健地处理具有数据记录错误的数据。
XGBoost 对 OML4SQL 中的约束和生存分析的支持
数据库内 XGBoost 算法得到增强,支持机器学习技术生存分析,以及特征交互约束和单调约束。约束允许用户选择允许变量交互的方式。
生存分析是多个行业的重要机器学习技术。此增强功能可以提高模型在预测设备故障和医疗保健结果时的准确性。具体来说,这为数据科学家提供了加速故障时间 (AFT) 模型(生存分析中常用的模型之一)的支持,以补充 Cox 比例风险回归模型。交互和单调约束可以更好地控制用于通过在指定交互项时利用用户领域知识来实现更好的预测准确性的特征。
OML4Py 和 OML4R 算法和数据类型增强
Oracle Machine Learning for Python (OML4Py) API 可访问其他数据库内机器学习算法,特别是用于特征提取的非负矩阵分解 (NMF)、用于时间序列预测的指数平滑方法 (ESM) 以及用于分类和回归的极端梯度提升 (XGBoost)。OML4Py 引入了对日期、时间和整数数据类型的支持。
Oracle Machine Learning for R (OML4R) API 可访问其他数据库内机器算法,特别是用于时间序列预测的指数平滑方法 (ESM)、用于分类和回归的极限梯度提升 (XGBoost)、用于分类的随机森林以及用于预测的神经网络。
额外的数据库内算法支持使用 ESM 进行需求预测、使用随机森林进行客户流失预测和响应建模以及使用 NMF 从文档集合生成主题等用例。作为一种特征提取算法,NMF 支持降维,并作为使用其他算法建模之前的数据准备步骤。XGBoost 是一种流行的分类和回归算法,由于其高预测精度,并且还支持机器学习技术生存分析。随机森林因其高预测精度而成为一种流行的分类算法。神经网络是一种分类和回归算法,非常适合具有噪声和复杂模式的数据(例如传感器数据中的数据),并提供快速评分。
OML4Py 对日期、时间和整数数据类型的支持允许对包含这些数据类型的数据库表和视图进行操作,例如,在数据库中大规模转换和准备数据。
总结
作为 Oracle 融合数据库战略的一部分,Oracle 机器学习在 Oracle 数据库和大数据环境中提供可扩展的并行化机器学习算法。Oracle Machine Learning 提供机器学习算法,支持分类、回归、聚类、关联规则、特征提取、时间序列、排名、行重要性和异常检测。用户可以通过多个接口使用机器学习算法,包括 OML 笔记本、OML AutoML UI、适用于 SQL、R 和 Python 的常用语言 API、OML Services 和 Oracle Data Miner。
Oracle 机器学习原生算法充分利用了 Oracle 数据库的可扩展性、并行性、安全性以及结构化和非结构化数据处理能力。这使得 Oracle 成为开发机器学习解决方案并将其嵌入到本地部署或 Oracle 云的企业应用中的强大平台。Oracle 数十年的领先数据管理经验与“移动算法,而不是数据”战略相结合。通过将数据管理和机器学习集成到融合的 Oracle 数据库中,可以帮助企业大幅度降低拥有成本、消除数据移动和快速部署解决方案,从而快速启动机器学习战略和满足持续化发展需求。




