ML.WEIGHTS 函数

ML.WEIGHTS 函数

使用 ML.WEIGHTS 函数可查看预测期间模型使用的基础权重。

对于大多数模型,ML.WEIGHTS 返回以下列:

  • processed_input - 模型特征输入的名称。此列的值与训练期间使用的 SELECT 语句中的列名相匹配。
  • weight - 每个特征的权重。对于数值列,权值包含值且 category_weights 列为 NULL。对于转换为独热编码的非数值列,权重列为 NULL,category_weights 列为每个类别的类别名称和权重构成的 ARRAY。
  • category_weights.category - 输入列为非数值时的类别名称。
  • category_weights.weight - 输入列为非数值时类别的权重。
  • class_label - 对于多类别模型,class_label 是给定权重的标签。在输出中,每个 <class_label, processed_input> 组合为一行。

如果创建 modelCREATE MODEL 语句中存在 TRANSFORM 子句,则 ML.WEIGHTS 会输出 TRANSFORM 输出特征的权重。默认情况下,权重不进行归一化处理,但您可选择获取归一化权重,这与未使用 TRANSFORM 创建的模型完全一样。

TIMESTAMPprocessed_input 结果

当 BigQuery ML 遇到 TIMESTAMP 列时,它会从 TIMESTAMP 中提取一组组件,并对已提取的组件混合执行标准化和独热编码。使用 ML.WEIGHTS 函数时,您可以在 processed_input 列中查看转换结果。

下表显示了从 TIMESTAMP 中提取的组件及相应的转换方法。对于 processed_input 值,[COLUMN_NAME]TIMESTAMP 列的名称。

TIMESTAMP 组件 processed_input 结果 转换方法
Unix 时间(以秒为单位) [COLUMN_NAME] 标准化
一个月中的第几天 _TS_DOM_[COLUMN_NAME] 独热编码
一周中的第几天 _TS_DOW_[COLUMN_NAME] 独热编码
一年中的第几个月 _TS_MOY_[COLUMN_NAME] 独热编码
一天中的第几个小时 _TS_HOD_[COLUMN_NAME] 独热编码
一小时中的第几分钟 _TS_MOH_[COLUMN_NAME] 独热编码
一年中的第几周(每周从星期日开始) _TS_WOY_[COLUMN_NAME] 独热编码
年份 _TS_YEAR_[COLUMN_NAME] 独热编码

ML.WEIGHTS 权限

运行 ML.WEIGHTS 时需要 bigquery.models.createbigquery.models.getData

用于矩阵分解的 ML.WEIGHTS 函数

对于矩阵分解,ML.WEIGHTS 返回以下列:

  • processed_input:用户或推荐项列的名称。此列的值与训练期间使用的 SELECT 语句中的列名相匹配。
  • feature:训练期间使用的特定用户或推荐项的名称。
  • factor_weights:每个因子及其权重的 ARRAY
  • factor_weights.factor:训练中的潜在因子。其类型为 INT64,值从 1 到 NUM_FACTORS
  • factor_weights.weight:各个因子和特征的权重
  • intercept:特征的截距或偏差项。

最后,表中还有一行,其中包含根据输入数据计算得出的 global__intercept__。此行的 processed_inputfactor_weights 的值为 NULL。对于隐式反馈模型,global__intercept__ 始终为 0。

ML.WEIGHTS 语法

在下面的示例语法中,standardize 是一个可选参数,用于确定是否应标准化模型权重以假设所有特征的平均值为 0 且标准差为 1。通过标准化权重,权重的绝对量级可相互比较。默认值为 false。提供的值必须是 STRUCT 中的唯一字段。

ML.WEIGHTS(MODEL `project-id.dataset.model`)
          [, STRUCT(<T> as standardize)])

替换以下内容:

  • project-id:您的项目 ID。
  • dataset:包含此模型的 BigQuery 数据集。
  • model:模型的名称。

ML.WEIGHTS 示例

未标准化的 ML.WEIGHTS

以下示例从 mydataset 中的 mymodel 检索权重信息。该数据集在默认项目中。

该查询返回与输入列 input_col 的每个独热编码类别相关联的权重。

SELECT
  category,
  weight
FROM
  UNNEST((
    SELECT
      category_weights
    FROM
      ML.WEIGHTS(MODEL `mydataset.mymodel`)
    WHERE
      processed_input = 'input_col'))

此命令使用 UNNEST 函数,因为 category_weights 列是嵌套的重复列。

标准化的 ML.WEIGHTS

以下示例从 mydataset 中的 mymodel 检索权重信息。该数据集在默认项目中。

该查询检索已标准化的权重,假设所有特征的平均值为零且标准差为一。

SELECT
  *
FROM
  ML.WEIGHTS(MODEL `mydataset.mymodel`,
    STRUCT(true AS standardize))

ML.WEIGHTS 限制

ML.WEIGHTS 函数存在以下限制: