预处理函数

在 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_pointsnumerical_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 子句中使用此函数时,系统会在预测中自动使用为标准化表达式计算的 STDDEVMEAN

输入

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