主要内容

解释机器学习模型

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

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

模型解释的特点

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

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

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

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

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

  • 训练一群人(ClassificationBaggedEnsembleRegressionBaggedEnsemble)的袋装决策树(例如随机森林),并使用predictorImportance而且oobPermutedPredictorImportance功能。

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

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

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

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

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

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

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

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

  • 比较不同模型。

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

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

解释分类模型

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

列车分类集成模型

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

台= 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(资源描述,“ID”“评级”]);

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

rng (“默认”%的再现性t = templateTree (“复制”,真正的);黑箱= fitcensemble (tblX,资源描述。评级,...“方法”“包”“学习者”t...“CategoricalPredictors”“行业”...“类名”, {“AAA”“AA”“一个”“BBB”“BB”“B”“CCC”});

黑箱是一个ClassificationBaggedEnsemble模型。

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

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

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

Imp1 = oobPermutedPredictorImportance(黑箱);

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

Imp2 = predictorImportance(黑箱);

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

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

两个对象函数都标识MVE_BVTD而且RE_TA作为两个最重要的预测因子。

指定查询点

找到的观察结果评级“AAA”并从中选择4个查询点。

tblX_AAA = tblX (strcmp(资源描述。评级,“AAA”):);queryPoint = datasample (tblX_AAA 4“替换”假)
queryPoint =4×6表WC_TA RE_TA EBIT_TA MVE_BVTD S_TA工业_____ _____ _______ ________ _____ ________ 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个预测器。

explainer_lime1 =适合(explainer_lime queryPoint (1:), 6);explainer_lime2 =适合(explainer_lime queryPoint (2:), 6);explainer_lime3 =适合(explainer_lime queryPoint (3:), 6);explainer_lime4 =适合(explainer_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 =“没有”;大举裁员。TickLabelInterpreter =“没有”

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

对于绝对预测器,情节函数只显示类别预测器中最重要的虚拟变量。因此,每个柱状图显示不同的虚拟变量。

计算夏普利值

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

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

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

explainer_shapley1 =适合(explainer_shapley queryPoint (1:));explainer_shapley2 =适合(explainer_shapley queryPoint (2:));explainer_shapley3 =适合(explainer_shapley queryPoint (3:));explainer_shapley4 =适合(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_BVTD而且RE_TA是所有四个查询点的三个最重要的预测器中的两个。

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

创建部分依赖图(PDP)

PDP图显示了在训练模型中预测者和预测得分之间的平均关系。创建pdpRE_TA而且MVE_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数据集,包含70年代和80年代早期生产的汽车的测量数据。

负载carbig

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

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

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

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

黑箱是一个RegressionGP模型。

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

您可以从模型中使用的核函数的学习长度尺度计算预测器权重(预测器重要性)。长度尺度定义了一个预测因子之间的距离有多远才能使响应值变得不相关。取负学习长度标度的指数,找出归一化预测器权重。

sigmaL = blackbox.KernelInformation.KernelParameters (1: end-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_子集= find(MPG <分位数(MPG,0.25));tbl_subset =(资源(idx_subset:);queryPoint = datasample (rmmissing (tbl_subset), 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”作为“树”采用简单的决策树模型。

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

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

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

explainer_lime1 =适合(explainer_lime queryPoint (1:), 6);explainer_lime2 =适合(explainer_lime queryPoint (2:), 6);explainer_lime3 =适合(explainer_lime queryPoint (3:), 6);explainer_lime4 =适合(explainer_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 =“没有”;大举裁员。TickLabelInterpreter =“没有”

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

计算夏普利值

查询点的预测器的Shapley值解释了由于预测器的原因,查询点的预测响应与平均响应的偏差。创建一个沙普利对象,用于模型黑箱使用tbl_subset沙普利中的观察结果计算预期的贡献tbl_subset

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

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

explainer_shapley1 =适合(explainer_shapley queryPoint (1:));explainer_shapley2 =适合(explainer_shapley queryPoint (2:));explainer_shapley3 =适合(explainer_shapley queryPoint (3:));explainer_shapley4 =适合(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的Shapley值是第一个、第二个和第四个查询点的最重要预测因子,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价值增加。

参考文献

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

[2]伦德伯格,斯科特·M.和S.李。解释模型预测的统一方法。神经信息处理系统的研究进展30(2017): 4765 - 774。

Aas, Kjersti, Martin。Jullum和Anders Løland。当特征相互依赖时,解释个人预测:Shapley值的更精确近似。arXiv: 1903.10464(2019)。

[4]弗里德曼,杰罗姆。H. <贪婪函数逼近:梯度提升机>。统计年鉴29日,没有。5(2001): 1189 - 1232。

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

另请参阅

||

相关的话题

Baidu
map