这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

模型管理

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)
    

导出与指定类别兼容的模型:

  • 类别设置为 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_MODELS

2 - 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_SUMMARYGET_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

  • 指定的类别与模型类型不匹配。

特权

超级用户

要求和限制

以下要求和限制适用:

  • 如果您导出模型,然后再次导入,则导出和导入模型目录名称必须匹配。如果发生命名冲突,请使用 new_schema 参数将模型导入不同的架构,然后重命名该模型。

  • 机器学习配置参数 MaxModelSizeKB 设置可以导入 Vertica 的模型的最大大小。

  • 目前不支持某些 PMML 功能和属性。有关详细信息,请参阅PMML 特征和属性

  • 如果您导入带有 metadata.jsoncrc.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_MODELS

5 - 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)