LIME:模型预测结果是否值得信任?

花了一天时间对LIME论文:http://arxiv.org/pdf/1602.04938v1.pdf 仔细阅读和代码阅读,实验,大体理解了作者的设计思路。

背景:

我们在建立模型的时候,经常会思考我们的模型是不是够稳定,会不会出现样本偏差效应, p>>N时候会不会过拟合? 我们检查模型稳定,我们进行一些cross-validation来看看各项评估指标方差大不大。 可是如果样本一开始因为采样偏差导致样本有偏,导致模型和实际情况有差异,这个就不太好评估了。同样,p>>N也会有类似的问题,尤其在文本挖掘领域。一般情况,如果特征不是很多的话,尤其像logistic regression这样的model,我们会把模型权重给打印出来看看,看看训练出的模型结果,是否和人的经验吻合。下面是lime
文章中提到一个文本分类的case,预测一段文本是无神论相关的,还是基督徒相关的。文中分类器预测结果这篇文本是无神论相关的,可是主要区分特征却与人的经验十分不吻合的,这样的模型是不能让人信服的,当我们把这几个特征删除后,预测结果又反向了。我们可以通过人工构建一些由这些特征组成的文本来加入到预测实验中,会大大降低模型性能。

LIME解释原理:

LIME是Local Interpretable Model-Agnostic Explanations的缩写。LIME的目的是试图解释模型在预测样本上的行为,这种解释是可被理解的,并且这种解释是模型无关的,不需要深入到模型内部。作者提出的方法一种局部方法,非全局的,在每个预测样本附近随机采样产生一些样本,就像下图所,红色“x”是预测样本,周边‘*’和圆形样本都是采样得到的。

采样的机制是随机替换掉原始样本中若干个特征。如文本a="我女朋友非常喜欢看奇葩说",生成的样本可以是“我非常喜欢看奇葩说”,“我女朋友看奇葩说”等等。每个生成样本和原始样本都有个权重,权重的计算方式: w=exp(-d^2/theta^2), d是距离,文本中我们可以采用cosine 距离来表征文本样本间的距离。

下面是lime_text.py 中__data_labels_distances函数的代码,针对是文本文本分类的解释,下面代码的主要作用如何给预测样本生成近邻采样样本,以及相应权重,采样样本在当前分类器的预测概率。

生成的样本表征方式是bag of word: [0,1,0,0,1]。注意这时候采样样本特征不是高维的,最大长度只是预测样本的长度。

有了采样样本,以及采样样本的权重,预测概率。有了这些东西,我们下面该干什么呢?记住我们的目的是要解释我们分类器在该预测样本中如何起作用的?  简单的说是在该预测样本,分类器都是哪些特征起到作用?我们可以事先设定个数值K,我们只看前K个起作用的特征(太多了,人无法查看)

既然是特征选择问题,那我们可以用这些采样样本做个加权回归模型。做回归模型前,先选取k个重要特种,如何选取? 方法是可以是根据回归模型训练结果中最大的权重,或者是前向搜索方法(每次选取使回归模型R^2值最大的特征加入到集合中。),或者采用lasso_path的方法。注意样本的权重是不一样的。

具体可以看下面代码:

选取K个特征后,我们就可以在采样的样本,以及这K个特征上,做个加权回归模型。回归模型输出的K个特征以及权重,就是分类器对预测样本的解释。下面是explain_instance_with_data函数代码:

上面的方法总体可以用paper上的描述来概括:

总结:

上面主要围绕文本分类解释展开的,并且主要是基于文本bag of word方式。其实基于文本嵌入表征方式也是可行的,文本中词的替换机制一样,只是在预测采样样本分类概率前需要把采样样本变成向量方式。

其实可以拓展到很多其他领域,比如风控征信等。预测一个行为是否有风险,当我们的模型预测到该行为是有风险的,我们需要给我们分析师,客服解释这个行为为什么有风险,模型识别风险行为特征是什么。

拓展时候预测样本的近邻采样机制可能要优化设计下。更多场景很多特征不是离散或者二值的,而是连续的,尤其像Random Forest等树模型其实更适合处理连续的这种变量。针对这种情况,如何处理? 采样怎么做? 一种简单的方法是把连续特征进行离散化,one-hot编码,这样就和lime对文本分类模型的解释中采样机制是一样的啦。一种就是完全和文本一样,对特征进行置0采样,不管是否是连续变量。

总体上来说,LIME对模型的解释方法比较简单,论文描述略显复杂(本来很简单的东西为啥写的这么复杂呢?),论文更多是从实验角度来分析LIME方法的有效性,没有太多理论分析,让人感觉不是很放心(想想这个方法有哪些坑),毕竟实验是根据样本有关的,在一些复杂的场景是否有效? 还有实验更多用的文本和图像场景,其他领域是否奏效?  为什么在预测样本的采样样本中做加权回归分析,回归模型结果特征权重大小能代表原始模型在预测样本的表现呢?

时间: 2024-11-08 20:37:35

LIME:模型预测结果是否值得信任?的相关文章

机器学习中的贝叶斯方法---先验概率、似然函数、后验概率的理解及如何使用贝叶斯进行模型预测(2)

在 机器学习中的贝叶斯方法---先验概率.似然函数.后验概率的理解及如何使用贝叶斯进行模型预测(1)文章中介绍了先验分布和似然函数,接下来,将重点介绍后验概率,以及先验概率.似然函数.后验概率三者之间的关系---贝叶斯公式. 在这篇文章中,我们通过最大化似然函数求得的参数 r 与硬币的抛掷次数(抛掷次数是10,求得的r=0.9)有关,为了更好地描述 参数 r 与 抛掷次数之间的关系,对下面符号作一些说明: 参数 r :抛一次硬币出现正面的概率,显然 r 的取值范围为[0,1] yN,在N次抛硬币

逻辑回归模型预测股票涨跌

http://www.cnblogs.com/lafengdatascientist/p/5567038.html 逻辑回归模型预测股票涨跌 逻辑回归是一个分类器,其基本思想可以概括为:对于一个二分类(0~1)问题,若P(Y=1/X)>0.5则归为1类,若P(Y=1/X)<0.5,则归为0类. 一.模型概述 1.Sigmoid函数 为了具象化前文的基本思想,这里介绍Sigmoid函数: 函数图像如下: 红色的线条,即x=0处将Sigmoid曲线分成了两部分:当 x < 0,y <

【R实践】时间序列分析之ARIMA模型预测___R篇

时间序列分析之ARIMA模型预测__R篇 之前一直用SAS做ARIMA模型预测,今天尝试用了一下R,发现灵活度更高,结果输出也更直观.现在记录一下如何用R分析ARIMA模型. 1. 处理数据 1.1. 导入forecast包 forecast包是一个封装的ARIMA统计软件包,在默认情况下,R没有预装forecast包,因此需要先安装该包 > install.packages("forecast') 导入依赖包zoo,再导入forecast包 > library("zoo&

时间序列深度学习:状态 LSTM 模型预测太阳黑子

时间序列深度学习:状态 LSTM 模型预测太阳黑子 本文翻译自<Time Series Deep Learning: Forecasting Sunspots With Keras Stateful Lstm In R> 原文链接 由于数据科学机器学习和深度学习的发展,时间序列预测在预测准确性方面取得了显着进展.随着这些 ML/DL 工具的发展,企业和金融机构现在可以通过应用这些新技术来解决旧问题,从而更好地进行预测.在本文中,我们展示了使用称为 LSTM(长短期记忆)的特殊类型深度学习模型,

LSTM模型预测sin函数详解

注解: fun_data()函数生成训练数据和标签,同时生成测试数据和测试标签HIDDEN_SIZE = 128,使用128维的精度来定义LSTM的状态和输出精度,就是LSTM中的h,c lstm_model()函数定义了一个可重入的模型,分别由评估函数和训练函数调用,在训练前使用空模型预测并输出未训练数据并可视化通过with tf.variable_scope("lstm_model",reuse=tf.AUTO_REUSE) as scope:定义了在多次实例化模型的时候共享训练结

NLP(十八)利用ALBERT提升模型预测速度的一次尝试

前沿 ??在文章NLP(十七)利用tensorflow-serving部署kashgari模型中,笔者介绍了如何利用tensorflow-serving部署来部署深度模型模型,在那篇文章中,笔者利用kashgari模块实现了经典的BERT+Bi-LSTM+CRF模型结构,在标注了时间的文本语料(大约2000多个训练句子)中也达到了很好的识别效果,但是也存在着不足之处,那就是模型的预测时间过长,平均预测一个句子中的时间耗时约400毫秒,这种预测速度在生产环境或实际应用中是不能忍受的. ??查看该模

LIME:模型预測结果是否值得信任?

花了一天时间对LIME论文:http://arxiv.org/pdf/1602.04938v1.pdf 细致阅读和代码阅读,实验.大体理解了作者的设计思路. 背景: 我们在建立模型的时候,常常会思考我们的模型是不是够稳定,会不会出现样本偏差效应. p>>N时候会不会过拟合? 我们检查模型稳定.我们进行一些cross-validation来看看各项评估指标方差大不大. 但是假设样本一開始由于採样偏差导致样本有偏,导致模型和实际情况有差异.这个就不太好评估了. 相同.p>>N也会有类似

R语言实现多线性回归模型预测时间序列数据 MLR models in R

<!-- #此文主要针对统计基础比较薄弱(比如博主)利用多个模型言针对时间序列数据做预测用之MLR/多线性回归模型: --><!--定义:人话就是给定一组数据集data={(x1,y1),(x2,y2)....(xn,yn)} 从data中得到一个线性模型来反映 x和y 的关系,f(x)=W1X1+W2x2+w3x3+b->f(x)=Wt*x+b :w=不同的参数 -->通常测量误差用欧式误差距离/最小二乘法: (f(x)-y)^2 ---y是ground truth 也就是

R语言的ARIMA模型预测

R通过RODBC连接数据库 stats包中的st函数建立时间序列 funitRoot包中的unitrootTest函数检验单位根 forecast包中的函数进行预测 差分用timeSeries包中diff stats包中的acf和pacf处理自相关和偏自相关stats包中的arima函数模型