使用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 |
|