ML.WEIGHTS 関数

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.WEIGHTSTRANSFORM 出力特徴の重みを出力します。デフォルトでは、重みは非正規化されます。TRANSFORM なしで作成されたモデルとまったく同じように、正規化された重みを取得することもできます。

TIMESTAMPprocessed_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.createbigquery.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_inputfactor_weightsNULL 値があります。暗黙的なフィードバックモデルの場合、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

次の例では、mydatasetmymodel から重み情報を取得します。このデータセットはデフォルト プロジェクトにあります。

入力列 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

次の例では、mydatasetmymodel から重み情報を取得します。このデータセットはデフォルト プロジェクトにあります。

このクエリは、標準化された重みを取得します。すべての特徴の平均が 0 で標準偏差が 1 であると仮定します。

SELECT
  *
FROM
  ML.WEIGHTS(MODEL `mydataset.mymodel`,
    STRUCT(true AS standardize))

ML.WEIGHTS の制限

ML.WEIGHTS 関数には、次の制限があります。