ML.WEIGHTS
関数
ML.WEIGHTS
関数を使用すると、予測中にモデルが使用する基になる重みを確認できます。
ほとんどのモデルで、ML.WEIGHTS
は次の列を返します。
processed_input
- モデル特徴の入力名。この列の値は、トレーニング中に使用するSELECT
ステートメントの列名と一致します。weight
- 各特徴の重み。数値列の場合、weight には値が入り、category_weights
列は NULL になります。数値以外の列はワンホット エンコーディングに変換されるため、weight 列は NULL になり、category_weights 列は各カテゴリのカテゴリ名と重みの配列になります。category_weights.category
- 入力列が数値以外の場合、カテゴリ名。category_weights.weight
- 入力列が数値以外の場合、カテゴリの重み。class_label
- マルチクラス モデルの場合、class_label
は所定の重みのラベルです。出力は、<class_label, processed_input>
の組み合わせごとに 1 行ずつです。
model
を作成した CREATE MODEL
ステートメントに TRANSFORM
句が含まれている場合、ML.WEIGHTS
は TRANSFORM
出力特徴の重みを出力します。デフォルトでは、重みは非正規化されます。TRANSFORM
なしで作成されたモデルとまったく同じように、正規化された重みを取得することもできます。
TIMESTAMP
の processed_input
の結果
BigQuery ML は、TIMESTAMP
列を検出すると TIMESTAMP
から一連のコンポーネントを抽出し、抽出したコンポーネントに標準化とワンホット エンコーディングの組み合わせを実施します。ML.WEIGHTS
関数を使用すると、変換結果が processed_input
列に表示されます。
次のテーブルに、TIMESTAMP
から抽出されたコンポーネントと対応する変換方法を示します。processed_input
値で、[COLUMN_NAME]
は TIMESTAMP
列の名前です。
TIMESTAMP コンポーネント |
processed_input の結果 |
変換方法 |
---|---|---|
秒単位の Unix 時間 | [COLUMN_NAME] |
標準化 |
日 | _TS_DOM_[COLUMN_NAME] |
ワンホット エンコーディング |
曜日 | _TS_DOW_[COLUMN_NAME] |
ワンホット エンコーディング |
月 | _TS_MOY_[COLUMN_NAME] |
ワンホット エンコーディング |
時間帯 | _TS_HOD_[COLUMN_NAME] |
ワンホット エンコーディング |
分 | _TS_MOH_[COLUMN_NAME] |
ワンホット エンコーディング |
週(週の開始は日曜日) | _TS_WOY_[COLUMN_NAME] |
ワンホット エンコーディング |
年 | _TS_YEAR_[COLUMN_NAME] |
ワンホット エンコーディング |
ML.WEIGHTS
の権限
ML.WEIGHTS
を実行するには、bigquery.models.create
と bigquery.models.getData
の両方が必要です。
行列分解のための ML.WEIGHTS
関数
行列分解の場合、ML.WEIGHTS
は次の列を返します。
processed_input
: ユーザーまたはアイテム列の名前。この列の値は、トレーニング中に使用するSELECT
ステートメントの列名と一致します。feature
: トレーニング中に使用された特定のユーザーまたはアイテムの名前。factor_weights
: 要因のARRAY
と各要因の重み。factor_weights.factor
: トレーニングの潜在要因。1 からNUM_FACTORS
までのINT64
。factor_weights.weight
: 各要因と特徴の重み。intercept
: 特徴の切片またはバイアス項。
最後に、入力データから計算された global__intercept__
を含む追加の行がテーブルにあります。この行には processed_input
と factor_weights
の NULL
値があります。暗黙的なフィードバックモデルの場合、global__intercept__
は常に 0 です。
ML.WEIGHTS
構文
次の構文例では、standardize
は省略可能なパラメータです。モデルの重みを標準化して、すべての特徴の平均が 0 で標準偏差が 1 であると仮定するかどうかを決定します。重みを標準化すると、重みの絶対値の大小を互いに比較できます。デフォルト値は false です。指定する値は、STRUCT の唯一のフィールドである必要があります。
ML.WEIGHTS(MODEL `project-id.dataset.model`) [, STRUCT(<T> as standardize)])
以下を置き換えます。
project-id
: 実際のプロジェクト ID。dataset
: モデルを含む BigQuery データセット。model
: モデルの名前。
ML.WEIGHTS
の例
標準化なしの ML.WEIGHTS
次の例では、mydataset
の mymodel
から重み情報を取得します。このデータセットはデフォルト プロジェクトにあります。
入力列 input_col
に対して、ワンホット エンコーディングされた各カテゴリの重みが返されます。
SELECT category, weight FROM UNNEST(( SELECT category_weights FROM ML.WEIGHTS(MODEL `mydataset.mymodel`) WHERE processed_input = 'input_col'))
category_weights
列がネストされた繰り返し列のため、このコマンドでは UNNEST
関数を使用しています。
標準化ありの ML.WEIGHTS
次の例では、mydataset
の mymodel
から重み情報を取得します。このデータセットはデフォルト プロジェクトにあります。
このクエリは、標準化された重みを取得します。すべての特徴の平均が 0 で標準偏差が 1 であると仮定します。
SELECT * FROM ML.WEIGHTS(MODEL `mydataset.mymodel`, STRUCT(true AS standardize))
ML.WEIGHTS
の制限
ML.WEIGHTS
関数には、次の制限があります。
- インポートした TensorFlow モデルはサポートされていません。
- ブーストツリー モデルはサポートされていません。
行列分解モデルは、重みの標準化のオプションの構造体をサポートしていません。
DNN モデルはサポートされていません。