ML.MULTI_HOT_ENCODER 関数

このドキュメントでは、マルチホット エンコード スキームを使用して文字列配列式をエンコードできる ML.MULTI_HOT_ENCODER 関数について説明します。

エンコードする語彙は、アルファベット順に並べ替えられます。NULL 値と語彙に含まれていないカテゴリは、index0 でエンコードされます。

TRANSFORMで使用する場合、トレーニングで計算された語彙と、上位の k および指定した頻度のしきい値予測に自動的に使用されます。

構文

ML.MULTI_HOT_ENCODER(array_expression [, top_k] [, frequency_threshold]) OVER()

引数

ML.MULTI_HOT_ENCODER は次の引数を取ります。

  • array_expression: エンコードする ARRAY<STRING> 式。
  • top_k: エンコードする語彙に含まれるカテゴリ数を指定する INT64 値。この関数はデータ内で top_k の最頻カテゴリを選択し、それらを使用します。このしきい値を下回るカテゴリは 0 にエンコードされます。高次元化による問題を回避するため、この値は 1,000,000 未満にする必要があります。デフォルト値は 32,000 です。
  • frequency_threshold: カテゴリの頻度に基づいてエンコード語彙に含まれるカテゴリを制限する INT64 値。この関数は、頻度が frequency_threshold 以上のカテゴリを使用します。このしきい値を下回るカテゴリは 0 にエンコードされます。デフォルト値は 5 です。

出力

ML.MULTI_HOT_ENCODER は、ARRAY<STRUCT<INT64, FLOAT64>> の形式で構造体値の配列を返します。構造体内の最初の要素はエンコードされた文字列式のインデックスを指定し、2 番目の要素はエンコードされた文字列式の値を指定します。

次の例では、文字列配列式のセットにマルチホット エンコードを行います。エンコード語彙は、データ中に最も頻繁に出現し、かつ 1 回以上出現する 3 つのカテゴリに限定します。

SELECT f[OFFSET(0)] AS f0, ML.MULTI_HOT_ENCODER(f, 3, 1) OVER () AS output
FROM
  (
    SELECT ['a', 'b', 'b', 'c', NULL] AS f
    UNION ALL
    SELECT ['c', 'c', 'd', 'd', NULL] AS f
  )
ORDER BY f[OFFSET(0)];

出力は次のようになります。

+------+-----------------------------+
|  f0  | output.index | output.value |
+------+--------------+--------------+
|  a   |  1           |  1.0         |
|      |  2           |  1.0         |
|      |  3           |  1.0         |
|      |  0           |  1.0         |
|  c   |  3           |  1.0         |
|      |  0           |  1.0         |
+------+-----------------------------+

次のステップ