CREATE MODEL ステートメント

CREATE MODEL ステートメント

BigQuery でモデルを作成するには、BigQuery ML CREATE MODEL ステートメントを使用します。このステートメントは、CREATE TABLE DDL ステートメントに似ています。CREATE MODEL ステートメントを含む標準 SQL クエリを実行すると、クエリを処理するクエリジョブが生成されます。

CREATE MODEL の構文

{CREATE MODEL | CREATE MODEL IF NOT EXISTS | CREATE OR REPLACE MODEL}
model_name
[TRANSFORM (select_list)]
[OPTIONS(model_option_list)]
[AS query_statement]

model_option_list:
  MODEL_TYPE = { 'LINEAR_REG' | 'LOGISTIC_REG' | 'KMEANS' | 'TENSORFLOW' | 'MATRIX_FACTORIZATION' | 'AUTOML_REGRESSOR' | 'AUTOML_CLASSIFIER' | 'BOOSTED_TREE_CLASSIFIER' | 'BOOSTED_TREE_REGRESSOR' | 'DNN_CLASSIFIER' | 'DNN_REGRESSOR' }
  [, INPUT_LABEL_COLS = string_array ]
  [, OPTIMIZE_STRATEGY = { 'AUTO_STRATEGY' | 'BATCH_GRADIENT_DESCENT' | 'NORMAL_EQUATION' } ]
  [, L1_REG = float64_value ]
  [, L2_REG = float64_value ]
  [, MAX_ITERATIONS = int64_value ]
  [, LEARN_RATE_STRATEGY = { 'LINE_SEARCH' | 'CONSTANT' } ]
  [, LEARN_RATE = float64_value ]
  [, EARLY_STOP = { TRUE | FALSE } ]
  [, MIN_REL_PROGRESS = float64_value ]
  [, DATA_SPLIT_METHOD = { 'AUTO_SPLIT' | 'RANDOM' | 'CUSTOM' | 'SEQ' | 'NO_SPLIT' } ]
  [, DATA_SPLIT_EVAL_FRACTION = float64_value ]
  [, DATA_SPLIT_COL = string_value ]
  [, LS_INIT_LEARN_RATE = float64_value ]
  [, WARM_START = { TRUE | FALSE } ]
  [, AUTO_CLASS_WEIGHTS = { TRUE | FALSE } ]
  [, CLASS_WEIGHTS = struct_array ]
  [, NUM_CLUSTERS = int64_value ]
  [, KMEANS_INIT_METHOD = { 'RANDOM' | 'KMEANS++' | 'CUSTOM' } ]
  [, KMEANS_INIT_COL = string_value ]
  [, DISTANCE_TYPE = { 'EUCLIDEAN' | 'COSINE' } ]
  [, STANDARDIZE_FEATURES = { TRUE | FALSE } ]
  [, MODEL_PATH = string_value ]
  [, BUDGET_HOURS = float64_value ]
  [, FEEDBACK_TYPE = {'EXPLICIT' | 'IMPLICIT'} ]
  [, NUM_FACTORS = int64_value ]
  [, USER_COL = string_value ]
  [, ITEM_COL = string_value ]
  [, RATING_COL = string_value ]
  [, WALS_ALPHA = float64_value ]
  [, BOOSTER_TYPE = { 'gbtree' | 'dart'} ]
  [, NUM_PARALLEL_TREE = int64_value ]
  [, DART_NORMALIZE_TYPE = { 'tree' | 'forest'} ]
  [, TREE_METHOD = { 'auto' | 'exact' | 'approx' | 'hist'} ]
  [, MIN_TREE_CHILD_WEIGHT = float64_value ]
  [, COLSAMPLE_BYTREE = float64_value ]
  [, COLSAMPLE_BYLEVEL = float64_value ]
  [, COLSAMPLE_BYNODE = float64_value ]
  [, MIN_SPLIT_LOSS = float64_value ]
  [, MAX_TREE_DEPTH = int64_value ]
  [, SUBSAMPLE = float64_value ])
  [, ACTIVATION_FN = { 'RELU' | 'RELU6' | 'CRELU' | 'ELU' | 'SELU' | 'SIGMOID' | 'TANH' } ]
  [, BATCH_SIZE = int64_value ]
  [, DROPOUT = float64_value ]
  [, HIDDEN_UNITS = int_array ]
  [, OPTIMIZER = { 'ADAGRAD' | 'ADAM' | 'FTRL' | 'RMSPROP' | 'SGD' } ]
  [, TIME_SERIES_TIMESTAMP_COL = string_value ]
  [, TIME_SERIES_DATA_COL = string_value ]
  [, TIME_SERIES_ID_COL = string_value ]
  [, HORIZON = int64_value ]
  [, AUTO_ARIMA = { TRUE | FALSE } ]
  [, NON_SEASONAL_ORDER = (int64_value, int64_value, int64_value) ]
  [, DATA_FREQUENCY = { 'AUTO_FREQUENCY' | 'HOURLY' | 'DAILY' | 'WEEKLY' | 'MONTHLY' | 'QUARTERLY' | 'YEARLY' } ]
  [, INCLUDE_DRIFT = { TRUE | FALSE } ]
  [, HOLIDAY_REGION = { 'GLOBAL' | 'NA' | 'JAPAC' | 'EMEA' | 'LAC' | 'AE' | ... } ]

すべてのモデルタイプに使用できるわけではありません。TensorFlow モデルについては、TensorFlow モデルの CREATE MODEL ステートメントをご覧ください。AutoML Tables モデルについては、AutoML Tables モデルの CREATE MODEL ステートメントをご覧ください。

CREATE MODEL

指定したデータセットに新しいモデルを作成し、トレーニングします。モデル名が存在する場合、CREATE MODEL はエラーを返します。

CREATE MODEL IF NOT EXISTS

指定したデータセットにモデルが存在しない場合にのみ、新しいモデルを作成してトレーニングします。

CREATE OR REPLACE MODEL

モデルを作成してトレーニングし、指定したデータセット内の同じ名前をもつ既存のモデルを置き換えます。

model_name

model_name は、作成または置き換えるモデルの名前です。モデル名は、データセットごとに一意である必要があります。他のモデルやテーブルに同じ名前を付けることはできません。モデル名は、BigQuery テーブルと同じ命名規則に従う必要があります。モデル名の条件は次のとおりです。

  • 1,024 文字以内
  • 英字(大文字または小文字)、数字、アンダースコアだけが含まれている

model_name では、大文字と小文字は区別されません。

デフォルト プロジェクトを構成していない場合は、`[PROJECT_ID].[DATASET].[MODEL]`(バッククォートを含む)の形式でプロジェクト ID をモデル名の前に追加します(例: `myproject.mydataset.mymodel`)。

TRANSFORM

TRANSFORM を使用すると、モデルの作成中にすべての前処理を指定し、予測と評価中に自動的に適用できます。

たとえば、次のモデルを作成できます。

CREATE OR REPLACE MODEL m
  TRANSFORM(ML.FEATURE_CROSS(STRUCT(f1, f2)) as cross_f,
            ML.QUANTILE_BUCKETIZE(f3) OVER() as buckets,
            label_col)
  OPTIONS(model_type=’linear_reg’, input_label_cols=['label_col'])
AS SELECT * FROM t

予測の際、再度、入力を前処理する必要はなく、同じ変換が自動的に復元されます。

SELECT * FROM ML.PREDICT(MODEL m, (SELECT f1, f2, f3 FROM table))

TRANSFORM 句が存在する場合、TRANSFORM 句の出力列のみがトレーニングで使用されます。TRANSFORM 句に表示されない query_statement からのすべての結果は無視されます。

TRANSFORM 句の入力列は、query_statement の結果です。したがって、トレーニングで使用する最後の入力は、次のクエリで生成される列のセットです。

SELECT (select_list) FROM (query_statement);

TRANSFORM 句の入力列は、任意の型、SIMPLE 型または SIMPLE 型の ARRAY を指定できます。SIMPLE 型は、STRUCT 型以外と ARRAY 型以外のデータ型です。

予測 (ML.PREDICT) の際、ユーザーは TRANSFORM 句の中で使用される query_statement からの元の列を渡すだけです。TRANSFORM で削除されている列は、予測の際に提供する必要はありません。TRANSFORM は、ML 分析関数で使用される統計情報など(たとえば、ML.QUANTILE_BUCKETIZE)の、予測の際の入力データに自動的に適用されます。

select_list

** EXCEPT() を使用するか、列名を直接リスト化することにより、変換を使用せずに、query_statement の列をモデル トレーニングに渡すことができます。

query_statement の列のすべてを TRANSFORM 句に表示する必要はないので、TRANSFORM 句から列を省略することにより、query_statement に表示される列を削除できます。

select_list の式を使って、query_statement の入力を変換できます。select_list は、通常の SELECT ステートメントと似ています。select_list は、次の構文をサポートします。

  • *
  • * EXCEPT()
  • * REPLACE()
  • <var>expression</var>
  • <var>expression</var>.*

以下は、select_list 内に表示できません。

  • 集計関数
  • ML 以外の分析関数。すべての ML 分析関数は、前処理関数で確認できます。
  • UDF
  • サブクエリ
  • 匿名の列。たとえば、「a + b as c」は使用でき、「a + b」は使用できません。

select_list の出力列は、BigQuery ML で利用できる任意のデータ型にできます。

以下の列は存在する場合、変換なしに select_list に表示されます。

  • ラベル
  • data_split_col
  • kmeans_init_col

これらの列が query_statement により返される場合、いかなる式にもない列名により、または * を使用することにより、select_list で参照する必要があります。これらの列でエイリアスを使用することはできません。

model_option_list

model_option_list において、model_type オプションが必要です。他はすべて省略可能です。

CREATE MODEL は、次のオプションをサポートします。

MODEL_TYPE

構文

MODEL_TYPE = { 'LINEAR_REG' | 'LOGISTIC_REG' | 'KMEANS' |
'BOOSTED_TREE_REGRESSOR' | 'BOOSTED_TREE_CLASSIFIER' | 'DNN_CLASSIFIER' | 'DNN_REGRESSOR' }

説明

モデルタイプを指定します。このオプションは必須です。

引数

'LINEAR_REG' 線形回帰(予測) - たとえば、特定の日の商品の売上。ラベルは実数値です(正負の無限大や NaN にはできません)。

'LOGISTIC_REG' ロジスティック回帰(分類) - たとえば、お客様が購入をするかどうかの判断。このモデルには次の 2 種類があります。

  • 2 項ロジスティック回帰(分類) - たとえば、お客様が購入をするかどうかの判断。ラベルの値は 2 つだけです。
  • 多項ロジスティック回帰(分類)このモデルは、複数の考えうる値を予測する際に利用できます。たとえば、入力が低値、中央値、高値のどれかを判定する際に利用できます。ラベルには、最大 50 個の一意の値を指定できます。BigQuery ML では、多項ロジスティック回帰トレーニングの場合、交差エントロピー損失関数を持つ多項式分類を使用します。

'KMEANS' K 平均法クラスタリング(データ セグメンテーション)- たとえば、お客様のセグメントの識別などが該当します。K 平均法は教師なし学習にあたるため、モデルのトレーニングを行う際に、トレーニングや評価用にラベルの指定やデータの分割を行う必要はありません。

'TENSORFLOW'(ベータ版)- TensorFlow モデルを BigQuery ML にインポートしてモデルを作成します。詳細については、TensorFlow モデルの CREATE MODEL ステートメントをご覧ください。

'MATRIX_FACTORIZATION'(ベータ版)- レコメンデーション システム用の行列分解です。たとえば、一連の特定ユーザー、アイテム、アイテムの一部の設定や評価を基に、評価や操作を行っていないアイテムに対するユーザーの設定を予測するモデルを作成します。詳細については、行列分解モデルの CREATE MODEL ステートメントをご覧ください。

'AUTOML_REGRESSOR'(ベータ版)- AutoML Tables を使用して回帰モデルを作成します。詳しくは、AutoML Tables モデルの CREATE MODEL ステートメントをご覧ください。

'AUTOML_CLASSIFIER'(ベータ版)- AutoML Tables を使用して分類モデルを作成します。詳しくは、AutoML Tables モデルの CREATE MODEL ステートメントをご覧ください。

'BOOSTED_TREE_CLASSIFIER'(ベータ版)- XGBoost ライブラリを使用してブーストツリー分類モデルを作成します。詳細については、ブーストツリー モデルの CREATE MODEL ステートメントをご覧ください。

'BOOSTED_TREE_REGRESSOR'(ベータ版)- XGBoost ライブラリを使用してブーストツリー リグレッサー モデルを作成します。詳細については、ブーストツリー モデルの CREATE MODEL ステートメントをご覧ください。

'DNN_CLASSIFIER'(ベータ版)- ディープ ニューラル ネットワーク分類モデルを作成します。詳細については、DNN モデルの CREATE MODEL ステートメントをご覧ください。

'DNN_REGRESSOR'(ベータ版)- ディープ ニューラル ネットワーク リグレッサー モデルを作成します。詳細については、DNN モデルの CREATE MODEL ステートメントをご覧ください。

'ARIMA'(ベータ版)- 一変量の ARIMA ベースの時系列モデル。時系列予測に使用します。たとえば、1 つまたは複数の時系列を指定すると、将来のデータポイントを予測するモデルまたは時系列モデルのセットが一度に作成されます。詳細については、時系列モデルの CREATE MODEL ステートメントをご覧ください。

INPUT_LABEL_COLS

構文

INPUT_LABEL_COLS = string_array

説明

トレーニング データのラベル列名。

引数

string_arraySTRINGARRAY です。線形回帰とロジスティック回帰のモデルタイプは、1 つの要素を含む string_array 値のみサポートします。

OPTIMIZE_STRATEGY

構文

OPTIMIZE_STRATEGY = { 'AUTO_STRATEGY' | 'BATCH_GRADIENT_DESCENT' | 'NORMAL_EQUATION' }

説明

線形回帰モデルをトレーニングする戦略。

引数

次の値を受け入れます。

'AUTO_STRATEGY' - トレーニング戦略を次のとおり決定します。

  • l1_regwarm_start が指定されている場合、batch_gradient_descent 戦略が使用されます。
  • トレーニングの特徴の総カーディナリティが 10,000 を超える場合、batch_gradient_descent 戦略が使用されます。
  • 過学習の問題がある場合、すなわちトレーニングの例の数が 10x 未満の場合(x は総カーディナリティ)、batch_gradient_descent 戦略が使用されます。
  • 上記以外のケースでは、NORMAL_EQUATION 戦略が使用されます。

'BATCH_GRADIENT_DESCENT' - 勾配関数を使用して損失関数を最適化するバッチ勾配降下法で、モデルをトレーニングします。

'NORMAL_EQUATION' - 線形回帰問題の最小二乗解を分析式で直接計算します。次の場合、正規方程式は使用できません。

  • l1_reg が指定されている。
  • warm_start が指定されている。
  • トレーニングの特徴の総カーディナリティが 10,000 を超える。

デフォルト値は 'AUTO_STRATEGY' です。

L1_REG

構文

L1_REG = float64_value

説明

適用する L1 正則化の量。

引数

float64_valueFLOAT64 です。デフォルト値は 0 です。

L2_REG

構文

L2_REG = float64_value

説明

適用する L2 正規化の量。

引数

float64_valueFLOAT64 です。デフォルト値は 0 です。

MAX_ITERATIONS

構文

MAX_ITERATIONS = int64_value

説明

トレーニングの最大繰り返し回数またはステップ数。

引数

int64_valueINT64 です。デフォルト値は 20 です。

LEARN_RATE_STRATEGY

構文

LEARN_RATE_STRATEGY = { 'LINE_SEARCH' | 'CONSTANT' }

説明

トレーニング中の学習率を指定する方法。

引数

'LINE_SEARCH' - 直線探索法を使用して学習率を計算します。直線探索の初期学習率は、LS_INIT_LEARN_RATE に指定された値です。

直線探索はトレーニングを遅くし、処理されるバイト数を増加させますが、一般に、最初に指定した学習率が大きくても収束します。

'CONSTANT' - 学習率を LEARN_RATE に指定された値に設定します。

デフォルト値は 'LINE_SEARCH' です。

LEARN_RATE

構文

LEARN_RATE = float64_value

説明

LEARN_RATE_STRATEGYCONSTANT に設定されたときの勾配降下の学習率。LEARN_RATE_STRATEGY'LINE_SEARCH' に設定されていると、エラーが返されます。

引数

float64_valueFLOAT64 です。デフォルト値は 0.1 です。

EARLY_STOP

構文

EARLY_STOP = { TRUE | FALSE }

説明

最初のイテレーションで、相対損失改善値が MIN_REL_PROGRESS に指定された値より小さい場合、トレーニングを停止するかどうか。

引数

値は BOOL です。デフォルト値は TRUE です。

MIN_REL_PROGRESS

構文

MIN_REL_PROGRESS = float64_value

説明

EARLY_STOP が true に設定されている場合に、トレーニングの継続に最低限必要な相対損失改善値。たとえば、値を 0.01 に設定した場合、イテレーションごとに損失が 1% 減少すると、トレーニングが継続します。

引数

float64_valueFLOAT64 です。デフォルト値は 0.01 です。

DATA_SPLIT_METHOD

構文

DATA_SPLIT_METHOD = { 'AUTO_SPLIT' | 'RANDOM' | 'CUSTOM' | 'SEQ' | 'NO_SPLIT' }

説明

入力データをトレーニング セットと評価セットに分割する方法。トレーニング データは、モデルのトレーニングに使用されます。評価データは、早期停止により過学習を避けるために使用されます。

引数

次の値を受け入れます。

'AUTO_SPLIT' - 自動分割戦略は次のとおりです。

  • 入力データが 500 行未満の場合、すべての行がトレーニング データとして使用されます。
  • 入力データが 500~50,000 行の場合、データの 20% が RANDOM 分割で処理され、評価データとして使用されます。
  • 入力データが 50,000 行を超える場合、10,000 行が RANDOM 分割で処理され、評価データとして使用されます。

'RANDOM' - データをランダムに分割します。ランダムな分割は確定的です。基となるトレーニング データが同じであれば、別のトレーニングを行っても同じ分割結果が生成されます。

'CUSTOM' - お客様提供の BOOL 型の列を使用してデータを分割します。値が TRUE の行は、評価データとして使用されます。値が FALSE の行は、トレーニング データとして使用されます。

'SEQ' - お客様提供の列を使用してデータを順番に分割します。列には、順序付け可能なデータ型(NUMERICSTRINGTIMESTAMP)が使用できます。分割値がしきい値を下回る行は、トレーニング データとして使用されます。残りの行(NULLs を含む)は、評価データとして使用されます。

'NO_SPLIT' - すべてのデータをトレーニング データとして使用します。

線形回帰モデルとロジスティック回帰モデルのデフォルト値は 'AUTO_SPLIT' です。

行列分解モデルのデフォルト値は 'NO_SPLIT' です。別の分割方法を使用する場合は、すべてのユーザーとすべてのアイテムが、トレーニング セットにある適切なモデルを構築するための十分な行を含むことを確認してください。

このオプションは、TensorFlow または K 平均法モデルではサポートされていません。

DATA_SPLIT_EVAL_FRACTION

構文

DATA_SPLIT_EVAL_FRACTION = float64_value

説明

このオプションは、'RANDOM''SEQ' 分割で使用します。評価に使用するデータの割合を、小数点以下 2 桁までの精度で指定します。

引数

float64_valueFLOAT64 です。デフォルト値は 0.2 です。

DATA_SPLIT_COL

構文

DATA_SPLIT_COL = string_value

説明

データの分割に使用する列を識別します。この列は特徴やラベルとして使用できません。特徴からは自動的に除外されます。

  • DATA_SPLIT_METHOD の値が 'CUSTOM' の場合、対応する列は BOOL 型になります。値が TRUENULL の行は、評価データとして使用されます。値が FALSE の行は、トレーニング データとして使用されます。

  • DATA_SPLIT_METHOD の値が 'SEQ' の場合、対応する列の最後の n 行(最小から最大)が評価データとして使用されます。ここで、nDATA_SPLIT_EVAL_FRACTION に指定された値です。最初の行はトレーニング データとして使用されます。

サポートされている入力タイプについては、DATA_SPLIT_COL でサポートされている入力タイプをご覧ください。

AutoML モデルタイプでの DATA_SPLIT_COL の使用について詳しくは、AutoML Tables モデルの CREATE MODEL ステートメントをご覧ください。

引数

string_valueSTRING です。

LS_INIT_LEARN_RATE

構文

LS_INIT_LEARN_RATE = float64_value

説明

LEARN_RATE_STRATEGY='LINE_SEARCH' が使用する初期学習率を設定します。このオプションは、LINE_SEARCH が指定されている場合にのみ使用できます。

繰り返しごとにモデル LEARN_RATE が倍増しているように見える場合は、最後に 2 倍になった学習率を LS_INIT_LEARN_RATE に設定してみてください(モデルの状態は ML.TRAINING_INFO で確認できます)。最適な初期学習率はモデルごとに異なります。あるモデルに最適な初期学習率が別のモデルでも最適とは限りません。

引数

float64_valueFLOAT64 です。

WARM_START

構文

WARM_START = { TRUE | FALSE }

説明

新しいトレーニング データ、新しいモデル オプション、またはその両方でモデルを再トレーニングします。明示的にオーバーライドされない限り、モデル トレーニングの初期オプションはウォーム スタートの実行時に使用されます。

ウォーム スタートでは、繰り返し番号が 0 にリセットされます。TRAINING_RUN 番号や TIMESTAMP 列は、元の実行とウォーム スタートの区別に使用できます。

MODEL_TYPE オプションの値、LABELS オプションの値、トレーニング データスキーマは、ウォーム スタート時に一定のままである必要があります。warm_start オプションは、LINEAR_REGLOGISTIC_REGKMEANS モデルの再トレーニングでのみサポートされます。

引数

BOOL を受け入れます。デフォルト値は FALSE です。

AUTO_CLASS_WEIGHTS

構文

AUTO_CLASS_WEIGHTS = { TRUE | FALSE }

説明

各クラスの頻度に反比例した重みを使用して、クラスラベルのバランスをとるかどうか。

boosted_tree_classifier、DNN_CLASSIFIER、ロジスティック回帰と多項ロジスティック回帰で使用します。

デフォルトでは、多項ロジスティック回帰、ブーストツリー分類、dnn 分類モデルの作成に使用されるトレーニング データは重み付けされません。トレーニング データ内のラベルが不均衡である場合、モデルは最も出現回数の多いラベルクラスをより重く予測するように学習することがありますが、これは必ずしも望ましいこととは限りません。

すべてのクラスのバランスをとるには、次の式を使用します。

total_input_rows / (input_rows_for_class_n * number_of_unique_classes)

引数

BOOL を受け入れます。デフォルト値は FALSE です。

CLASS_WEIGHTS

構文

CLASS_WEIGHTS = struct_array

説明

各クラスラベルに使用する重み。AUTO_CLASS_WEIGHTS が指定されている場合、このオプションは指定できません。

引数

struct_arraySTRUCTARRAY です。各 STRUCT には、クラスラベルを含む STRING と、そのクラスラベルの重みを含む FLOAT64 が含まれます。すべてのクラスラベルに重みが必要です。重みは合計で 1 になる必要はありません。次に例を示します。

CLASS_WEIGHTS = [STRUCT('example_label', .2)]

NUM_CLUSTERS

構文

NUM_CLUSTERS = int64_value

説明

K 平均法モデルの場合、入力データで識別するクラスタの数。

引数

int64_valueINT64 です。指定できる値は 2~100 です。デフォルト値は log10(n) です。ここで、n はトレーニング例の数です。

KMEANS_INIT_METHOD

構文

KMEANS_INIT_METHOD = { 'RANDOM' | 'KMEANS++' | 'CUSTOM' }

説明

K 平均法モデルの場合、クラスタを初期化するメソッド。

CREATE MODEL クエリの繰り返しで同じセントロイドを使用するには、オプション 'CUSTOM' を指定します。

引数

'RANDOM': 入力データから NUM_CLUSTERS データポイントをランダムに選択してセントロイドを初期化します。

'KMEANS++': KMEANS++ アルゴリズムを使用して、NUM_CLUSTERS セントロイドを初期化します。'KMEANS++' は、'RANDOM' クラスタ初期化より良いモデルをトレーニングします。

'CUSTOM': 提供されたBOOL型の列を使用してセントロイドを初期化します。この列はオプション 'KMEANS_INIT_COL' で指定します。BigQuery ML では、初期セントロイドとして TRUE の値を持つ行が使用されます。このオプションを用い、'KMEANS_INIT_COL' の値が定数の場合、CREATE MODELクエリの繰り返しでは同じセントロイドを使用します。

デフォルト値は 'RANDOM' です。

KMEANS_INIT_COL

構文

KMEANS_INIT_COL = string_value

説明

K 平均法モデルにおいて、セントロイドの初期化に使用する列を識別します。この列に指定の行の TRUE の値が含まれる場合、BigQuery ML はその行を初期セントロイドとして使用します。

このオプションは、'KMEANS_INIT_METHOD' 値が 'CUSTOM' の場合にのみ指定できます。対応する列は、BOOL 型でなければなりません。モデル オプション NUM_CLUSTERS は、クエリ内に存在しなければならず、その値はこの列の TRUE 行の合計数値と等しくなければなりません。BigQuery ML はこの列を機能として使用できず、機能から自動的に除外されます。

引数

string_valueSTRING です。

DISTANCE_TYPE

構文

DISTANCE_TYPE = { 'EUCLIDEAN' | 'COSINE' }

説明

K 平均法モデルの場合、2 点間の距離を計算する指標の型。

引数

次の値を受け入れます。

'EUCLIDEAN' 次の式を使用して、ポイント xy の間の距離を計算します。

$$ \lVert x-y\rVert_{2} $$

'COSINE' 距離を計算する次の式を使用します。

$$ \sqrt{1-\frac{x \cdot y}{\lVert x\rVert_{2}\lVert y\rVert_{2}}} $$

ここで、\( \lVert x\rVert_{2} \) は、x の L2 ノルムを表します。

デフォルト値は 'EUCLIDEAN' です。

STANDARDIZE_FEATURES

構文

STANDARDIZE_FEATURES = { TRUE | FALSE }

説明

kmeans モデルの場合、数値特徴を標準化するかどうか。

引数

BOOL を受け入れます。デフォルト値は TRUE です。

MODEL_PATH

構文

MODEL_PATH = string_value

説明

TensorFlow モデルタイプの場合、インポートする TensorFlow モデルのロケーションを指定します。

string_value は、インポートするモデルを含む Google Cloud Storage バケットのロケーションです。

詳細については、TensorFlow モデルの CREATE MODEL ステートメントをご覧ください。

MODEL_PATH = 'gs:////bucket/path/to/saved_model/*'

FEEDBACK_TYPE

構文

FEEDBACK_TYPE = { 'EXPLICIT' | 'IMPLICIT' }

説明

トレーニング中に使用されるアルゴリズムを変更する行列分解モデルのフィードバック タイプを指定します。

詳細については、行列分解モデルをご覧ください。

引数

デフォルト値は 'EXPLICIT' です。

NUM_FACTORS

構文

NUM_FACTORS = int64_value

説明

行列分解モデルに使用する潜在的要素の数を指定します。

引数

int64_value'INT64' です。指定できる値は 2~200 です。デフォルト値は log2(n) です。ここで、n はトレーニング例の数です。

USER_COL

構文

USER_COL = string_value

説明

行列分解モデルのユーザー列名。

引数

string_value'STRING' です。デフォルト値は 'user' です。

ITEM_COL

構文

ITEM_COL = string_value

説明

行列分解モデルのアイテム列名。

引数

string_value'STRING' です。デフォルト値は 'item' です。

RATING_COL

構文

RATING_COL = string_value

説明

行列分解モデルの評価列名。

引数

string_value'STRING' です。デフォルト値は 'rating' です。

WALS_ALPHA

構文

WALS_ALPHA = float64_value

説明

'IMPLICIT' 行列分解モデルのハイパーパラメータ。詳細については、行列分解モデルをご覧ください。

引数

float64_value'FLOAT64' です。デフォルト値は 40 です。

BUDGET_HOURS

構文

BUDGET_HOURS = float64_value

説明

AutoML Tables トレーニングのトレーニング予算を時間単位で設定します。デフォルトは 1.0 で、1.0~72.0 の範囲で指定する必要があります。このオプションは、MODEL_TYPEAUTOML_REGRESSOR または AUTOML_CLASSIFIER の場合にのみ使用できます。

AutoML Tables モデルのトレーニング後、BigQuery ML はインポートに適したサイズになるまでモデルを圧縮します。この圧縮にかかる時間がトレーニング全体の 50% に達することがあります。モデルの圧縮時間はトレーニング予算時間に含まれません。

詳細については、AutoML Tables モデルの CREATE MODEL ステートメントをご覧ください。

引数

float64_valueFLOAT64 です。

BOOSTER_TYPE

構文

BOOSTER_TYPE =  { 'GBTREE' | 'DART'}

説明

ブーストツリー モデルの場合、使用するブースターのタイプを指定します。デフォルト値は GBTREE です。

引数

次のオプションが用意されています。

NUM_PARALLEL_TREE

構文

NUM_PARALLEL_TREE = int64_value

説明

各イテレーションで構築される並列ツリーの数。デフォルト値は 1 です。ブースト ランダム フォレストをトレーニングする場合は、この値を 1 より大きい値に設定します。

DART_NORMALIZE_TYPE

構文

DART_NORMALIZE_TYPE = { 'TREE' | 'FOREST'}

説明

DART ブースターの正規化アルゴリズムのタイプ。デフォルト値は TREE です。

TREE_METHOD

構文

TREE_METHOD = { 'AUTO' | 'EXACT' | 'APPROX' | 'HIST'}

説明

ツリー構築アルゴリズムのタイプ。デフォルト値は AUTO です。

MIN_TREE_CHILD_WEIGHT

構文

MIN_TREE_CHILD_WEIGHT = float64_value

説明

子でさらにパーティショニングを行う場合に必要になるインスタンスの重みの最小合計。ツリー パーティショニング ステップの結果、リーフノードのインスタンスの重みの合計が min_tree_child_weight を下回ると、構築プロセスでパーティショニングが停止します。min_tree_child_weight の値が大きいほど、アルゴリズムは保守的になります。値は 0 以上にする必要があります。デフォルト値は 1 です。

COLSAMPLE_BYTREE

構文

COLSAMPLE_BYTREE = float64_value

説明

各ツリーを構築するときの列のサブサンプリング率。サブサンプリングは、構築された各ツリーで 1 回だけ行われます。値は 0~1 にする必要があります。デフォルト値は 1 です。

COLSAMPLE_BYLEVEL

構文

COLSAMPLE_BYLEVEL = float64_value

説明

各レベルの列のサブサンプリング率。サブサンプリングは、ツリーで新しい深さレベルに達するたびに 1 回行われます。列は、現在のツリーで選択された一連の列からサブサンプリングされます。値は 0~1 にする必要があります。デフォルト値は 1 です。

COLSAMPLE_BYNODE

構文

COLSAMPLE_BYNODE = float64_value

説明

各ノードの列のサブサンプリングル率(スプリット)。サブサンプリングは、新しいスプリットが評価されるたびに行われます。列は、現在のレベルで選択された一連の列からサブサンプリングされます。値は 0~1 にする必要があります。デフォルト値は 1 です。

MIN_SPLIT_LOSS

構文

MIN_SPLIT_LOSS = float64_value

説明

ツリーのリーフノードにさらに分割を行うために必要な最小損失削減。min_split_loss の値が大きいほど、アルゴリズムは保守的になります。デフォルト値は 0 です。

MAX_TREE_DEPTH

構文

MAX_TREE_DEPTH = int64_value

説明

ツリーの最大深度。デフォルト値は 6 です。

SUBSAMPLE

構文

SUBSAMPLE = float64_value

説明

トレーニング インスタンスのサブサンプリング率。この値を 0.5 に設定すると、ツリーを拡大する前にトレーニング データの半分がランダムにサンプリングされ、過学習を防ぎます。サブサンプリングは、ブースト イテレーションごとに 1 回行われます。これは、トレーニング オプションで使用されるトレーニング テストデータの分割とは関係ありません(デフォルトでは 80 / 20 ランダム)。テストデータは、サブサンプリングに関係なく、どのイテレーションでも使用されません。サブサンプリングは、トレーニング データにのみ適用されます。値は 0~1 にする必要があります。デフォルト値は 1.0 です(各イテレーションですべてのトレーニング データが使用されます)。

ACTIVATION_FN

構文

ACTIVATION_FN =  { 'RELU' | 'RELU6' | 'CRELU' | 'ELU' | 'SELU' | 'SIGMOID' | 'TANH' }

説明

DNN モデルタイプの場合、ニューラル ネットワークの活性化関数を指定します。

引数

次のオプションが用意されています。

BATCH_SIZE

構文

BATCH_SIZE = int64_value

説明

DNN モデルタイプの場合、ニューラル ネットワークにフィードされるサンプルのミニバッチ サイズを指定します。

引数

デフォルト値は、1,024 とサンプル数の小さい方になります。

最大値は 8,192 です。

DROPOUT

構文

DROPOUT = float64_value

説明

DNN モデルタイプの場合、ニューラル ネットワークのユニットのドロップアウト率を指定します。

引数

デフォルト値は 0 です。有効な入力値は 0.0~1.0 です。

HIDDEN_UNITS

構文

HIDDEN_UNITS = int_array

説明

DNN モデルタイプの場合、ニューラル ネットワークの隠れ層を指定します。

引数

隠れ層のアーキテクチャを表す整数の配列。指定しない場合、BigQuery ML は 128 ユニット以下の単一の隠れ層を適用します。

HIDDEN_UNITS = [256, 128, 64]

この例は、256 ノード、128 ノード、64 ノードの 3 つ隠れ層から構成されるアーキテクチャを表しています。

OPTIMIZER

構文

OPTIMIZER =  { 'ADAGRAD' | 'ADAM' | 'FTRL' | 'RMSPROP' | 'SGD' }

説明

DNN モデルタイプの場合、モデルのトレーニングに使用するオプティマイザを指定します。

引数

次のオプションが用意されています。

TIME_SERIES_TIMESTAMP_COL

構文

TIME_SERIES_TIMESTAMP_COL = string_value

説明

時系列モデルのタイムスタンプ列の名前。

引数

string_value'STRING' です。

TIME_SERIES_DATA_COL

構文

TIME_SERIES_DATA_COL = string_value

説明

時系列モデルのデータ列名。

引数

string_value'STRING' です。

TIME_SERIES_ID_COL

構文

TIME_SERIES_ID_COL = string_value

説明

時系列モデルの ID 列名。この列は、1 つのクエリで複数の時系列を適合し、予測する場合に使用します。異なる ID は異なる時系列を示します。

引数

string_value'STRING' です。

HORIZON

構文

HORIZON = int64_value

説明

予測する時点の数。複数の時系列を一度に予測する場合、このパラメータは各時系列に適用されます。

引数

値は INT64 です。デフォルト値は 1,000 です。最大値は 10,000 です。

AUTO_ARIMA

構文

AUTO_ARIMA = { TRUE | FALSE }

説明

トレーニング プロセスで auto.ARIMA を使用するかどうかを指定します。true の場合、トレーニングは季節性以外の最適な順序(p, d, q タプルなど)を自動的に検出し、d が 1 の場合に線形ドリフト項を含めるかどうかを決定します。false の場合、クエリで non_seasonal_order を指定する必要があります。複数の時系列を同時に予測する場合は、時系列ごとに auto.ARIMA アルゴリズムを使用する必要があるため、このオプションを false に設定しないでください。

引数

値は BOOL です。デフォルト値は TRUE です。

NON_SEASONAL_ORDER

構文

NON_SEASONAL_ORDER = (int64_value, int64_value, int64_value)

説明

ARIMA モデルの季節性以外のタプル(p、d、q)。デフォルト値はありません。すべて指定する必要があります。このオプションを使用するには、auto_arima を明示的に false に指定する必要があります。現在、p と q は [0, 1, 2, 3, 4, 5] に制限され、d は [0, 1, 2] に制限されています。複数の時系列を一度に予測する場合、季節性以外の 1 つの特定の順序がすべての時系列に一致する可能性はほぼありません。各時系列に季節性外の最適な順序を検出するために auto.ARIMA アルゴリズムが使用されます。この場合、このオプションは無効になります。

引数

(int64_value, int64_value, int64_value) は、3 つの 'INT64' のタプルです。

DATA_FREQUENCY

構文

DATA_FREQUENCY = { 'AUTO_FREQUENCY' | 'HOURLY' | 'DAILY' | 'WEEKLY' | 'MONTHLY' | 'QUARTERLY' | 'YEARLY' }

説明

入力時系列のデータ頻度。サポートされている最小粒度は 'HOURLY' です。複数の時系列を一度に予測する場合、この引数のデフォルト値('AUTO_FREQUENCY')は変更できません。

引数

次の値を受け入れます。

'AUTO_FREQUENCY': トレーニング プロセスでデータ頻度が自動的に推定されます。データ頻度は次のいずれかになります。

'HOURLY': 1 時間ごとの時系列

'DAILY': 1 日ごとの時系列

'WEEKLY': 1 週間ごとの時系列

'MONTHLY': 1 か月ごとの時系列

'QUARTERLY': 四半期ごとの時系列

'YEARLY': 1 年ごとの時系列

デフォルト値は 'AUTO_FREQUENCY' です。

INCLUDE_DRIFT

構文

INCLUDE_DRIFT = { TRUE | FALSE }

説明

ARIMA モデルに線形ドリフト項が含まれるかどうかを指定します。ドリフト項は、季節性以外の d が 1 でない場合に適用されます。

  • auto-arima が false に設定されている場合、この引数はデフォルトで false になります。季節性以外の d が 1 の場合にのみ true に設定できます。それ以外の場合は、無効なクエリエラーが返されます。

  • auto-arima を true に設定すると、線形ドリフト項を含めるかどうかが自動的に決定されます。このため、このオプションは auto-ARIMA で無効になっています。

引数

値は BOOL です。auto_arima のデフォルト値は FALSE です。

HOLIDAY_REGION

構文

HOLIDAY_REGION = { 'GLOBAL' | 'NA' | 'JAPAC' | 'EMEA' | 'LAC' | 'AE' | ... }

説明

モデリングで適用される休日効果のベースとなる地域。デフォルトでは、休日効果のモデリングは無効になっています。有効にするには、このオプションを使用して休日の基準となる地域を指定します。

引数

次の値を受け入れます。

第 1 レベル: グローバル

  • 'GLOBAL'

第 2 レベル: 大陸のリージョン

  • 'NA': 北米
  • 'JAPAC': 日本、アジア太平洋
  • 'EMEA': ヨーロッパ、中東、アフリカ
  • 'LAC': ラテンアメリカとカリブ海地域

第 3 レベル: 国/地域

  • 'AE': アラブ首長国連邦
  • 'AR': アルゼンチン
  • 'AT': オーストリア
  • 'AU': オーストラリア
  • 'BE': ベルギー
  • 'BR': ブラジル
  • 'CA': カナダ
  • 'CH': スイス
  • 'CL': チリ
  • 'CN': 中国
  • 'CO': コロンビア
  • 'CZ': チェコ
  • 'DE': ドイツ
  • 'DK': デンマーク
  • 'DZ': アルジェリア
  • 'EC': エクアドル
  • 'EE': エストニア
  • 'EG': エジプト
  • 'ES': スペイン
  • 'FI': フィンランド
  • 'FR': フランス
  • 'GB': 英国
  • 'GR': ギリシャ
  • 'HK': 香港
  • 'HU': ハンガリー
  • 'ID': インドネシア
  • 'IE': アイルランド
  • 'IL': イスラエル
  • 'IN': インド
  • 'IR': イラン
  • 'IT': イタリア
  • 'JP': 日本
  • 'KR': 韓国
  • 'LV': ラトビア
  • 'MA': モロッコ
  • 'MX': メキシコ
  • 'MY': マレーシア
  • 'NG': ナイジェリア
  • 'NL': オランダ
  • 'NO': ノルウェー
  • 'NZ': ニュージーランド
  • 'PE': ペルー
  • 'PH': フィリピン
  • 'PK': パキスタン
  • 'PL': ポーランド
  • 'PT': ポルトガル
  • 'RO': ルーマニア
  • 'RS': セルビア
  • 'RU': ロシア
  • 'SA': サウジアラビア
  • 'SE': スウェーデン
  • 'SG': シンガポール
  • 'SI': スロベニア
  • 'SK': スロバキア
  • 'TH': タイ
  • 'TR': トルコ
  • 'TW': 台湾
  • 'UA': ウクライナ
  • 'US': 米国
  • 'VE': ベネズエラ
  • 'VN': ベトナム
  • 'ZA': 南アフリカ

query_statement

AS query_statement 句は、トレーニング データの生成に使用する標準 SQL クエリを指定します。query_statement 句でサポートされる SQL 構文については、標準 SQL クエリの構文 ページをご覧ください。

input_label_colsdata_split_col に含まれる列を除き、query_statement で参照されているすべての列がモデルへの入力として使用されます。

サポートされている入力

CREATE MODEL ステートメントは、入力ラベル列とデータ分割列について次のデータ型をサポートしています。

入力ラベル列でサポートされているデータ型

BigQuery ML は、モデルタイプに応じてさまざまな標準 SQL データ型をサポートします。input_label_cols でサポートされているデータ型は次のとおりです。

Model type Supported label types
linear_reg INT64
NUMERIC
FLOAT64
logistic_reg 任意の Groupable(グループ分け可能)データ型
kmeans 任意の Groupable(グループ分け可能)データ型

データ分割列でサポートされているデータ型

BigQuery ML は、データ分割方法に応じてさまざまな標準 SQL データ型をサポートします。data_split_col でサポートされているデータ型は次のとおりです。

Data split method Supported column types
custom BOOL
seq INT64
NUMERIC
FLOAT64
TIMESTAMP

制限事項

CREATE MODEL ステートメントは、以下の規則に従う必要があります。

  • 使用できる CREATE ステートメントは 1 つのみです。
  • CREATE MODEL ステートメントを使用する場合、モデルのサイズは 90 MB 以下にする必要があります。このサイズを超えると、クエリが失敗します。一般に、すべてのカテゴリ変数が短い文字列であれば、合計で 500 万~1,000 万の特徴カーディナリティ(モデルの次元)がサポートされます。次元数は、文字列変数のカーディナリティと長さに依存します。
  • ラベル列に NULL 値を含めることはできません。ラベル列に NULL 値が含まれていると、クエリが失敗します。
  • 現在、CREATE MODEL IF NOT EXISTS 句を使用すると、モデルの最終変更タイムスタンプが常に更新されます。
  • 線形回帰モデルの場合、label 列を実数にする必要があります(正負の無限大や NaN にはできません)。
  • ロジスティック回帰モデルの場合、ラベル列には一意の値を最大 50 個含めることができます。つまり、クラスの数は 50 以下です。

入力変数の変換

BigQuery ML は、入力変数または特徴を次のように変換します。

入力データ型 変換方法 詳細
INT64
NUMERIC
FLOAT64
標準化 すべての数値列について、BigQuery ML は列を標準化し、平均値を 0 としてからトレーニングに渡します(ただし、ブーストツリー モデルは除きます)。K 平均法モデルを作成する場合、STANDARDIZE_FEATURES オプションによって数値特徴を標準化するかどうかを指定します。
BOOL
STRING
BYTES
DATE
DATETIME
TIME
ワンホット エンコード 数値型でも配列型でもないすべての列(TIMESTAMP は除く)について、BigQuery ML はワンホット エンコーディング変換を行います(ただし、ブーストツリー モデルは除きます)。この変換により、列内の一意の値ごとに個別の特徴が生成されます。ラベル エンコード変換は、ブーストツリー モデルのトレーニングに適用されます。この変換では、一意の値がそれぞれ数値に変換されます。
ARRAY マルチホット エンコード すべての数値型ではない ARRAY 列の場合、BigQuery ML はマルチホット エンコーディング変換を行います。この変換により、ARRAY 内の一意の要素ごとに個別の特徴が生成されます。
TIMESTAMP タイムスタンプ変換 BigQuery ML は、TIMESTAMP 列を検出すると TIMESTAMP から一連のコンポーネントを抽出し、抽出されたコンポーネントに標準化とワンホット エンコーディングの組み合わせを実施します。秒単位の Unix 時間コンポーネントの場合、BigQuery ML は標準化を使用します。他のすべてのコンポーネントでは、ワンホット エンコーディングを使用します。

ML.WEIGHTS 関数を使用すると、TIMESTAMP 列が複数の特徴列へ変換されることを確認できます。
STRUCT 構造体の展開 BigQuery ML は STRUCT 列を検出すると、STRUCT 内のフィールドが単一の列に展開されます。すべてのフィールドに名前を付ける必要があります。ネストされた STRUCT は使用できません。展開後の列名は、{struct_name}_{field_name} の形式です。

補完

統計学では、欠損データを代替値で置き換えるために補完を使用します。BigQuery ML でモデルをトレーニングする場合、NULL 値は欠損データとして処理されます。BigQuery ML で結果を予測する場合、BigQuery ML が NULL 値や未知の値に遭遇すると、欠損値が発生する可能性があります。BigQuery ML は、列が数値、ワンホット エンコード、またはタイムスタンプのいずれであるかに基づいて、欠損データを処理します。

数値列

トレーニングと予測の両方で、数値列の NULL 値は、元の入力データの特徴列によって計算された平均値に置き換えられます。

ワンホット / マルチホット エンコード列

トレーニングと予測の両方で、エンコード列の NULL 値は、データに追加される追加カテゴリにマッピングされます。未知のデータには、予測時に重み 0 が割り当てられます。

タイムスタンプ列

TIMESTAMP 列では、標準化列とワンホット エンコード列の両補完方法が組み合わせて使用されます。生成された Unix 時間列の場合、BigQuery ML は値を元の列全体の平均 Unix 時間で置き換えます。その他の生成された値の場合、BigQuery ML は抽出された各特徴のそれぞれの NULL カテゴリに値を割り当てます。

STRUCT 列

トレーニングと予測の両方で、STRUCT の各フィールドはタイプに応じて補完されます。

CREATE MODEL の例

CREATE MODEL ステートメントは、指定されたオプションを持つモデルを作成します。モデル名がデータセット内に存在する場合、次のエラーが返されます。

Already Exists: [PROJECT_ID]:[DATASET].[MODEL]

既存のモデルを置き換えるには、CREATE OR REPLACE MODEL ステートメントを使用します。

次の例では、デフォルト プロジェクトにある mydataset 内に mymodelという名前のモデルを作成します。

線形回帰モデルのトレーニング

次の例では、線形回帰モデルを作成してトレーニングします。学習率は .15 に設定し、L1 正則化は 1 に設定しています。また、トレーニングの最大繰り返し回数は 5 に設定しています。

CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE='LINEAR_REG',
    LS_INIT_LEARN_RATE=.15,
    L1_REG=1,
    MAX_ITERATIONS=5 ) AS
SELECT
  column1,
  column2,
  column3,
  label
FROM
  `mydataset.mytable`
WHERE
  column4 < 10

順次データ分割で線形回帰モデルをトレーニングする

次の例では、順次データ分割で線形回帰モデルを作成します。分割割合は .3 で、timestamp 列で分割を行います。

CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE='LINEAR_REG',
    LS_INIT_LEARN_RATE=.15,
    L1_REG=1,
    MAX_ITERATIONS=5,
    DATA_SPLIT_METHOD='SEQ',
    DATA_SPLIT_EVAL_FRACTION=0.3,
    DATA_SPLIT_COL='timestamp' ) AS
SELECT
  column1,
  column2,
  column3,
  timestamp,
  label
FROM
  `mydataset.mytable`
WHERE
  column4 < 10

カスタムデータ分割で線形回帰モデルをトレーニングする

次の例では、手動でデータをトレーニング テーブルと評価テーブルに分割します。トレーニング テーブルの名前は training_table です。評価テーブルの名前はevaluation_table です。

次のコマンドは、カスタム分割方法で線形回帰モデルを作成し、評価テーブルのデータとトレーニング テーブルのデータを使用してモデルをトレーニングします。

CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE='LINEAR_REG',
    DATA_SPLIT_METHOD='CUSTOM',
    DATA_SPLIT_COL='SPLIT_COL' ) AS
SELECT
  *,
  false AS split_col
FROM
  `mydataset.training_table`
UNION ALL
SELECT
  *,
  true AS split_col
FROM
  `mydataset.evaluation_table`

この例では、トレーニング テーブルと評価テーブルのすべての列が特徴またはラベルになります。このクエリでは、SELECT *UNION ALL を使用して、split_col 列のすべてのデータを既存のデータに追加しています。

自動計算の重みで多項ロジスティック回帰モデルをトレーニングする

この例では、auto_class_weights オプションを使用して、多項ロジスティック回帰モデルを作成します。

CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE='LOGISTIC_REG',
    AUTO_CLASS_WEIGHTS=TRUE ) AS
SELECT
  *
FROM
  `mydataset.mytable`

指定の重みで多項ロジスティック回帰モデルをトレーニングする

この例では、class_weights オプションを使用して、多項ロジスティック回帰モデルを作成します。ラベルの列は、label1label2label3 です。

CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE='LOGISTIC_REG',
    CLASS_WEIGHTS=[('label1', 0.5), ('label2', 0.3), ('label3', 0.2)]) AS
SELECT
  *
FROM
  `mydataset.mytable`

指定の重みでロジスティック回帰モデルをトレーニングする

この例では、class_weights オプションを使用して、ロジスティック回帰モデルを作成します。

CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE='LOGISTIC_REG',
    CLASS_WEIGHTS=[('0', 0.9), ('1', 0.1)]) AS
SELECT
  *
FROM
  `mydataset.mytable`

K 平均法モデルのトレーニング

この例では、euclidean_distance のデフォルト値 distance_type を使用して、4 つのクラスタで K 平均法モデルを作成します。

CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE='KMEANS',
    NUM_CLUSTERS=4 ) AS
SELECT
  *
FROM `mydataset.mytable`

ランダム クラスタを使用した K 平均法モデルのトレーニング

この例では、ランダム クラスタ初期化メソッドを使用して、3 つのクラスタで K 平均法モデルを作成します。

CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE='KMEANS',
    NUM_CLUSTERS=3,
    KMEANS_INIT_METHOD='RANDOM') AS
SELECT
  *
FROM
  `mydataset.mytable`

カスタム クラスタを使用した K 平均法モデルのトレーニング

この例では、カスタム クラスタ初期化メソッドを使用して、4 つのクラスタで K 平均法モデルを作成します。init_col は、特定の行が初期セントロイドであるかどうかを指定する値を含む BOOL 型の列を識別します。この列には、TRUE 値を持つ 3 行のみが入ります。

CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE='KMEANS',
    NUM_CLUSTERS=3,
    KMEANS_INIT_METHOD='CUSTOM',
    KMEANS_INIT_COL='init_col') AS
SELECT
  init_col,
  features
FROM
  `mydataset.mytable`

変換を使用するモデル作成(元の列を除外)

次のクエリは、SELECT ステートメントからの f1f2 列をトレーニングし、新しい c 列を作成します。f1f2 列は、トレーニング データから省略されます。モデル トレーニングでは、データソース t に表示されるので、f3label_col 列を使用します。

CREATE MODEL m
  TRANSFORM(f1 + f2 as c, * EXCEPT(f1, f2))
  OPTIONS(model_type=’linear_reg’, input_label_cols=['label_col'])
AS SELECT f1, f2, f3, label_col FROM t;