在 BigQuery ML 上进行训练时,有两种数据预处理类型:
- 自动预处理。BigQuery ML 在训练期间执行自动预处理。如需了解详情,请参阅
CREATE MODEL
语句。 - 手动预处理。BigQuery ML 提供了
TRANSFORM
子句,您可以借助该子句使用本页面上的预处理函数来定义自定义预处理。您还可以在TRANSFORM
子句外部使用这些函数。
BigQuery ML 在模型导出中包含自动预处理,但不包含手动预处理。
预处理函数有两种类型,即标量和分析:
- 标量函数处理单个行(例如,
ML.BUCKETIZE
)。 - 分析函数处理所有行(例如,
ML.QUANTILE_BUCKETIZE
),并根据所有行中收集的统计信息输出每行的结果。
机器学习分析函数与常规分析函数不同,因为您始终需要将他们与空 OVER()
子句配合使用。
在训练期间,如果在 TRANSFORM
子句中使用机器学习分析函数,则会自动对预测中的输入应用相同的统计信息。
ML.BUCKETIZE
ML.BUCKETIZE(numerical_expression, array_split_points[, exclude_boundaries])
说明
在 array_split_points
将 numerical_expression
拆分成多个存储分区后,将 STRING 作为存储分区名称返回。
返回的存储分区名称采用 bin_<bucket_index>
格式,并且 bucket_index
从 1 开始。每个存储分区的范围是 [lower_bound, upper_bound)。
输入
numerical_expression
:要进行分区的数值表达式。array_split_points
:已排序的数值数组,具有要用于拆分numerical_expression
的点。exclude_boundaries
:可选 BOOL。如果为TRUE
,则从array_split_points
中移除这两个边界。默认值为FALSE
。
返回数据类型
STRING
示例
SELECT
ML.BUCKETIZE(2.5, [1, 2, 3]) AS bucket,
ML.BUCKETIZE(2.5, [1, 2, 3], TRUE) AS bucket_without_boundaries;
+---------+----------------------------+
| bucket | bucket_without_boundaries |
+---------+----------------------------+
| bin_3 | bin_2 |
+---------+----------------------------+
ML.POLYNOMIAL_EXPAND
ML.POLYNOMIAL_EXPAND(struct_numerical_features[, degree])
说明
返回一个 STRUCT,其中包含数值输入特征的所有多项式组合,其次数不大于传入的次数(包括原始特征)。输出 STRUCT 的字段名称通过原始特征名称串联而来。
输入
struct_numerical_features
:要展开的 STRUCT 中包含的数值特征。STRUCT 中输入特征的数量上限为 10 个。struct_numerical_features
中不允许输入未命名的特征。不允许输入重复的特征。degree
:可选 INT64。所有组合的最高次数,范围为 [1, 4]。默认值为 2。
返回数据类型
STRUCT of DOUBLE
示例
SELECT
ML.POLYNOMIAL_EXPAND(STRUCT(2 AS f1, 3 AS f2)) AS output;
+-------------------------------------------------------------------+
| output |
+-------------------------------------------------------------------+
| {"f1":"2.0","f1_f1":"4.0","f1_f2":"6.0","f2":"3.0","f2_f2":"9.0"} |
+-------------------------------------------------------------------+
ML.FEATURE_CROSS
ML.FEATURE_CROSS(struct_categorical_features[, degree])
说明
返回一个 STRUCT,其中包含交叉分类特征的所有组合,除了 1 次项(原始特征)和自交项外,其次数不大于传入的次数。输出 STRUCT 的字段名称通过原始特征名称串联而来。
输入
struct_categorical_features
:要交叉的 STRUCT 中包含的分类特征。STRUCT 中输入特征的数量上限为 10 个。struct_numerical_features
中不允许输入未命名的特征。不允许输入重复的特征。degree
:可选 INT64。所有组合的最高次数,范围为 [2, 4]。默认值为 2。
返回数据类型
STRUCT of STRING
示例
SELECT
ML.FEATURE_CROSS(STRUCT('a' AS f1, 'b' AS f2, 'c' AS f3)) AS output;
+---------------------------------------------+
| output |
+---------------------------------------------+
| {"f1_f2":"a_b","f1_f3":"a_c","f2_f3":"b_c"} |
+---------------------------------------------+
ML.NGRAMS
ML.NGRAMS(array_input, range[, separator])
说明
通过合并 array_input
中的相邻令牌,将 ARRAY of STRING 以 n-gram 的形式返回。
输入
array_input
:ARRAY of STRING。字符串是要合并的令牌。range
: ARRAY of 2 INT64 元素。这两个已排序的 INT64 元素是要返回的 n-gram 大小的范围。separator
:可选 STRING。用于连接输出中两个相邻令牌的分隔符。默认值为空白。
返回数据类型
ARRAY of STRING
示例
SELECT
ML.NGRAMS(['a', 'b', 'c'], [2,3], '#') AS output;
+-----------------------+
| output |
+-----------------------+
| ["a#b","a#b#c","b#c"] |
+-----------------------+
ML.QUANTILE_BUCKETIZE
ML.QUANTILE_BUCKETIZE(numerical_expression, num_buckets) OVER()
说明
将连续的数值特征分区为 STRING,储存分区名称为基于分位数的值。
返回的存储分区名称采用 bin_<bucket_index>
格式,并且 bucket_index
从 1 开始。
在 TRANSFORM
子句中使用时,预测中会自动使用相同的分位数。
输入
numerical_expression
:要进行分区的数值表达式。num_buckets
:INT64。要将numerical_expression
拆分成的存储分区数。
返回数据类型
STRING
示例
SELECT
f, ML.QUANTILE_BUCKETIZE(f, 3) OVER() AS bucket
FROM
UNNEST([1,2,3,4,5]) AS f;
+---+--------+
| f | bucket |
+---+--------+
| 3 | bin_2 |
| 5 | bin_3 |
| 2 | bin_2 |
| 1 | bin_1 |
| 4 | bin_3 |
+---+--------+
ML.MIN_MAX_SCALER
ML.MIN_MAX_SCALER(numerical_expression) OVER()
说明
将 numerical_expression
按比例缩减为 [0, 1],并且所有行均具有 MIN 和 MAX。
在 TRANSFORM
子句中使用时,预测中会自动使用相同的 MIN 和 MAX。如果预测数据超出 [MIN,MAX] 范围,则其极限值为 0 或 1。
输入
numerical_expression
:要按比例缩减的数值表达式。
返回数据类型
DOUBLE
示例
SELECT
f, ML.MIN_MAX_SCALER(f) OVER() AS output
FROM
UNNEST([1,2,3,4,5]) AS f;
+---+--------+
| f | output |
+---+--------+
| 4 | 0.75 |
| 2 | 0.25 |
| 1 | 0.0 |
| 3 | 0.5 |
| 5 | 1.0 |
+---+--------+
ML.STANDARD_SCALER
ML.STANDARD_SCALER(numerical_expression) OVER()
说明
标准化 numerical_expression
。
在 TRANSFORM 子句中使用此函数时,系统会在预测中自动使用为标准化表达式计算的 STDDEV
和 MEAN
。
输入
numerical_expression
:要按比例缩减的数值表达式。
返回数据类型
DOUBLE
示例
SELECT
f, ML.STANDARD_SCALER(f) OVER() AS output
FROM
UNNEST([1,2,3,4,5]) AS f;
+---+---------------------+
| f | output |
+---+---------------------+
| 1 | -1.2649110640673518 |
| 5 | 1.2649110640673518 |
| 2 | -0.6324555320336759 |
| 4 | 0.6324555320336759 |
| 3 | 0.0 |
+---+---------------------+