语法规范

使用RDS SQLFlow语句可以高效地进行模型训练、预测和评估。本文将对RDS SQLFlow的语法规范进行详细介绍。

简介

使用RDS SQLFlow语句可以高效地进行模型训练、预测和评估,无需编写复杂的Python代码。RDS SQLFlow将自动解析这些语句,并将其转换为等效的Python程序,显著简化了模型训练流程。RDS SQLFlow的语法覆盖了多种功能,主要包括:

例如,使用鸢尾花数据集(iris)并训练TensorFlowDNNClassifier算法。数据集中,前四列代表特征,表示每株鸢尾花的植物学形状,最后一列为标签,代表每株鸢尾花的亚种。

sepal_length

sepal_width

petal_length

petal_width

class

6.4

2.8

5.6

2.2

2

5.0

2.3

3.3

1.0

1

...

...

...

...

...

通过以下简单的RDS SQLFlow语句,您可以轻松训练一个具有两个隐藏层且每层包含十个隐藏单元的DNNClassifier模型。训练完成后,模型将被保存至表sqlflow_models.my_dnn_model,以便后续进行预测。RDS SQLFlow将自动解析这些语句,并将其转换为等效的Python程序,显著简化了模型训练流程。

SELECT * FROM iris.train
TO TRAIN DNNClassifier
WITH model.hidden_units = [10, 10], model.n_classes = 3, train.epoch= 10
COLUMN sepal_length, sepal_width, petal_length, petal_width
LABEL class
INTO sqlflow_models.my_dnn_model;

训练语法

RDS SQLFlow训练语句由SELECTTRAINCOLUMNLABELINTO子句构成。

SELECT select_expr [, select_expr ...]
FROM table_references
  [WHERE where_condition]
  [LIMIT row_count]
TO TRAIN model_identifier
[WITH
  model_attr_expr [, model_attr_expr ...]
  [, train_attr_expr ...]]
COLUMN column_expr [, column_expr ...]
  | COLUMN column_expr [, column_expr ...] FOR column_name
    [COLUMN column_expr [, column_expr ...] FOR column_name ...]
[LABEL label_expr]
INTO table_references;

SELECT子句

SELECT子句用于从指定的表中检索数据。

语法:

SELECT select_expr [, select_expr ...]
FROM table_references
  [WHERE where_condition]
  [LIMIT row_count]

参数说明:

参数

说明

select_expr

需要检索的数据列,必须至少包含一个。

table_references

需要检索的表。

where_condition

用于拆选行的表达式。

row_count

需要检索的最大行数。

示例:

例如,在样本数据集(iris.train)上快速训练一个二元分类器模型:

SELECT * FROM iris.train
WHERE class = 0 OR class = 1
LIMIT 1000
TO TRAIN ...

TRAIN子句

TRAIN子句用于描述特定的模型类型及其训练算法。

语法:

TO TRAIN model_identifier
WITH
  model_attr_expr [, model_attr_expr ...]
  [, train_attr_expr ...]

参数说明:

参数

说明

model_identifier

模型类型,例如DNNClassifier。更多的模型请参见模型及算法

model_attr_expr

模型属性,例如model.n_classes = 3

train_attr_expr

训练属性,例如train.epoch = 10

示例:

例如,训练一个具有两个隐藏层、每层包含十个隐藏单元、训练轮次为10DNNClassifier模型:

SELECT * FROM iris.train
TO TRAIN DNNClassifier
WITH
  model.hidden_units = [10, 10],
  model.n_classes = 3,
  train.epoch = 10
...

COLUMN子句

COLUMN子句用于指定训练特征的字段名称,以及其可选的预处理方法。

语法:

COLUMN column_expr [, column_expr ...]
  | COLUMN column_expr [, column_expr ...] FOR column_name
    [COLUMN column_expr [, column_expr ...] FOR column_name ...]

参数说明:

参数

说明

column_expr

字段名称及其内容的预处理方式,例如sepal_length,DENSE(dense, 3)

column_name

模型输入的特征列名称。

示例:

例如,使用字段sepal_length、sepal_width、petal_lengthpetal_width作为特征:

SELECT * FROM iris.train
TO TRAIN DNNClassifier WITH
  model.hidden_units = [10, 10],
  model.n_classes = 3,
  train.epoch = 10
COLUMN sepal_length, sepal_width, petal_length, petal_width
...

LABEL子句

LABEL子句用于指示训练标签的字段名称,及其可选的预处理方法。

语法:

LABEL label_expr

参数说明:

参数

说明

label_expr

字段名称以及对字段内容的预处理方法,例如class

示例:

SELECT * FROM iris.train
TO TRAIN DNNClassifier WITH
  model.hidden_units = [10, 10],
  model.n_classes = 3,
  train.epoch = 10
COLUMN sepal_length, sepal_width, petal_length, petal_width
LABEL class
...

INTO子句

INTO子句用于指定保存训练好的模型的表名。

语法:

INTO table_references

参数说明:

参数

说明

table_references

保存训练好的模型的表名。

示例:

SELECT * FROM iris.train
TO TRAIN DNNClassifier WITH
  model.hidden_units = [10, 10],
  model.n_classes = 3,
  train.epoch = 10
COLUMN sepal_length, sepal_width, petal_length, petal_width
LABEL class
INTO sqlflow_models.my_dnn_model;

预测语法

RDS SQLFlow预测语句由SELECTPREDICTUSING子句组成。

SELECT select_expr [, select_expr ...]
FROM table_references
  [WHERE where_condition]
  [LIMIT row_count]
TO PREDICT result_table_reference
[WITH
  attr_expr [, attr_expr ...]]
USING model_table_reference;
重要

TO PREDICT之前的SELECT子句的数据结构必须与训练语法中TO TRAIN操作所使用的数据结构保持一致,以确保在预测和解释过程中所使用的数据结构与训练阶段所使用的数据结构相符。

PREDICTUSING子句

PREDICT用于描述预测结果写入的表,USING用于描述加载模型的表,WITH则用于描述进行预测所需的必要配置。

语法:

TO PREDICT result_table_reference
[WITH
  attr_expr [, attr_expr ...]]
USING model_table_reference;

参数说明:

参数

说明

result_table_reference

存储预测结果的表。

attr_expr

配置属性,例如predict.batch_size = 1

model_table_reference

预测时从中加载模型的表。

示例:

例如,使用存储在表sqlflow.my_dnn_model中的模型将预测结果保存到表iris.predict的列中:

SELECT * FROM iris.train
TO PREDICT iris.predict.class
USING sqlflow.my_dnn_model;

解释语法

RDS SQLFlow解释语句由一系列SELECTEXPLAINUSING语句组成。

SELECT select_expr [, select_expr ...]
FROM table_references
  [WHERE where_condition]
  [LIMIT row_count]
TO EXPLAIN model_table_reference
[WITH
  attr_expr [, attr_expr ...]]
[USING explainer];
重要

TO EXPLAIN之前的SELECT子句的数据结构必须与训练语法TO TRAIN操作所使用的数据结构保持一致。

EXPLAINUSING子句

EXPLAIN子句用于指定模型加载的表以及必要的配置属性。USING子句用于指定解释器。

语法:

TO EXPLAIN model_table_reference
[WITH
  attr_expr [, attr_expr ...]]
USING explainer;

参数说明:

参数

说明

model_table_reference

预测时从中加载模型的表。

attr_expr

配置属性,例如summary.plot_type="bar"

explainer

解释器的类型,例如TreeExplainer

示例:

例如,使用TreeExplainer对存储在sqlflow_models.my_xgb_regression_model的模型进行解释,并按排序顺序绘制分析结果:

SELECT * FROM boston.train
TO EXPLAIN sqlflow_models.my_xgb_regression_model
WITH
    summary.sort=True
USING TreeExplainer;

评估语法

RDS SQLFlow评估语句由SELECTEVALUATEINTO语句组成。

SELECT select_expr [, select_expr ...]
FROM table_references
  [WHERE where_condition]
  [LIMIT row_count]
TO EVALUATE model_table_reference
[WITH
  attr_expr [, attr_expr ...]]
LABEL class
INTO evaluate_result_table;
重要
  • TO EVALUATE之前的SELECT子句的数据结构必须与训练语法TO TRAIN操作所使用的数据结构保持一致。

  • 根据机器学习理论,使用训练数据集进行评估是不恰当的,否则可能会得到一个极为理想化的评估结果。

EVALUATEINTO子句

TO EVALUATE子句用于指定待评估的模型,以及将使用哪些指标进行评估。INTO子句用于指定保存评估结果的表。

语法:

TO EVALUATE model_table_reference
[WITH
  attr_expr [, attr_expr ...]]
INTO evaluate_result_table;

参数说明:

参数

说明

model_table_reference

待评估的模型,其评估结果代表了该模型在预测新数据时的性能表现。

attr_expr

评估时的属性。

您可以通过设置validation.metrics来指定哪些指标将输出到结果表,例如validation.metrics="Accuracy,AUC"

evaluate_result_table

存储评估结果的表。

示例:

SELECT * FROM iris.test 
TO EVALUATE sqlflow_models.my_dnn_model 
WITH validation.metrics = Accuracy 
LABEL class  
INTO sqlflow_models.evaluate_result_table;

优化语法

RDS SQLFlow使用TO MAXIMIZETO MINIMIZE子句来描述和解决数学规划问题。

语法:

SELECT select_expr [, select_expr ...]
FROM table_references
  [WHERE where_condition]
  [LIMIT row_count]
TO MAXIMIZE|MINIMIZE
  objective_expr
CONSTRAINT
  constraint_expr [GROUP BY column_name]
  [, constraint_expr [GROUP BY column_name]...]
WITH
  variables="variable_value(column_name, ...)"
  var_type="Integers|Reals|Binary|NonNegativeIntegers|..."
[USING solver_name]
INTO result_table_name;

示例:

SELECT c1, c2, c3 FROM my_db.my_table
TO MAXIMIZE SUM(x * c1)
CONSTRAINT
    SUM(x) <= c2 GROUP BY c1
    x <= 3
WITH
    variables="x(c3)",
    var_type="NonNegativeIntegers"
USING glpk
INTO my_db.my_result_table;

参数说明:

参数

说明

TO MAXIMIZE

objective_exprSUM(x * c1),表示要最大化SUM(x * c1)的值。

CONSTRAINT

  • SUM(x) <= c2 GROUP BY c1GROUP BY意味着对于每一个不同的c1,都会有一个约束表达式SUM(x) <= c2

  • x <= 3:对于每一个x都满足x <= 3

WITH

  • variables=x(c3):表示优化目标列为c3x表示需要求解的变量值。

  • var_type="NonNegativeIntegers":表示变量x为非负整数,变量支持的数据类型如下:

    • Binary:变量值为0或者1。

    • Integers:变量值为整数。

    • PositiveIntegersNegativeIntegers:变量值为正整数或负整数。

    • NonPositiveIntegersNonNegativeIntegers:变量值为非正整数或非负整数。

    • Reals:变量值为实数。

    • PositiveRealsNegativeReals:变量值为正实数或负实数。

    • NonPositiveRealsNonNegativeReals:变量值为非正或非负实数。

USING

glpk:示使用glpk去求解这个问题。RDS SQLFlow支持:

  • GLPK:用于解决线性规划问题。

  • BARON:用于解决非线性规划问题。

INTO

my_db.my_result_table:保存求解结果的表。

相关文档

RDS Custom简介