ML.ROC_CURVE
函数
使用 ML.ROC_CURVE
函数评估特定于逻辑回归的指标。ML.ROC_CURVE
仅评估逻辑回归模型。
输出 ML.ROC_CURVE
函数包含多行针对模型不同阈值的指标。这些指标包括:
- threshold
- recall
- false_positive_rate
- true_positives
- false_positives
- true_negatives
- false_negatives
ML.ROC_CURVE
限制
ML.ROC_CURVE
函数存在以下限制:
- 不支持多类别逻辑回归模型。
- 不支持导入的 TensorFlow 模型。
ML.ROC_CURVE
语法
ML.ROC_CURVE(MODEL model_name [, {TABLE table_name | (query_statement)}] [, GENERATE_ARRAY(thresholds)])
model_name
model_name
是要评估的模型的名称。如果您没有配置默认项目,请按照以下格式将项目 ID 添加到模型名称前面:`[PROJECT_ID].[DATASET].[MODEL]`(包括反引号);例如:`myproject.mydataset.mymodel`。
table_name
(可选)table_name
是包含评估数据的输入表的名称。如果您没有配置默认项目,请按照以下格式将项目 ID 添加到表名称前面:`[PROJECT_ID].[DATASET].[TABLE]`(包括反引号);例如:`myproject.mydataset.mytable`。
如果指定了 table_name
,则模型中的输入列名称必须与表中的列名称匹配,并且根据 BigQuery 隐式强制转换规则,它们的类型应兼容。输入必须有一列与训练期间提供的标签列名称匹配。该值通过 input_label_cols
选项提供。如果未指定 input_label_cols
,系统会使用训练数据中名为“标签”的列。
如果 table_name
和 query_statement
均未指定,则 ML.ROC_CURVE
按以下方式计算 ROC 曲线的结果:
- 如果数据在训练期间拆分,则拆分评估数据用于计算 ROC 曲线结果。
- 如果数据在训练期间未拆分,则整个训练输入都用于计算 ROC 曲线结果。
query_statement
(可选)query_statement
子句指定用于生成评估数据的标准 SQL 查询。请参阅标准 SQL 查询语法页面,了解 query_statement
子句支持的 SQL 语法。
如果指定了 query_statement
,则查询中的输入列名称必须与模型中的列名称匹配,并且根据 BigQuery 隐式强制转换规则,它们的类型应兼容。输入必须有一列与训练期间提供的标签列名称匹配。该值通过 input_label_cols
选项提供。如果未指定 input_label_cols
,系统会使用训练数据中名为“标签”的列。系统会忽略多余的列。
如果创建 model_name
的 CREATE MODEL
语句中存在 TRANSFORM
子句,则只有 TRANSFORM
子句中的输入列必须出现在 query_statement
中。
如果 table_name
和 query_statement
均未指定,则 ML.ROC_CURVE
按以下方式计算 ROC 曲线的结果:
- 如果数据在训练期间拆分,则拆分评估数据用于计算 ROC 曲线结果。
- 如果数据在训练期间未拆分,则整个训练输入都用于计算 ROC 曲线结果。
thresholds
(可选)thresholds
是通过 GENERATE_ARRAY
函数提供的预测输出的百分位值。所提供的值应为 DOUBLE
类型。
如果您没有指定要使用的阈值,系统会使用 100 个近似分位数基于预测输出的值自动选择阈值:APPROX_QUANTILES(predicted_label, 100)
。
ML.ROC_CURVE
示例
以下示例假定您的模型和输入表位于默认项目中。
评估逻辑回归模型的 ROC 曲线
以下查询返回的列为:threshold
、recall
、false_positive_rate
、true_positives
、false_positives
、true_negatives
和 false_negatives
。召回率和假正例率可用于绘制 ROC 曲线。返回的阈值是基于预测输出的分位值而选择的。
SELECT * FROM ML.ROC_CURVE(MODEL `mydataset.mymodel`, TABLE `mydataset.mytable`)
通过自定义阈值评估 ROC 曲线
以下查询返回的列与上一示例相同。返回的阈值是根据 GENERATE_ARRAY
函数的输出而选择的。
SELECT * FROM ML.ROC_CURVE(MODEL `mydataset.mymodel`, TABLE `mydataset.mytable`, GENERATE_ARRAY(0.4,0.6,0.01))
评估精确率召回率曲线
以下查询不是通过获得 ROC 曲线(召回率与假正例率),而是利用由真正例和假正例总数获得的精确率来计算精确率召回率曲线。
SELECT recall, true_positives / (true_positives + false_positives) AS precision FROM ML.ROC_CURVE(MODEL `mydataset.mymodel`, TABLE `mydataset.mytable`)