解释机器学习模型
本主题介绍用于模型解释的统计和机器学习工具箱™功能,并展示如何解释机器学习模型(分类和回归)。
机器学习模型通常被称为“黑箱”模型,因为很难理解该模型是如何做出预测的。可解释性工具帮助您克服机器学习算法的这一方面,并揭示预测器如何有助于(或不有助于)预测。此外,您可以验证模型是否为其预测使用了正确的证据,并发现模型的偏差不是立即明显的。
模型解释的特点
使用石灰
,沙普利
,plotPartialDependence
解释个别预测因子对训练分类或回归模型预测的贡献。
石灰
-局部可解释的模型不可知解释(LIME[1])通过拟合查询点的简单可解释模型来解释查询点的预测。简单模型作为训练过的模型的近似,解释了围绕查询点的模型预测。简单模型可以是线性模型,也可以是决策树模型。您可以使用线性模型的估计系数或决策树模型的估计预测器重要性来解释单个预测器对查询点的预测的贡献。有关更多细节,请参见石灰.沙普利
- Shapley值[2][3]查询点的预测器的解释查询点的预测(回归的响应或分类的类分数)与平均预测的偏差,这是由于预测器的原因。对于一个查询点,所有特征的Shapley值的和对应于预测与平均值的总偏差。有关更多细节,请参见机器学习模型的Shapley值.plotPartialDependence
而且partialDependence
-部分依赖图(PDP[4])显示了训练模型中一个预测因子(或一对预测因子)和预测因子(回归的响应或分类的班级分数)之间的关系。对所选预测器的部分依赖是通过将其他变量的影响边缘化得到的平均预测来定义的。因此,偏依赖是所选预测器的一个函数,它显示了所选预测器在数据集上的平均效果。您还可以创建一组单独的条件期望(ICE[5]),显示所选预测因子对单个观测结果的影响。有关更多细节,请参见更多关于在plotPartialDependence
参考页面。
一些机器学习模型支持嵌入式类型特征选择,其中模型学习预测器万博1manbetx的重要性作为模型学习过程的一部分。您可以使用估计的预测器重要性来解释模型预测。例如:
训练一群人(
ClassificationBaggedEnsemble
或RegressionBaggedEnsemble
)的袋装决策树(例如随机森林),并使用predictorImportance
而且oobPermutedPredictorImportance
功能。用套索正则化训练线性模型,缩小了最不重要预测因子的系数。然后使用估计的系数作为预测器重要性的度量。例如,使用
fitclinear
或fitrlinear
并指定“正规化”
名称-值参数如下“套索”
.
有关支持嵌入式类型特征选择的机器学习模型列表,请参见万博1manbetx嵌入式类型特征选择.
使用统计和机器学习工具箱功能进行三个级别的模型解释:本地、队列和全局。
水平 | 客观的 | 用例 | 统计和机器学习工具箱功能 |
---|---|---|---|
当地的解释 | 解释单个查询点的预测。 |
|
使用石灰 而且沙普利 用于指定的查询点。 |
队列的解释 | 解释一个训练有素的模型如何对整个数据集的一个子集进行预测。 | 验证特定样本组的预测。 |
|
全球的解释 | 解释一个训练有素的模型如何对整个数据集进行预测。 |
|
|
解释分类模型
本例使用随机森林算法训练袋装决策树的集合,并使用可解释性特征解释训练过的模型。使用对象函数(oobPermutedPredictorImportance
而且predictorImportance
),找出模型中的重要预测因子。此外,使用石灰
而且沙普利
解释指定查询点的预测。然后使用plotPartialDependence
创建一个显示重要预测因子和预测分类分数之间关系的图表。
列车分类集成模型
加载CreditRating_Historical
数据集。数据集包含客户id及其财务比率、行业标签和信用评级。
TBL =可读的(“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(tbl,[“ID”,“评级”]);
方法训练袋装决策树的集合fitcensemble
函数并将集成聚合方法指定为随机林(“包”
).对于随机森林算法的可再现性,请指定“复制”
名称-值参数如下真正的
针对树形学习者。另外,指定类名以设置训练模型中类的顺序。
rng (“默认”)%用于重现性t = templateTree(“复制”,真正的);blackbox = fitcensemble(tblX,tbl。评级,...“方法”,“包”,“学习者”t...“CategoricalPredictors”,“行业”,...“类名”, {“AAA”“AA”“一个”“BBB”“BB”“B”“CCC”});
黑箱
是一个ClassificationBaggedEnsemble
模型。
使用特定于模型的可解释性特性
ClassificationBaggedEnsemble
万博1manbetx支持两个对象函数,oobPermutedPredictorImportance
而且predictorImportance
,在训练的模型中找到重要的预测因子。
估计袋外预测器的重要性使用oobPermutedPredictorImportance
函数。该函数每次在一个预测器上随机排列袋外数据,并估计由于这种排列而增加的袋外误差。增量越大,说明该特性越重要。
Imp1 = oobPermutedPredictorImportance(黑盒子);
的方法估计预测器的重要性predictorImportance
函数。该函数通过对每个预测器上的分裂导致的节点风险变化求和并除以分支节点的数量来估计预测器的重要性。
Imp2 = predictorImportance(黑盒子);
创建一个包含预测器重要性估计的表,并使用该表创建水平柱状图。若要在任何预测器名称中显示现有下划线,请更改TickLabelInterpreter
坐标轴的值“没有”
.
table_Imp = table(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(tbl))。评级,“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 = lime(黑盒,tblX_AAA);
的默认值。DataLocality为石灰
是“全球”
,这意味着在默认情况下,石灰
生成全局合成数据集,并将其用于任何查询点。石灰
使用不同的观察权重,以便权重值更集中于查询点附近的观察值。因此,您可以将每个简单模型解释为特定查询点的训练模型的近似值。
通过使用对象函数为四个查询点拟合简单模型适合
.将第三个输入(在简单模型中使用的重要预测器的数量)指定为6,以使用所有6个预测器。
explainer_lime1 = fit(explainer_lime,queryPoint(1,:),6);explainer_lime2 = fit(explainer_lime,queryPoint(2,:),6);explainer_lime3 = fit(explainer_lime,queryPoint(3,:),6);explainer_lime4 = fit(explainer_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_TA
,RE_TA
,MVE_BVTD
作为三个最重要的预测因素。预测因子的正系数表明,在简单模型中,预测因子值的增加导致预测得分的增加。
对于绝对预测器,情节
函数只显示类别预测器中最重要的虚拟变量。因此,每个柱状图显示不同的虚拟变量。
计算Shapley值
查询点的预测器的Shapley值解释了由于预测器的原因,查询点的预测分数与平均分数的偏差。创建一个沙普利
对象使用tblX_AAA
这沙普利
计算基于样本的期望贡献“AAA”
.
explainer_shapley = shapley(黑盒子,tblX_AAA);
使用object函数计算查询点的Shapley值适合
.
explainer_shapley = fit(explainer_shapley,queryPoint(1,:)));= fit(explainer_shapley,queryPoint(2,:));explainer_shapley,queryPoint(3,:));explainer_shapley = 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_BVTD
而且RE_TA
是所有四个查询点的三个最重要的预测器中的两个。
的Shapley值MVE_BVTD
第一个和第四个查询点为正,第二个和第三个查询点为负。的MVE_BVTD
第一个和第四个查询点的变量值分别约为7和4,第二个和第三个查询点的值约为3.5。根据Shapley值为四个查询点,一个大MVE_BVTD
值导致预测得分增加,而小MVE_BVTD
值导致预测分数与平均分数相比下降。所得结果与分析结果一致石灰
.
创建部分依赖图(PDP)
PDP图显示了在训练模型中预测者和预测得分之间的平均关系。创建pdpRE_TA
而且MVE_BVTD
,其他可解释性工具将其识别为重要的预测器。通过tblx_AAA
来plotPartialDependence
函数计算预测分数的期望只使用的样本“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
创建一个包含预测变量的表加速度
,气缸
,等等
tbl =表(加速度,气缸,排量,马力,型号,年份,重量);
训练响应变量的探地雷达模型英里/加仑
通过使用fitrgp
函数。指定“KernelFunction”
作为“ardsquaredexponential”
使用平方指数核,每个预测器都有单独的长度标度。
blackbox = fitrgp(tbl,MPG,“ResponseName”,“英里”,“CategoricalPredictors”(2 - 5),...“KernelFunction”,“ardsquaredexponential”);
黑箱
是一个RegressionGP
模型。
使用特定于模型的可解释性特性
您可以从模型中使用的核函数的学习长度尺度计算预测器权重(预测器重要性)。长度尺度定义了一个预测因子之间的距离有多远才能使响应值变得不相关。取负学习长度标度的指数,找出归一化预测器权重。
sigmaL = blackbox.KernelInformation.KernelParameters(1:end-1);%学习长度量表weights = exp(-sigmaL);%预测权重权重=权重/求和(权重);%归一化预测权重
创建一个包含规范化预测器权重的表,并使用该表创建水平柱状图。若要在任何预测器名称中显示现有下划线,请更改TickLabelInterpreter
坐标轴的值“没有”
.
Tbl_weight =表(权重,“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 <分位数(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(黑箱,tbl_子集,“SimpleModelType”,“树”);
的默认值。DataLocality为石灰
是“全球”
,这意味着在默认情况下,石灰
生成全局合成数据集,并将其用于任何查询点。石灰
使用不同的观察权重,以便权重值更集中于查询点附近的观察值。因此,您可以将每个简单模型解释为特定查询点的训练模型的近似值。
通过使用对象函数为四个查询点拟合简单模型适合
.将第三个输入(在简单模型中使用的重要预测器的数量)指定为6。在此设置下,软件将决策分割(或分支节点)的最大数量指定为6,以便拟合的决策树最多使用所有预测器。
explainer_lime1 = fit(explainer_lime,queryPoint(1,:),6);explainer_lime2 = fit(explainer_lime,queryPoint(2,:),6);explainer_lime3 = fit(explainer_lime,queryPoint(3,:),6);explainer_lime4 = fit(explainer_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(黑盒子,tbl_子集);
使用object函数计算查询点的Shapley值适合
.
explainer_shapley = fit(explainer_shapley,queryPoint(1,:)));= fit(explainer_shapley,queryPoint(2,:));explainer_shapley,queryPoint(3,:));explainer_shapley = 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
的Shapley值是第一个、第二个和第四个查询点的最重要预测因子,Model_Year
对于三个查询点是正的。的Model_Year
这三个点的变量值为76或77,第三个查询点的值为70。根据Shapley值为四个查询点,一个小Model_Year
值导致预测响应减少,而大Model_Year
值导致预测响应比平均响应增加。
创建部分依赖图(PDP)
PDP图显示了在训练过的模型中预测者和预测反应之间的平均关系。创建PDPModel_Year
,其他可解释性工具将其确定为一个重要的预测因素。通过tbl_subset
来plotPartialDependence
因此,该函数计算预测响应的期望只使用样本tbl_subset
.
图plotPartialDependence(黑盒,“Model_Year”tbl_subset)
该图显示了由四个查询点的Shapley值确定的相同趋势。预测的反应(英里/加仑
)的值随着Model_Year
价值增加。