RDS SQLFlow ステートメントを使用して、モデルのトレーニング、予測、評価を効率的に実行できます。このトピックでは、RDS SQLFlow の構文仕様について詳しく説明します。
概要
RDS SQLFlow ステートメントを使用すると、複雑な Python コードを記述することなく、モデルのトレーニング、予測、評価を効率的に実行できます。RDS SQLFlow はこれらのステートメントを自動的に解析し、同等の Python プログラムに変換するため、モデルのトレーニングプロセスが大幅に簡素化されます。RDS SQLFlow の構文は、以下を含むさまざまな特徴をカバーしています。
たとえば、iris データセットを使用して、TensorFlow DNNClassifier アルゴリズムをトレーニングできます。データセットでは、最初の 4 つの列は各アヤメの花の植物学的形状を示す特徴を表し、最後の列は各アヤメの花の亜種を表すラベルです。
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 ステートメントを使用すると、それぞれが 10 個の隠れユニットを持つ 2 つの隠れ層を持つ 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 選択式 [, 選択式 ...]
FROM テーブル参照
[WHERE where_条件]
[LIMIT 行数]
TO TRAIN モデル識別子
[WITH
モデル属性式 [, モデル属性式 ...]
[, トレーニング属性式 ...]]
COLUMN 列式 [, 列式 ...]
| COLUMN 列式 [, 列式 ...] FOR 列名
[COLUMN 列式 [, 列式 ...] FOR 列名 ...]
[LABEL ラベル式]
INTO テーブル参照;SELECT 句
SELECT 句は、指定されたテーブルからデータを取得するために使用されます。
構文:
SELECT select_expr [, select_expr ...]
FROM table_references
[WHERE where_condition]
[LIMIT row_count]パラメーターの説明:
パラメーター | 説明 |
select_expr | 取得するデータ列。少なくとも 1 つの列を指定する必要があります。 |
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 個の隠れユニットを持つ 2 つの隠れ層と 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_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 | トレーニング済みモデルが保存されるテーブル名。 |
例:
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 句は、explainer を指定するために使用されます。
構文:
TO EXPLAIN model_table_reference
[WITH
attr_expr [, attr_expr ...]]
USING explainer;パラメーターの説明:
パラメーター | 説明 |
model_table_reference | 予測のためにモデルがロードされるテーブル。 |
attr_expr | 構成属性 (例: |
explainer | 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 |
|