ML.ONE_HOT_ENCODER 函数
本文档介绍了 ML.ONE_HOT_ENCODER
函数,该函数可让您使用独热或虚拟编码方案对字符串表达式进行编码。
编码词汇表按字母顺序排列。NULL
值和词汇表中不包含的类别均使用 index
值 0
编码。如果您使用虚拟编码,则舍弃的类别使用为 0
的 value
编码。
在 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>>
格式返回一个结构体值数组。结构体中的第一个元素提供编码字符串表达式的索引,第二个元素提供编码字符串表达式的值。
示例
以下示例对一组字符串表达式执行虚拟编码。它将编码词汇表限制为数据中出现次数最多的十个类别,以及出现零次或更多次的类别。
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 语句和函数,请参阅每个模型的端到端用户体验历程。