这个例子展示了如何使用局部可解释的模型不可知解释(LIME)技术来理解深度神经网络分类表格数据的预测。您可以使用LIME技术来了解哪些预测因子对网络的分类决策最重要。
在本例中,您使用LIME来解释特征数据分类网络。对于指定的查询观测,LIME生成一个合成数据集,其每个特征的统计数据与真实数据集相匹配。该合成数据集通过深度神经网络获得分类,并拟合一个简单的、可解释的模型。这个简单的模型可以用来理解前几个特征对网络分类决策的重要性。在训练这个可解释模型时,合成观测值由它们与查询观测值之间的距离加权,因此解释是“局部的”。
这个例子用途石灰
(统计学和机器学习工具箱)和适合
(统计学和机器学习工具箱)生成合成数据集并将简单的可解释模型适合合成数据集。要了解培训的图像分类神经网络的预测,使用imageLIME
.有关更多信息,请参见使用石灰理解网络预测.
加载Fisher虹膜数据集。该数据包含150个观测数据,其中4个输入特征代表植物的参数,1个类别响应代表植物物种。每一个观察结果都被归类为三个物种之一:刚毛犀、花斑犀或维京犀。每次观察有四个测量值:萼片宽度,萼片长度,花瓣宽度和花瓣长度。
filename = fullfile(toolboxdir(“统计数据”),“statsdemos”,'fisheriris.mat');加载(文件名)
将数值数据转换为表。
特点= [“萼片长度”,“花萼宽”,“花瓣长度”,“花瓣宽度”];预测= array2table(量,“VariableNames”、功能);trueLabels = array2table(分类(物种),“VariableNames”,“回复”);
创建一个培训数据表,其最后一列是响应。
data =[预测因子];
计算观察、特征和类的数量。
numObservations =大小(预测,1);numFeatures =大小(预测,2);numClasses =长度(类别(数据{:5}));
将数据集划分为训练集、验证集和测试集。留出15%的数据用于验证,15%用于测试。
确定每个分区的观察数。设置随机种子,使数据分割和CPU训练具有可重现性。
rng (“默认”);numObservationsTrain =地板(0.7 * numObservations);numObservationsValidation =地板(0.15 * numObservations);
创建一个与观察值对应的随机索引数组,并使用分区大小对其进行分区。
idx = randperm(numobservations);idxtrain = idx(1:numobservationstrain);idxvalidation = idx(numobservationstrain + 1:numobservationstrain + numobservationsvalidation);iDxtest = idx(numobservationstrain + numobservationsvalidation + 1:结束);
使用索引将数据表划分为训练、验证和测试分区。
dataTrain =数据(idxTrain:);dataVal =数据(idxValidation:);人数(=数据(idxTest:);
创建一个简单的多层感知器,有一个包含五个神经元和ReLU激活的隐藏层。特征输入层接受包含表示特征的数字标量的数据,例如Fisher虹膜数据集。
numHiddenUnits = 5;layers = [featureInputLayer(numFeatures) fulllyconnectedlayer (numHiddenUnits) reluLayer fulllyconnectedlayer (numClasses) softmaxLayer classificationLayer];
使用随机动量梯度下降(SGDM)训练网络。设置最大纪元数为30,并使用15的小批量大小,因为训练数据不包含许多观察。
选择= trainingOptions (“SGDM”,...“maxepochs”30岁的...“迷你匹配”15岁的...“洗牌”,“每一代”,...“ValidationData”dataVal,...“ExecutionEnvironment”,“cpu”);
培训网络。
NET = Trainnetwork(数据仓,层,选择);
| ====================================================================================================================== ||时代|迭代|经过时间的时间迷你批量|验证|迷你批量|验证|基础学习| | | | (hh:mm:ss) | Accuracy | Accuracy | Loss | Loss | Rate | |======================================================================================================================| | 1 | 1 | 00:00:00 | 40.00% | 31.82% | 1.3060 | 1.2897 | 0.0100 | | 8 | 50 | 00:00:00 | 86.67% | 90.91% | 0.4223 | 0.3656 | 0.0100 | | 15 | 100 | 00:00:00 | 93.33% | 86.36% | 0.2947 | 0.2927 | 0.0100 | | 22 | 150 | 00:00:00 | 86.67% | 81.82% | 0.2804 | 0.3707 | 0.0100 | | 29 | 200 | 00:00:01 | 86.67% | 90.91% | 0.2268 | 0.2129 | 0.0100 | | 30 | 210 | 00:00:01 | 93.33% | 95.45% | 0.2782 | 0.1666 | 0.0100 | |======================================================================================================================|
使用培训的网络对测试集进行分类观察。
predigedlabels = net.classify(DataTest);truelabels = dataTest {:,结束};
使用混乱矩阵可视化结果。
图杂志章(Truelabels,PredightLabels)
该网络成功地利用四种植物特征来预测试验观测的物种。
使用LIME来理解每个预测器对网络分类决策的重要性。
调查每个观察的两个最重要的预测因素。
numimportantpredictors = 2;
用石灰
要创建一个合成数据集,每个功能的统计信息匹配真实数据集。创建一个石灰
对象使用深入学习模型黑盒子
和预测的数据包含在预测
.使用一个低'kernelwidth'
所以价值石灰
使用重量关注查询点附近的样本。
Blackbox = @(x)分类(net,x);解释器=石灰(Blackbox,Predictors,'类型',“分类”,'kernelwidth', 0.1);
你可以使用LIME解释器来理解深层神经网络最重要的特征。该函数通过使用一个简单的线性模型估计特征的重要性,该模型在查询观测附近近似神经网络。
找出测试数据中与setosa类相对应的前两个观察值的指数。
trueLabelsTest =人数({,,}结束;标签=“setosa”;idxSetosa = find(trueLabelsTest == label,2);
使用适合
函数以将一个简单的线性模型与指定类的前两个观察拟合。
explainerObs1 =适合(讲解员人数((idxSetosa (1), 1:4), numImportantPredictors);explainerObs2 =适合(讲解员人数((idxSetosa (2), 1:4), numImportantPredictors);
策划的结果。
图形子图(2,1,1)图(SementRexerobs1);子图(2,1,2)图(SementRexerobs2);
对于Setosa类,最重要的预测因子是低的花瓣长度值和高的萼片宽度值。
对类versicolor执行相同的分析。
标签=“多色的”;idxversicolor =查找(truelabelstest ==标签,2);Exploxerobs1 = fit(解释器,DataTest(Idxversicolor(1),1:4),NumimportPredictors);Exploxerobs2 = fit(解释器,DataTest(IDXVersicolor(2),1:4),NumimportantPredictors);图形子图(2,1,1)图(SementRexerobs1);子图(2,1,2)图(SementRexerobs2);
对于Versicolor类,高花瓣长度是重要的。
最后,再考虑一下维琪卡课程。
标签=“virginica”;idxvirginica = find(truelabelstest ==标签,2);Exploxerobs1 = fit(解释器,DataTest(Idxvirginica(1),1:4),NumimportantPredictors);Exploxerobs2 = fit(解释器,DataTest(Idxvirginica(2),1:4),NumimportantPredictors);图形子图(2,1,1)图(SementRexerobs1);子图(2,1,2)图(SementRexerobs2);
对于弗吉尼亚类来说,高花瓣长度值和低萼片宽度值是重要的。
石灰图表明,高花瓣长度值与versicolor和Verginica类相关联,并且低的花瓣长度值与Setosa类相关联。您可以通过探索数据进一步调查结果。
在数据集中绘制每个图像的花瓣长度。
setosaIdx = ismember(数据{,,},“setosa”);versicolorIdx = ismember(数据{,,},“多色的”);virginicaIdx = ismember(数据{,,},“virginica”);图持有在情节(数据{setosaIdx,“花瓣长度”},“。”)绘图(数据{versicoloridx,“花瓣长度”},“。”)情节(数据{virginicaIdx,“花瓣长度”},“。”)举行离开Xlabel(“观察号”) ylabel (“花瓣长度”)传说([“setosa”,“多色的”,“virginica”])
setosa类的花瓣长度值比其他类低得多,与从石灰
模型。
适合
(统计学和机器学习工具箱)|石灰
(统计学和机器学习工具箱)|Trainnetwork.
|分类
|FeatureInputLayer.
|imageLIME