使用RDS SQLFlow语句可以高效地进行模型训练、预测和评估。本文将对RDS SQLFlow的语法规范进行详细介绍。
简介
使用RDS SQLFlow语句可以高效地进行模型训练、预测和评估,无需编写复杂的Python代码。RDS SQLFlow将自动解析这些语句,并将其转换为等效的Python程序,显著简化了模型训练流程。RDS SQLFlow的语法覆盖了多种功能,主要包括:
例如,使用鸢尾花数据集(iris)并训练TensorFlow的DNNClassifier算法。数据集中,前四列代表特征,表示每株鸢尾花的植物学形状,最后一列为标签,代表每株鸢尾花的亚种。
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训练语句由SELECT
、TRAIN
、COLUMN
、LABEL
和INTO
子句构成。
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 | 模型属性,例如 |
train_attr_expr | 训练属性,例如 |
示例:
例如,训练一个具有两个隐藏层、每层包含十个隐藏单元、训练轮次为10的DNNClassifier模型:
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 | 字段名称及其内容的预处理方式,例如 |
column_name | 模型输入的特征列名称。 |
示例:
例如,使用字段sepal_length、sepal_width、petal_length和petal_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 | 字段名称以及对字段内容的预处理方法,例如 |
示例:
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预测语句由SELECT
、PREDICT
和USING
子句组成。
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
操作所使用的数据结构保持一致,以确保在预测和解释过程中所使用的数据结构与训练阶段所使用的数据结构相符。
PREDICT和USING子句
PREDICT
用于描述预测结果写入的表,USING
用于描述加载模型的表,WITH
则用于描述进行预测所需的必要配置。
语法:
TO PREDICT result_table_reference
[WITH
attr_expr [, attr_expr ...]]
USING model_table_reference;
参数说明:
参数 | 说明 |
result_table_reference | 存储预测结果的表。 |
attr_expr | 配置属性,例如 |
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解释语句由一系列SELECT
、EXPLAIN
和USING
语句组成。
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
操作所使用的数据结构保持一致。
EXPLAIN和USING子句
EXPLAIN
子句用于指定模型加载的表以及必要的配置属性。USING
子句用于指定解释器。
语法:
TO EXPLAIN model_table_reference
[WITH
attr_expr [, attr_expr ...]]
USING explainer;
参数说明:
参数 | 说明 |
model_table_reference | 预测时从中加载模型的表。 |
attr_expr | 配置属性,例如 |
explainer | 解释器的类型,例如 |
示例:
例如,使用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评估语句由SELECT
、EVALUATE
和INTO
语句组成。
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
操作所使用的数据结构保持一致。根据机器学习理论,使用训练数据集进行评估是不恰当的,否则可能会得到一个极为理想化的评估结果。
EVALUATE和INTO子句
TO EVALUATE
子句用于指定待评估的模型,以及将使用哪些指标进行评估。INTO
子句用于指定保存评估结果的表。
语法:
TO EVALUATE model_table_reference
[WITH
attr_expr [, attr_expr ...]]
INTO evaluate_result_table;
参数说明:
参数 | 说明 |
model_table_reference | 待评估的模型,其评估结果代表了该模型在预测新数据时的性能表现。 |
attr_expr | 评估时的属性。 您可以通过设置 |
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 MAXIMIZE
和TO 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 |
|
CONSTRAINT |
|
WITH |
|
USING |
|
INTO |
|