ML.ONE_HOT_ENCODER 関数

このドキュメントでは、ワンホット エンコーディングまたはダミー エンコーディング スキームを使用して文字列式をエンコードできる ML.ONE_HOT_ENCODER 関数について説明します。

エンコードする語彙は、アルファベット順に並べ替えられます。NULL 値と語彙に含まれていないカテゴリは、index0 でエンコードされます。ダミー エンコーディングを使用すると、除外されたカテゴリは value 0 でエンコードされます。

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

構文

ML.ONE_HOT_ENCODER(string_expression [, drop] [, top_k] [, frequency_threshold]) OVER()

引数

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

  • string_expression: エンコードする STRING 式。
  • drop: 関数がカテゴリを除外するかどうかを指定する STRING 値。有効な値は以下のとおりです。
    • none: すべてのカテゴリを保持します。これがデフォルト値です。
    • most_frequent: 文字列式で検出された最頻カテゴリを除外します。この値を選択すると、関数はダミー エンコーディングを使用します。
  • top_k: エンコードする語彙に含まれるカテゴリ数を指定する INT64 値。この関数はデータ内で top_k の最頻カテゴリを選択し、それらを使用します。このしきい値を下回るカテゴリは 0 にエンコードされます。高次元化による問題を回避するため、この値は 1,000,000 未満にする必要があります。デフォルト値は 32,000 です。
  • frequency_threshold: カテゴリの頻度に基づいてエンコード語彙に含まれるカテゴリを制限する INT64 値。この関数は、頻度が frequency_threshold 以上のカテゴリを使用します。このしきい値を下回るカテゴリは 0 にエンコードされます。デフォルト値は 5 です。

出力

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

次の例では、一連の文字列式にダミー エンコーディングを行います。エンコードする語彙は、データ中に最も頻繁に出現し、かつ 0 回以上出現する 10 個のカテゴリに限定します。

SELECT f, ML.ONE_HOT_ENCODER(f, 'most_frequent', 10, 0) OVER () AS output
FROM UNNEST([NULL, 'a', 'b', 'b', 'c', 'c', 'c', 'd', 'd']) AS f
ORDER BY f;

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

+------+-----------------------------+
|  f   | output.index | output.value |
+------+--------------+--------------+
| NULL |  0           |  1.0         |
| a    |  1           |  1.0         |
| b    |  2           |  1.0         |
| b    |  2           |  1.0         |
| c    |  3           |  0.0         |
| c    |  3           |  0.0         |
| c    |  3           |  0.0         |
| d    |  4           |  1.0         |
| d    |  4           |  1.0         |
+------+-----------------------------+

次のステップ