3.10.2 ML_EXPLAIN

在模型和数据集上运行ML_EXPLAIN例程会训练预测解释器和模型解释器,并将模型解释添加到模型目录中。

ML_EXPLAIN 语法

CALL sys.ML_EXPLAIN ('table_name', 'target_column_name',
model_handle_variable, [options]);

options: {
    JSON_OBJECT('key','value'[,'key','value'] ...)
        'key','value':
        |'model_explainer', {'permutation_importance'|'partial_dependence'|'shap'|'fast_shap'}| NULL
        |'prediction_explainer', {'permutation_importance'|'shap'}
        |'columns_to_explain', JSON_ARRAY('column'[,'column'] ...)
        |'target_value', 'target_class'
}

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

ML_EXPLAIN 参数:

  • table_name:包含标记训练数据集的表的名称。表名必须有效且完全合格;也就是说,它必须包含模式名称 ( schema_name. table_name)。用于NULL帮助。使用模型训练过的数据集—— ML_EXPLAIN 在模型未训练过的数据集上运行会产生错误或不可靠的解释。

  • target_column_name:包含地面真值的训练数据集中目标列的名称。

  • model_handle:包含模型目录中模型的模型句柄的字符串。用于 NULL帮助。模型说明存储在此模型元数据中。必须首先加载模型,例如:

    CALL sys.ML_MODEL_LOAD('ml_data.iris_train_user1_1636729526', NULL);

    如果您 ML_EXPLAIN 使用相同的模型句柄和模型解释器再次运行,模型解释字段将被新结果覆盖。

  • optionsJSON_OBJECT(): 可选参数,格式为键值对 。如果未指定选项,则使用默认设置。如果您指定NULL代替 JSON_OBJECT()参数,则训练默认排列重要性模型解释器,并且不训练预测解释器。可用的选项是:

    • model_explainer:指定模型解释器。有效值为:

      • permutation_importance:默认模型解释器。

      • shap: SHAP 模型解释器,它根据 Shapley 值生成全局特征重要性值。

      • fast_shap:快速 SHAP 模型解释器,它是 SHAP 模型解释器的子采样版本,通常具有更快的运行时间。

      • partial_dependence:说明更改一列或多列中的值将如何更改模型预测的值。partial_dependence 模型解释 器需要以下附加参数:

        • columns_to_explain: 由 指定的表中一个或多个列名的 JSON 数组 table_name。模型解释器解释了更改此列或列中的值如何影响模型。

        • target_value:一个有效值,目标列包含由 指定的真实值, target_column_name可以采用。

    • prediction_explainer:指定预测解释器。有效值为:

      • permutation_importance:默认预测解释器。

      • shap:SHAP 预测解释器,它根据 Shapley 值生成全局特征重要性值。

语法示例

  • 首先加载模型:

    CALL sys.ML_MODEL_LOAD('ml_data.iris_train_user1_1636729526', NULL);
  • 运行 ML_EXPLAIN 训练 SHAP 预测解释器和 Fast SHAP 模型解释器:

    CALL sys.ML_EXPLAIN('ml_data.`iris_train`', 'class',
    'ml_data.iris_train_user1_1636729526', JSON_OBJECT(
    'model_explainer', 'fast_shap',
    'prediction_explainer', 'shap'));
  • 运行 ML_EXPLAIN 并指定NULL选项训练默认的排列重要性模型解释器和无预测解释器:

    CALL sys.ML_EXPLAIN('ml_data.`iris_train`', 'class',
    'ml_data.iris_train_user1_1636729526', NULL);
  • 运行 ML_EXPLAIN 以训练部分依赖模型解释器(需要额外的选项)和 SHAP 预测解释器:

    CALL sys.ML_EXPLAIN('ml_data.`iris_train`', 'class', @iris_model, JSON_OBJECT(
    'columns_to_explain', JSON_ARRAY('sepal width'), 
    'target_value', 'Iris-setosa', 
    'model_explainer', 'partial_dependence', 
    'prediction_explainer', 'shap'));
  • 查看模型解释,在本例中由 Permutation Importance 模型解释器生成:

    SELECT model_explanation FROM MODEL_CATALOG WHERE model_handle = @iris_model; 
    +----------------------------------------------------------------------------------------------------------------------+ 
    | model_explanation                                                                                                    | 
    +----------------------------------------------------------------------------------------------------------------------+ 
    | {"permutation_importance": {"petal width": 0.5926, "sepal width": 0.0, "petal length": 0.0423, "sepal length": 0.0}} | 
    +----------------------------------------------------------------------------------------------------------------------+