解释机器学习模型
本主题介绍用于模型解释的统计和机器学习工具箱™功能,并展示如何解释机器学习模型(分类和回归)。
机器学习模型通常被称为“黑盒”模型,因为很难理解模型是如何做出预测的。可解释性工具可以帮助您克服机器学习算法的这一方面,并揭示预测器如何对预测做出贡献(或不做出贡献)。此外,您还可以验证模型是否为其预测使用了正确的证据,并发现不立即明显的模型偏差。
模型解释的特点
使用石灰
,沙普利
,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及其财务比率、行业标签和信用评级。
可读的(“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(blackbox);
的方法估计预测因子的重要性predictorImportance
函数。该函数通过对每个预测器上的分裂导致的节点风险变化求和并除以分支节点的数量来估计预测器的重要性。
Imp2 = predictorImportance(blackbox);
创建一个包含预测器重要性估计值的表,并使用该表创建水平条形图。若要在任何预测器名称中显示现有下划线,请更改TickLabelInterpreter
轴的值“没有”
.
table_Imp = table(Imp1',Imp2',...“VariableNames”, {“out - out - bag perordered Predictor Importance”,“预测的重要性”},...“RowNames”, blackbox.PredictorNames);Tiledlayout (1,2) ax1 = nexttile;table_Imp1 = sortrows(table_Imp,“out - out - bag perordered Predictor Importance”);barh(分类(table_Imp1.Row table_Imp1.Row) table_Imp1。(“out - out - bag perordered Predictor Importance”)包含(“out - out - bag perordered Predictor Importance”) 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(blackbox,tblX_AAA);
的默认值DataLocality为石灰
是“全球”
,这意味着默认情况下,石灰
生成全局合成数据集,并将其用于任何查询点。石灰
使用不同的观测权重,使权重值更集中于查询点附近的观测值。因此,您可以将每个简单模型解释为特定查询点的训练模型的近似值。
使用object函数为四个查询点拟合简单模型适合
.将第三个输入(在简单模型中使用的重要预测器的数量)指定为6,以使用所有六个预测器。
explainer_lime = fit(explainer_lime,queryPoint(1,:),6);explainer_lime = fit(explainer_lime,queryPoint(2,:),6);explainer_lime = 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(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_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
数据集,其中包含20世纪70年代和80年代初生产的汽车的测量数据。
负载carbig
创建一个包含预测变量的表加速度
,气缸
,等等
tbl = table(加速度,气缸,排量,马力,车型年,重量);
训练一个响应变量的GPR模型英里/加仑
通过使用fitrgp
函数。指定“KernelFunction”
作为“ardsquaredexponential”
使用平方指数核与每个预测器单独的长度尺度。
blackbox = fitrgp(tbl,MPG,“ResponseName”,“英里”,“CategoricalPredictors”(2 - 5),...“KernelFunction”,“ardsquaredexponential”);
黑箱
是一个RegressionGP
模型。
使用特定于模型的可解释性特性
您可以从模型中使用的核函数的学习长度尺度计算预测器权重(预测器重要性)。长度尺度定义了一个预测器可以有多远才能使响应值变得不相关。通过取负学习长度尺度的指数来找到归一化的预测权重。
sigmaL = blackbox.KernelInformation.KernelParameters(1:end-1);%已学习长度量表权重= exp(-sigmaL);预测权重Weights = Weights /sum(Weights);归一化预测权重
创建一个包含标准化预测器权重的表,并使用该表创建水平条形图。若要在任何预测器名称中显示现有下划线,请更改TickLabelInterpreter
轴的值“没有”
.
Tbl_weight = table(weights,“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为石灰
是“全球”
,这意味着默认情况下,石灰
生成全局合成数据集,并将其用于任何查询点。石灰
使用不同的观测权重,使权重值更集中于查询点附近的观测值。因此,您可以将每个简单模型解释为特定查询点的训练模型的近似值。
使用object函数为四个查询点拟合简单模型适合
.将第三个输入(简单模型中使用的重要预测因子的数量)指定为6。在此设置下,软件将决策分割(或分支节点)的最大数量指定为6,以便拟合的决策树使用最多的所有预测因子。
explainer_lime = fit(explainer_lime,queryPoint(1,:),6);explainer_lime = fit(explainer_lime,queryPoint(2,:),6);explainer_lime = 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_子集);
通过使用对象函数计算查询点的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
的Shapley值是第一个、第二个和第四个查询点的最重要的预测器,Model_Year
对于三个查询点都是正的。的Model_Year
这三个点的变量值为76或77,第三个查询点的值为70。根据Shapley值为4个查询点,取小Model_Year
值的降低导致预测响应的降低,且较大Model_Year
值导致预测响应与平均值相比有所增加。
创建部分依赖图(PDP)
PDP图显示了训练模型中预测器和预测响应之间的平均关系。为创建PDPModel_Year
,其他可解释性工具认为这是一个重要的预测因素。通过tbl_subset
来plotPartialDependence
因此,这个函数计算预测响应的期望只使用样本tbl_subset
.
图plotPartialDependence(黑盒,“Model_Year”tbl_subset)
该图显示了四个查询点的Shapley值所标识的相同趋势。预测的反应(英里/加仑
的值随着Model_Year
价值增加。