ML.ONE_HOT_ENCODER 関数
このドキュメントでは、ワンホット エンコーディングまたはダミー エンコーディング スキームを使用して文字列式をエンコードできる ML.ONE_HOT_ENCODER
関数について説明します。
エンコードする語彙は、アルファベット順に並べ替えられます。NULL
値と語彙に含まれていないカテゴリは、index
値 0
でエンコードされます。ダミー エンコーディングを使用すると、除外されたカテゴリは 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 | +------+-----------------------------+
次のステップ
- 特徴の前処理の詳細については、特徴前処理の概要をご覧ください。
- 各モデルタイプでサポートされている SQL ステートメントと関数については、各モデルのエンドツーエンドのユーザー ジャーニーをご覧ください。