主要内容

解释机器学习模型

本主题介绍了用于模型解释的统计学和机器学习工具箱™功能,并展示了如何解释机器学习模型(分类和回归)。

机器学习模型通常被称为“黑盒”模型,因为很难理解模型是如何做出预测的。可解释性工具可以帮助您克服机器学习算法的这一方面,并揭示预测器如何对预测做出贡献(或不做出贡献)。此外,您可以验证模型是否为其预测使用了正确的证据,并发现不是立即明显的模型偏差。

模型解释的特点

使用石灰沙普利,plotPartialDependence解释个体预测因子对训练分类或回归模型预测的贡献。

  • 石灰-局部可解释的模型不可知解释(LIME)[1])通过拟合查询点的简单可解释模型来解释查询点的预测。简单模型充当训练模型的近似值,并解释围绕查询点的模型预测。简单模型可以是线性模型,也可以是决策树模型。您可以使用线性模型的估计系数或决策树模型的估计预测器重要性来解释单个预测器对查询点预测的贡献。有关详细信息,请参见石灰

  • 沙普利- Shapley值[2][3]查询点的预测器解释了由于预测器的原因,查询点的预测(回归的响应或分类的类分数)与平均预测的偏差。对于一个查询点,所有特征的Shapley值之和对应于预测与平均值的总偏差。有关详细信息,请参见机器学习模型的Shapley值

  • plotPartialDependencepartialDependence-部分依赖图(PDP)[4])显示了训练模型中预测器(或一对预测器)和预测(回归的响应或分类的类分数)之间的关系。对所选预测器的部分依赖是通过边缘化其他变量的影响而获得的平均预测来定义的。因此,部分依赖是所选预测器的函数,它显示了所选预测器对数据集的平均影响。您还可以创建一组单独的条件期望(ICE)[5])图,显示所选预测因子对单个观测的影响。有关详细信息,请参见更多关于plotPartialDependence参考页面。

一些机器学习模型支持嵌入式类型特征选择,其中模型学习预测器的重要性作为模型学习过程的一部分。您可以使用估计的预测器重要性来解释模型预测。例如:

  • 训练一个剧团(ClassificationBaggedEnsembleRegressionBaggedEnsemble)的袋装决策树(例如,随机森林),并使用predictorImportanceoobPermutedPredictorImportance功能。

  • 用lasso正则化训练一个线性模型,它可以缩小最不重要的预测因子的系数。然后使用估计系数作为预测器重要性的度量。例如,使用fitclinearfitrlinear并指定“正规化”名称-值参数为“套索”

有关支持嵌入式类型特征选择的机器学习模型列表,请参见嵌入式类型特征选择

使用统计和机器学习工具箱功能的三个层次的模型解释:本地,队列和全球。

水平 客观的 用例 统计和机器学习工具箱功能
当地的解释 解释单个查询点的预测。
  • 确定单个预测的重要预测因素。

  • 检验一个违反直觉的预测。

使用石灰沙普利用于指定查询点。
队列的解释 解释一个经过训练的模型如何对整个数据集的一个子集进行预测。 验证对一组特定样本的预测。
  • 使用石灰沙普利用于多个查询点。在创建石灰沙普利对象,你可以调用对象函数适合多次解释其他查询点的预测。

  • 调用时传递数据子集石灰沙普利,plotPartialDependence.特征使用指定的子集而不是整个训练数据集来解释训练好的模型。

全球的解释 解释一个经过训练的模型如何对整个数据集进行预测。
  • 演示一个训练过的模型是如何工作的。

  • 比较不同的模型。

  • 使用plotPartialDependence为感兴趣的预测因子创建pdp和ICE图。

  • 从支持的训练模型中找到重要的预测因子嵌入式类型特征选择

解释分类模型

本例使用随机森林算法训练一组袋装决策树,并使用可解释性特征解释训练后的模型。使用对象函数(oobPermutedPredictorImportancepredictorImportance),以便在模型中找到重要的预测因子。此外,使用石灰沙普利解释指定查询点的预测。然后使用plotPartialDependence创建一个图,显示重要预测器和预测分类分数之间的关系。

列车分类集成模型

加载CreditRating_Historical数据集。该数据集包含客户id及其财务比率、行业标签和信用评级。

TBL = readtable(“CreditRating_Historical.dat”);

显示表的前三行。

头(资源描述,3)
ans =3×8表ID WC_TA RE_TA EBIT_TA MVE_BVTD S_TA行业评级  _____ _____ _____ _______ ________ _____ ________ ______ 62394 0.013 0.104 0.036 0.447 0.142 3{“BB”}48608 0.232 0.335 0.062 1.969 0.281 8 {A} 42444 0.311 0.367 0.074 1.935 0.366 1 {A}

通过删除包含客户id和评级的列,创建一个预测变量表资源描述

tblX = removevars(tblX,[]“ID”“评级”]);

方法训练一组袋装决策树fitcensemble函数,并指定集成聚合方法为随机森林(“包”).对于随机森林算法的再现性,请指定“复制”名称-值参数为真正的对于树型学习者。另外,指定类名以设置训练模型中类的顺序。

rng (“默认”%为了重现性t = templateTree(“复制”,真正的);blackbox = fitcensemble(tblX, tblX;评级,“方法”“包”“学习者”t“CategoricalPredictors”“行业”“类名”, {“AAA”“AA”“一个”“BBB”“BB”“B”“CCC”});

黑箱是一个ClassificationBaggedEnsemble模型。

使用特定于模型的可解释性特征

ClassificationBaggedEnsemble支持两个对象函数,oobPermutedPredictorImportancepredictorImportance,在训练好的模型中找到重要的预测因子。

估算袋外预测器的重要性oobPermutedPredictorImportance函数。该函数每次在一个预测器上随机排列袋外数据,并估计由于这种排列而导致的袋外误差的增加。增量越大,表示特征越重要。

Imp1 = oobPermutedPredictorImportance(blackbox);

估计预测器的重要性predictorImportance函数。该函数通过将由于每个预测器上的分裂而导致的节点风险的变化求和并将总和除以分支节点的数量来估计预测器的重要性。

Imp2 = predictorImportance(blackbox);

创建一个包含预测器重要性估计的表,并使用该表创建水平条形图。要在任何预测器名称中显示现有的下划线,请更改TickLabelInterpreter轴的值“没有”

table_Imp = table(Imp1',Imp2',“VariableNames”, {“袋外排列预测重要性”“预测的重要性”},“RowNames”, blackbox.PredictorNames);Tiledlayout (1,2) ax1 = nexttile;table_Imp = sortrows(table_Imp,“袋外排列预测重要性”);barh(分类(table_Imp1.Row table_Imp1.Row) table_Imp1。(“袋外排列预测重要性”)包含(“袋外排列预测重要性”) ylabel (“预测”) ax2 = nexttile;table_Imp = sortrows(table_Imp,“预测的重要性”);barh(分类(table_Imp2.Row table_Imp2.Row) table_Imp2。(“预测的重要性”)包含(“预测的重要性”ax₁。TickLabelInterpreter =“没有”;ax2。TickLabelInterpreter =“没有”;

两个对象函数都识别MVE_BVTDRE_TA作为两个最重要的预测因素。

指定查询点

找到评级“AAA”并从中选择四个查询点。

tblX_AAA = tblX(strcmp(tblX;评级,“AAA”):);queryPoint = datasample(tblX_AAA,4,“替换”假)
queryPoint =4×6表WC_TA RE_TA EBIT_TA MVE_BVTD S_TA Industry _____ _____ _______ ________ _____ ________ 0.331 0.531 0.077 7.116 0.522 12 0.26 0.515 0.065 3.394 0.515 1 0.121 0.413 0.057 3.647 0.466 12 0.617 0.766 0.126 4.442 0.483

使用线性简单模型的LIME

解释使用查询点的预测石灰用线性简单模型。石灰生成合成数据集,并将简单模型拟合到合成数据集。

创建一个石灰对象使用tblX_AAA如此......以至于......石灰生成一个合成数据集,仅使用其的观测值评级“AAA”,而不是整个数据集。

explainer_lime = lime(blackbox,tblX_AAA);

的默认值。DataLocality石灰“全球”,这意味着,默认情况下,石灰生成一个全局合成数据集,并将其用于任何查询点。石灰使用不同的观测值权重,以便权重值更集中于查询点附近的观测值。因此,您可以将每个简单模型解释为特定查询点的训练模型的近似值。

使用对象函数拟合四个查询点的简单模型适合.将第三个输入(在简单模型中使用的重要预测器的数量)指定为6,以使用所有六个预测器。

explainer_lime = fit(explainer_lime,queryPoint(1,:),6);解释er_lime = fit(解释er_lime,queryPoint(2,:),6);解释er_lime = fit(解释er_lime,queryPoint(3,:),6);解释er_lime = fit(解释er_lime,queryPoint(4,:),6);

利用目标函数绘制简单模型的系数情节

Tiledlayout (2,2) ax1 = nexttile;情节(explainer_lime1);Ax2 = nexttile;情节(explainer_lime2);Ax3 = nexttile;情节(explainer_lime3);Ax4 = nexttile;情节(explainer_lime4);ax₁。TickLabelInterpreter =“没有”;ax2。TickLabelInterpreter =“没有”;ax3。TickLabelInterpreter =“没有”;大举裁员。TickLabelInterpreter =“没有”;

所有简单模型都能识别EBIT_TARE_TA,MVE_BVTD作为三个最重要的预测因素。预测因子的正系数表明,在简单模型中,增加预测因子值会导致预测分数的增加。

对于一个分类预测器情节函数只显示分类预测器中最重要的虚拟变量。因此,每个条形图显示一个不同的虚拟变量。

计算Shapley值

查询点的预测器的Shapley值解释了由于预测器导致的查询点的预测分数与平均分数的偏差。创建一个沙普利对象使用tblX_AAA如此......以至于......沙普利基于的样本计算期望贡献“AAA”

explainer_shapley = shapley(blackbox,tblX_AAA);

通过使用对象函数计算查询点的Shapley值适合

explainer_shapley1 = fit(explainer_shapley,queryPoint(1,:));explainer_shapley2 = fit(explainer_shapley,queryPoint(2,:));explainer_shapley3 = fit(explainer_shapley,queryPoint(3,:));explainer_shapley4 = fit(explainer_shapley,queryPoint(4,:));

使用对象函数绘制Shapley值情节

Tiledlayout (2,2) nexttile plot(explainer_shapley1) nexttile plot(explainer_shapley2) nexttile plot(explainer_shapley3) nexttile plot(explainer_shapley4)

MVE_BVTDRE_TA是所有四个查询点的三个最重要的预测器中的两个。

的Shapley值MVE_BVTD对于第一个和第四个查询点为正,对于第二个和第三个查询点为负。的MVE_BVTD对于第一和第四个查询点,变量值分别约为7和4,对于第二和第三个查询点,变量值均约为3.5。根据Shapley值对于四个查询点,一个大的MVE_BVTD值导致预测分数的增加,而小MVE_BVTD值导致预测分数与平均值相比下降。结果与石灰

创建部分依赖图(PDP)

PDP图显示了预测器和训练模型中预测分数之间的平均关系。创建pdpRE_TAMVE_BVTD,其他可解释性工具认为这是重要的预测因素。通过tblx_AAAplotPartialDependence因此,该函数仅使用的样本来计算预测分数的期望“AAA”

图plotPartialDependence(黑盒,“RE_TA”“AAA”tblX_AAA)

plotPartialDependence(黑盒,“MVE_BVTD”“AAA”tblX_AAA)

小调在x-轴表示预测器的唯一值tbl_AAA.剧情MVE_BVTD表明预测分数较大时MVE_BVTD值很小。分数值随着MVE_BVTD值增加到5左右,然后分数值保持不变MVE_BVTD价值增加。依赖于MVE_BVTD在子集中tbl_AAA确认的plotPartialDependence不符合当地的贡献吗MVE_BVTD的四个查询点石灰沙普利

解释回归模型

回归问题的模型解释工作流类似于分类问题的工作流,如示例所示解释分类模型

本例训练高斯过程回归(GPR)模型,并使用可解释性特征解释训练后的模型。利用探地雷达模型的核心参数来估计预测器的权重。此外,使用石灰沙普利解释指定查询点的预测。然后使用plotPartialDependence创建一个图表,显示一个重要的预测器和预测响应之间的关系。

列车探地雷达模型

加载carbig数据集,其中包含了20世纪70年代和80年代初生产的汽车的测量值。

负载carbig

创建一个包含预测器变量的表加速度气缸等等

tbl = table(加速度、气缸、排量、马力、型号、年份、重量);

训练一个响应变量的探地雷达模型英里/加仑通过使用fitrgp函数。指定“KernelFunction”作为“ardsquaredexponential”使用平方指数核,每个预测器有单独的长度尺度。

blackbox = fitrgp(tbl,MPG,“ResponseName”“英里”“CategoricalPredictors”(2 - 5),“KernelFunction”“ardsquaredexponential”);

黑箱是一个RegressionGP模型。

使用特定于模型的可解释性特征

您可以从模型中使用的核函数的学习长度尺度计算预测器权重(预测器重要性)。长度尺度定义了预测器与响应值不相关的距离。通过取负学习长度尺度的指数来找到归一化的预测器权重。

sigmaL = blackbox.KernelInformation.KernelParameters(1:end-1);学会长度量表%weights = exp(-sigmaL);%预测器权重Weights = Weights /sum(Weights);归一化预测器权重

创建一个包含规范化预测器权重的表,并使用该表创建水平条形图。要在任何预测器名称中显示现有的下划线,请更改TickLabelInterpreter轴的值“没有”

Tbl_weight = table(权重,“VariableNames”, {“预测体重”},“RowNames”, blackbox.ExpandedPredictorNames);Tbl_weight = sortrows(Tbl_weight,“预测体重”);b = barh(categorical(tbl_weight. row,tbl_weight. row),tbl_weight.(“预测体重”));b.Parent.TickLabelInterpreter =“没有”;包含(“预测体重”) ylabel (“预测”

预测器权重表示分类预测器的多个虚拟变量Model_Year气缸是很重要的。

指定查询点

找到英里/加仑值小于的0.25分位数英里/加仑.从这个子集中,选择四个不包含缺失值的查询点。

rng (“默认”%为了重现性idx_子集= find(MPG < quantile(MPG,0.25));tbl_子集= tbl(idx_子集,:);queryPoint = datasample(rmmissing(tbl_子集),4,“替换”假)
queryPoint =4×6表加速气缸排量马力型号年份重量____________ _________ ____________ __________ __________ ______ 13.2 8 318 150 76 3940 14.9 8 302 130 77 4295 14 8 360 215 70 4615 13.7 8 318 145 77 4140

使用LIME与树简单模型

解释使用查询点的预测石灰用决策树简单模型。石灰生成合成数据集,并将简单模型拟合到合成数据集。

创建一个石灰对象使用tbl_subset如此......以至于......石灰使用子集而不是整个数据集生成合成数据集。指定“SimpleModelType”作为“树”使用决策树的简单模型。

Explainer_lime = lime(blackbox, tbl_子集,“SimpleModelType”“树”);

的默认值。DataLocality石灰“全球”,这意味着,默认情况下,石灰生成一个全局合成数据集,并将其用于任何查询点。石灰使用不同的观测值权重,以便权重值更集中于查询点附近的观测值。因此,您可以将每个简单模型解释为特定查询点的训练模型的近似值。

使用对象函数拟合四个查询点的简单模型适合.将第三个输入(简单模型中要使用的重要预测器的数量)指定为6。通过此设置,软件将决策分裂(或分支节点)的最大数量指定为6,以便拟合的决策树最多使用所有预测器。

explainer_lime = fit(explainer_lime,queryPoint(1,:),6);解释er_lime = fit(解释er_lime,queryPoint(2,:),6);解释er_lime = fit(解释er_lime,queryPoint(3,:),6);解释er_lime = fit(解释er_lime,queryPoint(4,:),6);

通过使用目标函数绘制预测器的重要性情节

Tiledlayout (2,2) ax1 = nexttile;情节(explainer_lime1);Ax2 = nexttile;情节(explainer_lime2);Ax3 = nexttile;情节(explainer_lime3);Ax4 = nexttile;情节(explainer_lime4);ax₁。TickLabelInterpreter =“没有”;ax2。TickLabelInterpreter =“没有”;ax3。TickLabelInterpreter =“没有”;大举裁员。TickLabelInterpreter =“没有”;

所有简单模型都能识别位移Model_Year,重量作为重要的预测因素。

计算Shapley值

查询点的预测器的Shapley值解释了由于预测器导致的查询点的预测响应与平均响应的偏差。创建一个沙普利对象用于模型。黑箱使用tbl_subset如此......以至于......沙普利中的观测值计算期望贡献tbl_subset

Explainer_shapley = shapley(blackbox, tbl_子集);

通过使用对象函数计算查询点的Shapley值适合

explainer_shapley1 = fit(explainer_shapley,queryPoint(1,:));explainer_shapley2 = fit(explainer_shapley,queryPoint(2,:));explainer_shapley3 = fit(explainer_shapley,queryPoint(3,:));explainer_shapley4 = fit(explainer_shapley,queryPoint(4,:));

使用对象函数绘制Shapley值情节

Tiledlayout (2,2) nexttile plot(explainer_shapley1) nexttile plot(explainer_shapley2) nexttile plot(explainer_shapley3) nexttile plot(explainer_shapley4)

Model_Year是第一、第二和第四个查询点的最重要的预测器,而Model_Year为正的三个查询点。的Model_Year这三个点的变量值为76或77,第三个查询点的值为70。根据Shapley值的四个查询点,一个小Model_Year值导致预测响应的减小,且减小幅度较大Model_Year值导致预测响应相对于平均值的增加。

创建部分依赖图(PDP)

PDP图显示了在训练模型中预测器和预测响应之间的平均关系。创建PDPModel_Year,其他可解释性工具认为这是一个重要的预测因素。通过tbl_subsetplotPartialDependence所以这个函数只使用中的样本来计算预测响应的期望tbl_subset

图plotPartialDependence(黑盒,“Model_Year”tbl_subset)

该图显示了四个查询点的Shapley值所确定的相同趋势。预测的反应(英里/加仑)值随着Model_Year价值增加。

参考文献

[1] Ribeiro, Marco Tulio, S. Singh和C. Guestrin。“‘我为什么要相信你?:解释任何分类器的预测。”第22届ACM SIGKDD知识发现与数据挖掘国际会议论文集, 1135 - 44。旧金山,加利福尼亚:ACM, 2016。

[2] Lundberg, Scott M.和S. Lee。“解释模型预测的统一方法。”神经信息处理系统研究进展30(2017): 4765-774。

bbb10 Aas, Kjersti, Martin。朱利姆和安德斯·洛兰德。“解释个体预测时,特征是依赖的:更准确的近似沙普利值。”arXiv: 1903.10464(2019)。

弗里德曼,杰罗姆。H.“贪心函数逼近:梯度增强机”。统计年鉴29日,没有。5(2001): 1189-1232。

[5] Goldstein, Alex, Adam Kapelner, Justin Bleich和Emil Pitkin。“窥视黑盒子内部:用个人条件期望图可视化统计学习”计算与图形统计杂志24日,没有。1(2015年1月2日):44-65。

另请参阅

||

相关的话题

Baidu
map