主要内容

解释机器学习模型

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

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

模型解释的特点

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

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

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

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

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

  • 训练全体人员(ClassificationBaggedEnsembleRegressionBaggedEnsemble)的集合决策树(例如,随机森林),并使用predictorImportanceoobPermutedPredictorImportance功能。

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

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

使用统计学和机器学习工具箱功能进行三个层次的模型解释:局部、队列和全局。

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

  • 检查违反直觉预测。

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

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

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

  • 比较不同的型号。

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

  • 从一个训练有素的模型中找到重要的预测器金宝app嵌入式类型特征选择

解释分类模型

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

列车分类集成模型

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

台= readtable ('信用_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(资源描述,“ID”“评分”]);

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

rng (“默认”%的再现性t = templateTree ('可重复',真的);BlackBox = FitCensemble(TBLX,TBL.Rating,......'方法'“包”“学习者”t......“CategoricalPredictors”“行业”......“类名”, {'aaa''aa''一种'“BBB”'bb''B'“CCC”});

黑箱是一个ClassificationBaggedEnsemble模型。

使用特定于模型的解释性功能

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

估计包外预测的重要性使用oobPermutedPredictorImportance函数。该函数每次在一个预测器上随机地对包外数据进行置换,并估计由于这种置换而导致的包外误差的增加。增加的越多,功能就越重要。

Imp1 = oobPermutedPredictorImportance(黑箱);

通过使用predictorImportance函数。该函数通过对每个预测器的分裂导致的节点风险变化进行求和,并除以分支节点的数量来估计预测器的重要性。

IMP2 =预测orimportance(Blackbox);

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

table_imp =表(Imp1',Imp2',......'variablenames', {“out - bag perised Predictor Importance”“预测的重要性”},......'rownames', blackbox.PredictorNames);Tiledlayout (1,2) ax1 = nexttile;table_Imp1 = sortrows (table_Imp,“out - bag perised Predictor Importance”);barh(分类(table_Imp1.Row table_Imp1.Row) table_Imp1。(“out - bag perised Predictor Importance”)包含(“out - bag perised Predictor Importance”) ylabel (“预测”)AX2 = NEXTTILE;table_imp2 = sortrows(table_imp,“预测的重要性”);barh(分类(table_Imp2.Row table_Imp2.Row) table_Imp2。(“预测的重要性”)包含(“预测的重要性”ax₁。TickLabelInterpreter =“没有”;ax2。TickLabelInterpreter =“没有”

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

指定查询点

找到它的观察评级'aaa'并在其中选择四个查询点。

tblX_AAA = tblX (strcmp(资源描述。评级,'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 9

使用LIME与线性简单模型

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

创建一个石灰对象使用tblX_AAA以便石灰生成一个合成数据集,仅使用其评级'aaa',不是整个数据集。

explainer_lime =石灰(黑箱,tblX_AAA);

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

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

explexer_lime1 = fit(expresser_lime,querypoint(1,:),6);explexer_lime2 = fit(expresser_lime,querypoint(2,:),6);explexer_lime3 = fit(expresser_lime,querypoint(3,:),6);explexer_lime4 = fit(expresser_lime,querypoint(4,:),6);

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

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

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

对于一个分类的预测指标,情节函数只显示分类预测器中最重要的虚拟变量。因此,每个柱状图都显示了一个不同的哑变量。

计算夏普利值

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

explainer_shapley =沙普利(黑箱,tblX_AAA);

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

explexer_shapley1 = fit(expresser_shapley,querypoint(1,:));explexer_shapley2 = fit(exploxer_shapley,querypoint(2,:));explexer_shapley3 = fit(exploxer_shapley,querypoint(3,:));Explesser_shapley4 = fit(exploxer_shapley,querypoint(4,:));

使用对象函数绘制福利值情节

Tiledlayout (2,2) ax1 = nexttile;Plot (explainer_shapley1) ax2 = nexttile;Plot (explainer_shapley2) ax3 = nexttile;Plot (explainer_shapley3) ax4 = nexttile;情节(explainer_shapley4) ax₁。TickLabelInterpreter =“没有”;ax2。TickLabelInterpreter =“没有”;ax3。TickLabelInterpreter =“没有”;ax4.ticklabelinterpreter =.“没有”

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

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

台=表(加速度、汽缸、排量、马力、Model_Year重量);

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

黑箱= fitrgp (MPG(资源,“ResponseName”“英里”“CategoricalPredictors”(2 - 5),......“KernelFunction”“ardsquaredexponential”);

黑箱是一个RegressionGP模型。

使用特定于模型的解释性功能

您可以从模型中使用的内核函数的学习长度计算的预测器权重(预测值为重量)计算。长度缩放定义了预测器可以用于响应值的响应值的距离多远。通过采用负面学习长度尺度的指数来找到归一化预测器权重。

sigmal = blackbox.kernelinformation.kernelparameters(1:结束-1);学会长度标度权重= exp(-sigmal);%预测权重重量=重量/笔(重量);%标准化预测值重量

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

tbl_weight =表(重量、'variablenames', {“预测体重”},......'rownames',blackbox.expandedpredictornames);tbl_weight = sortrows(tbl_weight,“预测体重”);b = barh(分类(tbl_weight.Row tbl_weight.Row) tbl_weight。(“预测体重”));b.Parent.TickLabelInterpreter =“没有”;包含(“预测体重”) ylabel (“预测”

预测器权值表明分类预测器存在多个虚拟变量Model_Year气缸是重要的。

指定查询点

找到它的观察英里/加仑值小于0.25分量英里/加仑.从子集中选择四个不包含缺失值的查询点。

rng (“默认”%的再现性idx_subset = find(mpg “替换”假)
queryPoint =4×6表加速气瓶排量马力Model_Year重量____________ _________ ____________ __________ __________ ______ 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”作为“树”使用决策树的简单模型。

tbl_subset explainer_lime =石灰(黑盒,“SimpleModelType”“树”);

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

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

explexer_lime1 = fit(expresser_lime,querypoint(1,:),6);explexer_lime2 = fit(expresser_lime,querypoint(2,:),6);explexer_lime3 = fit(expresser_lime,querypoint(3,:),6);explexer_lime4 = fit(expresser_lime,querypoint(4,:),6);

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

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

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

计算夏普利值

对于查询点的预测器的福音值解释了由于预测器的平均响应从平均响应的预测响应的偏差。创建一个沙普利模型的对象黑箱使用tbl_subset以便沙普利根据观察结果计算预期的贡献tbl_subset

解释器_shapley =福利(Blackbox,Tbl_subset);

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

explexer_shapley1 = fit(expresser_shapley,querypoint(1,:));explexer_shapley2 = fit(exploxer_shapley,querypoint(2,:));explexer_shapley3 = fit(exploxer_shapley,querypoint(3,:));Explesser_shapley4 = fit(exploxer_shapley,querypoint(4,:));

使用对象函数绘制福利值情节

Tiledlayout (2,2) ax1 = nexttile;Plot (explainer_shapley1) ax2 = nexttile;Plot (explainer_shapley2) ax3 = nexttile;Plot (explainer_shapley3) ax4 = nexttile;情节(explainer_shapley4) ax₁。TickLabelInterpreter =“没有”;ax2。TickLabelInterpreter =“没有”;ax3。TickLabelInterpreter =“没有”;ax4.ticklabelinterpreter =.“没有”

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。

Aas, Kjersti, Martin。朱勒姆和安德斯·洛兰德。解释特征依赖时的个人预测:对Shapley值的更精确的近似arXiv: 1903.10464(2019)。

[4]弗里德曼,杰罗姆。H.“贪婪函数近似:梯度升压机。”统计史29日,没有。5(2001): 1189 - 1232。

[5] Goldstein,Alex,Adam Kapelner,Justin Bleich和Emil Pivkin。“偷看黑匣子里面:用个人有条件期望的情节可视化统计学习。”计算和图形统计杂志24日,没有。1(2015年1月2日):44-65。

另请参阅

||

相关话题