Vertica 提供了管理模型的多种函数。
1 - EXPORT_MODELS
导出机器学习模型。Vertica 支持三种模型格式:
-
原生 Vertica (VERTICA_MODELS)
-
PMML
-
TensorFlow
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
EXPORT_MODELS ( 'output-dir', 'export-target' [ USING PARAMETERS category = 'model-category' ] )
参数
-
output-dir
- 用于存储导出模型的输出目录的绝对路径。
-
export-target
- 指定要导出的模型,如下所示:
[schema.]{ model‑name | * }
其中 schema 指定从指定的架构导出模型(可选)。如果忽略,EXPORT_MODELS 使用默认架构。提供
*
(星号)以从架构中导出所有模型。
参数
category
- 要导出的模型类别,为以下之一:
-
VERTICA_MODELS
-
PMML
-
TENSORFLOW
EXPORT_MODELS 根据导出操作的范围导出指定类别的模型,即应用于单个模型,还是应用于架构中的所有模型。请参阅下面的导出范围和类别处理。
下文导出的文件描述了 EXPORT_MODELS 为每个类别导出的文件。
如果忽略此参数,EXPORT_MODELS 将根据模型类型导出模型或指定架构中的模型。
-
特权
超级用户
导出范围和类别处理
EXPORT_MODELS 根据以下参数设置执行:
-
导出操作的范围:单个模型,或给定架构中的所有模型
-
指定或忽略的类别
下表显示了这两个参数如何控制导出过程:
导出的文件
EXPORT_MODELS 为每个模型类别导出以下文件:
类别和兼容模型
如果 EXPORT_MODELS 指定单个模型并且还设置了 category
参数,则如果模型类型和类别兼容,则函数成功;否则,它会返回错误:
如果 EXPORT_MODELS 指定从架构中导出所有模型并设置类别,它会针对与该类别不兼容的每个模型发出警告消息。该函数随后继续处理该架构中的剩余模型。
EXPORT_MODELS 在
output-dir/export_log.json
中记录所有错误和警告。
示例
导出模型而不更改其类别:
-
导出模型
myschema.mykmeansmodel
而不更改其类别:=> SELECT EXPORT_MODELS ('/home/dbadmin', 'myschema.mykmeansmodel'); EXPORT_MODELS ---------------- Success (1 row)
-
导出架构
myschema
中的所有模型而不更改其类别:=> SELECT EXPORT_MODELS ('/home/dbadmin', 'myschema.*'); EXPORT_MODELS ---------------- Success (1 row)
导出与指定类别兼容的模型:
注意
当您导入在不同版本的 Vertica 中训练的 VERTICA_MODELS 类别模型时,Vertica 会自动升级模型版本以匹配数据库的版本。如果失败,您必须运行 UPGRADE_MODEL。
如果两种方法都失败,则该模型不能用于数据库内评分,也不能导出为 PMML 模型。
-
类别设置为 PMML。PMML 和 VERTICA_MODELS 类型的模型与 PMML 类别兼容,因此如果
my_keans
属于任一类型,则导出操作成功:=> SELECT EXPORT_MODELS ('/tmp/', 'my_kmeans' USING PARAMETERS category='PMML');
-
类别设置为 VERTICA_MODELS。只有 VERTICA_MODELS 类型的模型与 VERTICA_MODELS 类别兼容,因此只有当
my_keans
属于该类型时,导出操作才会成功:=> SELECT EXPORT_MODELS ('/tmp/', 'public.my_kmeans' USING PARAMETERS category='VERTICA_MODELS');
-
类别设置为 TENSORFLOW。只有 TensorFlow 类型的模型与 TENSORFLOW 类别兼容,因此模型
tf_mnist_keras
必须为 TensorFlow 类型:=> SELECT EXPORT_MODELS ('/tmp/', 'tf_mnist_keras', USING PARAMETERS category='TENSORFLOW'); export_models --------------- Success (1 row)
导出 TensorFlow 模型 tf_mnist_keras 后,列出导出的文件:
$ ls tf_mnist_keras/
crc.json metadata.json mnist_keras.pb model.json tf_model_desc.json
另请参阅
IMPORT_MODELS2 - GET_MODEL_ATTRIBUTE
从模型中提取某个特定属性或从模型中提取所有属性。使用此函数可查看属性列表和行数,或查看有关单个属性的详细信息。GET_MODEL_ATTRIBUTE 的输出是一种表格格式,用户可以在其中选择特定的列或行。
语法
GET_MODEL_ATTRIBUTE ( USING PARAMETERS model_name = 'model‑name' [, attr_name = 'attribute' ] )
参数
model_name
模型的名称(不区分大小写)。
attr_name
- 要提取的模型属性的名称。如果忽略,该函数将显示所有可用属性。属性名称区分大小写。
特权
非超级用户:模型所有者或模型的使用权限
示例
此示例返回所有模型属性的摘要。
=> SELECT GET_MODEL_ATTRIBUTE ( USING PARAMETERS model_name='myLinearRegModel');
attr_name | attr_fields | #_of_rows
-------------------+---------------------------------------------------+-----------
details | predictor, coefficient, std_err, t_value, p_value | 2
regularization | type, lambda | 1
iteration_count | iteration_count | 1
rejected_row_count | rejected_row_count | 1
accepted_row_count | accepted_row_count | 1
call_string | call_string | 1
(6 rows)
此示例从 myLinearRegModel
模型中提取 details
属性。
=> SELECT GET_MODEL_ATTRIBUTE ( USING PARAMETERS model_name='myLinearRegModel', attr_name='details');
coeffNames | coeff | stdErr | zValue | pValue
-----------+--------------------+---------------------+-------------------+-----------------------
Intercept | -1.87401598641074 | 0.160143331525544 | -11.7021169008952 | 7.3592939615234e-26
waiting | 0.0756279479518627 | 0.00221854185633525 | 34.0890336307608 | 8.13028381124448e-100
(2 rows)
3 - GET_MODEL_SUMMARY
返回模型的摘要信息。
语法
GET_MODEL_SUMMARY ( USING PARAMETERS model_name = 'model‑name' )
参数
- model_name
模型的名称(不区分大小写)。
特权
非超级用户:模型所有者或模型的使用权限
示例
此示例说明如何查看线性回归模型的摘要。
=> SELECT GET_MODEL_SUMMARY( USING PARAMETERS model_name='myLinearRegModel');
--------------------------------------------------------------------------------
=======
details
=======
predictor|coefficient|std_err |t_value |p_value
---------+-----------+--------+--------+--------
Intercept| -2.06795 | 0.21063|-9.81782| 0.00000
waiting | 0.07876 | 0.00292|26.96925| 0.00000
==============
regularization
==============
type| lambda
----+--------
none| 1.00000
===========
call_string
===========
linear_reg('public.linear_reg_faithful', 'faithful_training', '"eruptions"', 'waiting'
USING PARAMETERS optimizer='bfgs', epsilon=1e-06, max_iterations=100,
regularization='none', lambda=1)
===============
Additional Info
===============
Name |Value
------------------+-----
iteration_count | 3
rejected_row_count| 0
accepted_row_count| 162
(1 row)
4 - IMPORT_MODELS
将以下模型导入 Vertica:通过 EXPORT_MODELS 导出的 Vertica 模型,或预测模型标记语言 (PMML) 或 TensorFlow 格式的模型。您可以使用此函数在 Vertica 群集之间移动模型,或导入在其他地方训练的 PMML 和 TensorFlow 模型。
GET_MODEL_SUMMARY 和 GET_MODEL_ATTRIBUTE 等其他 Vertica 模型管理操作支持导入的模型。
当心
更改导出的模型文件会导致导入功能在尝试重新导入时失败。这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
IMPORT_MODELS ( 'source'
[ USING PARAMETERS [ new_schema = 'schema‑name' ] [, category = 'model-category' ] ] )
参数
- 源
- 导入模型的位置的绝对路径,为以下之一:
-
单个模型的目录:
path/model-directory
-
多个模型目录的父目录:
parent-dir-path/*
-
参数
new_schema
- 导入机器学习模型的现有架构。如果忽略,模型将被导入默认架构。
IMPORT_MODELS 从其
metadata.json
文件中提取导入模型的名称(如果存在)。否则,该函数使用模型目录的名称。 category
- 指定要导入的模型的类别,为以下之一:
-
VERTICA_MODELS
-
PMML
-
TENSORFLOW
如果模型目录没有
metadata.json
文件,则需要此参数。如果以下情况之一为 true,则 IMPORT_MODELS 返回错误:-
未指定类别且模型目录没有
metadata.json
。 -
指定的类别与模型类型不匹配。
注意
如果类别为 TENSORFLOW,则 IMPORT_MODELS 仅从模型目录中导入以下文件:
-
特权
超级用户
要求和限制
以下要求和限制适用:
-
如果您导出模型,然后再次导入,则导出和导入模型目录名称必须匹配。如果发生命名冲突,请使用
new_schema
参数将模型导入不同的架构,然后重命名该模型。 -
机器学习配置参数 MaxModelSizeKB 设置可以导入 Vertica 的模型的最大大小。
-
目前不支持某些 PMML 功能和属性。有关详细信息,请参阅PMML 特征和属性。
-
如果您导入带有
metadata.json
和crc.json
文件的 PMML 模型,则 CRC 文件必须包含元数据文件的 CRC 值。否则,导入操作会返回错误。
示例
将模型导入指定的架构:
在这两个示例中,都没有指定模型类别,因此 IMPORT_MODEL 使用模型的 metadata.json
文件来确定其类别:
-
将单个模型
mykmeansmodel
导入到newschema
架构中:=> SELECT IMPORT_MODELS ('/home/dbadmin/myschema/mykmeansmodel' USING PARAMETERS new_schema='newschema') IMPORT_MODELS ---------------- Success (1 row)
-
将
myschema
目录中的所有模型导入到newschema
架构中:=> SELECT IMPORT_MODELS ('/home/dbadmin/myschema/*' USING PARAMETERS new_schema='newschema') IMPORT_MODELS ---------------- Success (1 row)
指定要导入的模型类别:
在前两个示例中,IMPORT_MODELS 只有在指定的模型和类别匹配时才返回成功;否则,它会返回错误:
-
导入
kmeans_pmml
作为 PMML 模型:SELECT IMPORT_MODELS ('/root/user/kmeans_pmml' USING PARAMETERS category='PMML') import_models --------------- Success (1 row)
-
导入
tf_mnist_estimator
作为 TensorFlow 模型:=> SELECT IMPORT_MODELS ( '/path/tf_models/tf_mnist_estimator' USING PARAMETERS category='TENSORFLOW'); import_models --------------- Success (1 row)
-
从指定目录导入所有 TensorFlow 模型:
=> SELECT IMPORT_MODELS ( '/path/tf_models/*' USING PARAMETERS category='TENSORFLOW'); import_models --------------- Success (1 row)
另请参阅
EXPORT_MODELS5 - UPGRADE_MODEL
升级之前的 Vertica 版本中的模型。如果您运行 IMPORT_MODELS 函数,Vertica 会在数据库升级期间自动运行此函数。备份或还原后手动调用该函数升级模型。
如果 UPGRADE_MODEL 未能升级模型并且模型属于 VERTICA_MODELS 类别,则它不能用于数据库内评分,也不能作为 PMML 模型导出。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
UPGRADE_MODEL ( [ USING PARAMETERS [model_name = 'model‑name'] ] )
参数
model_name
- 要升级的模型的名称。如果您忽略此参数,Vertica 会升级您拥有权限的所有模型。
特权
非超级用户:仅升级用户拥有的模型。
示例
升级模型 myLogisticRegModel
:
=> SELECT UPGRADE_MODEL( USING PARAMETERS model_name = 'myLogisticRegModel');
UPGRADE_MODEL
----------------------------
1 model(s) upgrade
(1 row)
升级用户拥有的所有模型:
=> SELECT UPGRADE_MODEL();
UPGRADE_MODEL
----------------------------
20 model(s) upgrade
(1 row)