3.7 说明

解释是通过运行 ML_EXPLAIN_ROWML_EXPLAIN_TABLE 在未标记的数据上生成的;也就是说,它必须具有与用于训练模型的数据相同的特征列,但没有目标列。

解释可帮助您了解哪些特征对预测的影响最大。特征重要性表示为 -1 到 1 之间的值。正值表示特征对预测有贡献。负值表示该特征对不同的预测有贡献;例如,如果具有两种可能预测(“批准”和“拒绝”)的贷款审批模型中的特征对于“批准”预测具有负值,则该特征对于“拒绝”预测具有正值。值为 0 或接近 0 表示特征值对其应用的预测没有影响。

ML_EXPLAIN_ROW 为一行或多行数据生成解释。 ML_EXPLAIN_TABLE 生成对整个数据表的解释并将结果保存到输出表。ML_EXPLAIN_* 例程将解释限制为 100 个最相关的特征。

从 MySQL HeatWave 8.0.31 开始,在使用 ML_TRAIN 例程后,使用 ML_EXPLAIN 例程为 HeatWave ML 训练预测解释器和模型解释器。您必须训练预测解释器才能使用 ML_EXPLAIN_ROWML_EXPLAIN_TABLE。在早期版本中, ML_TRAIN 例程训练默认的排列重要性模型和预测解释器。请参阅第 3.5 节,“培训解释器”

行说明

ML_EXPLAIN_ROW 解释对一行或多行未标记数据的预测。它是使用SELECT 语句调用的。有关 ML_EXPLAIN_ROW 参数说明,请参阅 第 3.10.6 节,“ML_EXPLAIN_ROW”

运行前 ML_EXPLAIN_ROW,确保加载了你要使用的模型;例如:

CALL sys.ML_MODEL_LOAD(@census_model, NULL);

有关加载模型的更多信息,请参阅 第 3.9.3 节,“加载模型”

@row_input以下示例为分配给会话变量 的单行未标记数据生成解释 :

SET @row_input = JSON_OBJECT( 
"age", 25, 
"workclass", "Private", 
"fnlwgt", 226802, 
"education", "11th", 
"education-num", 7, 
"marital-status", "Never-married", 
"occupation", "Machine-op-inspct", 
"relationship", "Own-child", 
"race", "Black", 
"sex", "Male", 
"capital-gain", 0, 
"capital-loss", 0, 
"hours-per-week", 40, 
"native-country", "United-States");

SELECT sys.ML_EXPLAIN_ROW(@row_input, @census_model, JSON_OBJECT(
'prediction_explainer', 'permutation_importance')));

在哪里:

  • @row_input是包含一行未标记数据的会话变量。数据以JSON键值格式指定。列名必须与训练数据集中的特征列名匹配。

  • @census_model是包含模型句柄的会话变量。

  • prediction_explainer提供您为此模型训练的预测解释器的名称,排列重要性预测解释器或 SHAP 预测解释器。您可以使用 ML_EXPLAIN 例程对其进行训练(请参阅第 3.5 节“训练解释器”)。

ML_EXPLAIN_ROW 输出包括预测、用于进行预测的特征以及表示特征重要性的加权数值,格式如下:( )。从 MySQL 8.0.30 开始,输出包括一个字段,该字段标识对预测影响最大的特征,并在模型质量低时报告警告。 "feature_attribution": valueNotes

您还可以 ML_EXPLAIN_ROW 对从表中选择的多行数据运行。有关示例,请参阅 第 3.10.6 节“ML_EXPLAIN_ROW”中的语法示例。

表格说明

ML_EXPLAIN_TABLE 解释整个未标记数据表的预测并将结果保存到输出表。解释是并行进行的。有关 ML_EXPLAIN_TABLE 参数说明,请参阅 第 3.10.7 节,“ML_EXPLAIN_TABLE”

ML_EXPLAIN_TABLE 是一个计算密集型过程。建议通过将大表拆分为较小的表来将操作限制为 10 到 100 行的批次。

以下示例创建一个表,其中包含从数据集中选择的 10 行数据,census_test并为该表生成解释。

运行前 ML_EXPLAIN_TABLE,确保加载了你要使用的模型;例如:

CALL sys.ML_MODEL_LOAD(@census_model, NULL);

有关加载模型的更多信息,请参阅 第 3.9.3 节,“加载模型”

以下示例创建一个包含 10 行未标记测试数据的表,并为该表生成解释:

CREATE TABLE heatwaveml_bench.census_test_subset AS SELECT * FROM heatwaveml_bench.census_test 
LIMIT 10;  
  
CALL sys.ML_EXPLAIN_TABLE('heatwaveml_bench.census_test_subset', @census_model, 
'heatwaveml_bench.census_explanations', JSON_OBJECT('prediction_explainer', 'shap'));

在哪里:

  • heatwaveml_bench.census_test_subset是输入表 ( schema_name.table_name) 的完全限定名称。该表必须具有与训练数据集相同的特征列名称,但没有目标列。

  • @census_model是包含模型句柄的会话变量。

  • heatwaveml_bench.census_explanations是存储解释数据的表。如果表不存在,则创建该表。必须指定完全限定的表名 ( schema_name.table_name)。如果该表已经存在,则返回错误。

  • prediction_explainer提供您为此模型训练的预测解释器的名称,排列重要性预测解释器或 SHAP 预测解释器。您可以使用 ML_EXPLAIN 例程对其进行训练(请参阅第 3.5 节“训练解释器”)。

查看 ML_EXPLAIN_TABLE 结果,查询输出表;例如:

SELECT * FROM heatwaveml_bench.census_explanations;

ML_EXPLAIN_TABLE 输出表包括用于进行解释的特征、解释以及 提供 feature_attribution 指示特征重要性的加权数值的列。

从 MySQL 8.0.30 开始, ML_EXPLAIN_TABLE 输出还包括一个Notes字段,用于标识对预测影响最大的特征。 ML_EXPLAIN_TABLE 如果模型质量低,则报告警告。