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_ENCODERARRAY<STRUCT<INT64, FLOAT64>> 格式返回一个结构体值数组。结构体中的第一个元素提供编码字符串表达式的索引,第二个元素提供编码字符串表达式的值。

示例

以下示例会对一组字符串数组表达式执行多热编码。它将编码词汇表限制为数据中出现次数最多的三个类别,以及出现一次或更多次的类别。

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         |
+------+-----------------------------+

后续步骤