原文地址:https://modeloriented.github.io/DALEX/
概述
“未经验证的黑匣子模型注定是失败的。不透明性将导致不信任,从而限制其普遍适用性。
DALEX 包可以对任何模型进行检查,并有助于探索和解释其行为,有助于了解复杂模型的工作原理。main 函数 explain() 围绕预测模型创建包装器。然后,可以探索包装的模型,并将其与一组本地和全局解释器进行比较。
解释DALEX背后的哲学在Explanatory Model Analysis电子书中进行了描述。该 DALEX 软件包是 DrWhy.AI 生态的一部分。如果您使用 scikit-learn 、 tidymodels、 mlr 、 H2O、 keras 、xgboost 或在 R 中使用 mlr3,您可能会对 DALEXtra 包感兴趣,它是在这些库中创建的模型的易于使用的 explain_*() 函数的 DALEX 扩展。更多的 python 库的详情可参考:https://github.com/ModelOriented/DALEX/tree/master/python/dalex
上图是 Dalex 具备的函数组成的金字塔
在众多模型中选择最佳模型并非易事。值得庆幸的是,有许多很棒的套餐可以帮助我们并节省我们一些时间。其中一个功能是软件包 mlr3 中 的benchmark() 功能。在这个vignettes中,我们将尝试使用 DALEX 库创建一个 explainer,使我们能够为机器学习模型创建解释。
在此用例中,我们将使用公寓数据。此数据集包含有关Warsaw公寓的记录。我们的任务是预测给定公寓的一平方米价格。所以这是一个回归任务。首先,我们须指定我们将使用哪些包。
library("DALEX")
library("DALEXtra")
library("mlr3")
set.seed(123)
公寓数据集包含在包中 DALEX 包 ,因此现在我们可以检查数据。
head(apartments)
为了选择最好的模型,我们将使用 mlr3的 benchmark() 函数的库。但为了做到这一点,我们必须首先创建一些对象。第一个要创建的对象是任务。它将包含有关我们使用的数据和目标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()功能了。我们使用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 更深入地分析我们的模型。
拥有经过训练的模型使创建 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(mlr_expleiner)
plot(model_parts(mlr_expleiner))
观察特定变量和输出变量之间的依赖关系
plot(model_profile(mlr_expleiner,
variable = "construction.year", type = "partial"))
使用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