imd 统计教程 · 预测模型与机器学习
← 教程首页 返回本模块

「转」让你的机器学习模型会说话,可解释性一体化解决方案-DALEX包-

mlr3 翻译小组实战医学统计2024-01-28 12:39:43广东

DALEX_让机器学习模型会说话

原文地址:https://modeloriented.github.io/DALEX/

概述

未经验证的黑匣子模型注定是失败的。不透明性将导致不信任,从而限制其普遍适用性。

DALEX 包可以对任何模型进行检查,并有助于探索和解释其行为,有助于了解复杂模型的工作原理。main 函数 explain() 围绕预测模型创建包装器。然后,可以探索包装的模型,并将其与一组本地和全局解释器进行比较。

解释DALEX背后的哲学在Explanatory Model Analysis电子书中进行了描述。该 DALEX 软件包是 DrWhy.AI 生态的一部分。如果您使用 scikit-learntidymodelsmlrH2Okerasxgboost 或在 R 中使用 mlr3,您可能会对 DALEXtra 包感兴趣,它是在这些库中创建的模型的易于使用的 explain_*() 函数的 DALEX 扩展。更多的 python 库的详情可参考:https://github.com/ModelOriented/DALEX/tree/master/python/dalex

上图是 Dalex 具备的函数组成的金字塔

将 mlr3::benchmark() 与 DALEX 一起使用

在众多模型中选择最佳模型并非易事。值得庆幸的是,有许多很棒的套餐可以帮助我们并节省我们一些时间。其中一个功能是软件包 mlr3 中 的benchmark() 功能。在这个vignettes中,我们将尝试使用 DALEX 库创建一个 explainer,使我们能够为机器学习模型创建解释。

Libraries and data set

在此用例中,我们将使用公寓数据。此数据集包含有关Warsaw公寓的记录。我们的任务是预测给定公寓的一平方米价格。所以这是一个回归任务。首先,我们须指定我们将使用哪些包。

library("DALEX")
library("DALEXtra")
library("mlr3")
set.seed(123)

公寓数据集包含在包中 DALEX 包 ,因此现在我们可以检查数据。

head(apartments)

Preparing objects

为了选择最好的模型,我们将使用 mlr3benchmark() 函数的库。但为了做到这一点,我们必须首先创建一些对象。第一个要创建的对象是任务。它将包含有关我们使用的数据和目标y的信息,在我们的例子中 m2.price 是目标 y。为了从数据框创建任务对象,我们将使用 as_task_regr() 函数。接下来,我们将创建学习器,我们可以在这里指定要比较的模型。在这种情况下,我们将使用库中的 mlr3learners 模型。可以在该网址https://mlr3learners.mlr-org.com/找到该库提供的所有可用模型的列表。我们还需要定义一个重采样策略,用于评估学习算法的性能。在或情况下,我们将使用 3折交叉验证。

library(mlr3learners)

apartment_task <- as_task_regr(apartments, target = "m2.price")
lerners = lrns(c("regr.ranger""regr.kknn""regr.lm"))
resamplings = rsmp("cv", folds = 3)

现在让我们将所有这些对象组合在一起,并创建一个名为 design 该对象的对象,该对象是benchmark() 函数的主要参数。

design = benchmark_grid(apartment_task, lerners, resamplings)
design

我们可以看出,design对象包含三个不同的模型,每个指定的学习器视为一个模型。

Benchmark

现在我们准备使用benchmark()功能了。我们使用design作为这个函数的参数。

bnm <- benchmark(design)

为了评估模型之间的性能,我们需要指定指标。在我们的例子中,我们将使用 RMSE .它是回归任务的常见指标。使用该 aggregate() 函数,我们可以看到模型的 RMSE水平。

measures = msr("regr.rmse", id = "rmse_test")

tab = bnm$aggregate(measures)
print(tab)

正如我们所看到的,kknn 模型的RMSE得分最低,因此在这种情况下,它是最好的。让我们尝试从基准测试中提取此模型。首先,我们从中 tab 选择最佳结果,然后从中提取学习器。

rr = tab$resample_result[[2]]
print(rr)
final_learner <- rr$learner
final_learner$train(apartment_task)

模型已经被训练好了,因此我们现在可以创建一个 explainer 更深入地分析我们的模型。

DALEX Explainer

拥有经过训练的模型使创建 explainer 成为一项很简单的任务。我们只需要使用包中的 explain_mlr3() DALEXtra 函数。我们指定模型、数据和目标,就完成了。我们还可以标记expliner

mlr_expleiner <- explain_mlr3(final_learner, 
                              data = apartments[2:6], 
                              y = apartments$m2.price, 
                              label = "Aparments regresion model"
                              verbose = FALSE)

Model performance

model_performance(mlr_expleiner)

Feature importance

plot(model_parts(mlr_expleiner))

Partial dependence plot

观察特定变量和输出变量之间的依赖关系

plot(model_profile(mlr_expleiner, 
                   variable = "construction.year", type = "partial"))

Break down profile

使用DALEX,我们还可以分析特定观测值的输出,并查看哪些特征对最终输出的贡献最大。为此,我们将使用性能详细分解。

test_apartment <- apartments[1,]
plot(predict_parts(mlr_expleiner,
                   new_observation = test_apartment, type = "break_down"))

参考链接:https://htmlpreview.github.io/?https://github.com/ModelOriented/DALEX-docs/blob/master/vignettes/DALEX_mlr3_benchmark.html