如何解释一个模型
今天早上和同事聊天,因为宅在家里,业余时间无事可干,大家各自发挥学习特长各种学习。然后再次感悟机器学习这个领域太大,每个看似小问题展开都是大学问。有些知识无法一时get到点,只能通过不停看参加讨论,耳濡目染,终于有一天顿悟。不知道我顿悟了没,但是想把自己get的到的关于解释机器模型的知识到和大家分享一下。
之前讨论过如何给一个模型打分。打分很好理解,根据分数能够一眼看出哪个模型更好一点。吴恩达在Machine Learning Yearning一书中强调了很多次,选择一个metric有多重要。那么解释模型又是什么鬼。
解释模型就像介绍软件功能一样,解释你的模型是怎么工作的。
比如说一个预测房价的模型,解释模型就是必须要解释,在模型中是房子的位置,大小还是房型起的作用更大。
线性模型很好解释:
y=2x2+1x1+0
训练好的模型中的2, 1 就是feature的权重。
那么复杂的模型该怎么办呢。是不是所有的模型都是可以解释的呢?
有人大概要质疑了,深度学习模型不是黑盒模型吗,需要关心这个吗?
这是一个很值得讨论的问题,为什么需要解析深度学习的模型。
首先万物当中,人类是最为矛盾的物种。人类思维不可能一夜之间从因果思维转换成相关思维。即使因果思维已经存在了几个世纪,为什么人类还是有很大一部分的有神论者。为什么热学有了第一定律后有了第二定律。为什么工业革命后会有科技革命。
偏题了,让我们serious的讨论一下这个问题。
从应用角度来说,如果无法解析模型,那就很难说服stokeholder来相信你的模型。特别是在某些领域,比如说医疗,如果你无法解释为什么某个影像或某个心电图被预测成异常,医院或者医生会放心使用这个系统吗?所以在很多时候,数据科学家们在模型精确度和可解析度上选择了可解析度。
解释一个模型有助于优化模型,不管是模型的质量或者是性能。比如说如果你发现有些feature根本不起作用,那就可以研究是不是可以不用,最后结果可能是抛弃大量无关feature,使得模型更加简单。或者发现某个feature起了很大的作用,与现实不符,那就可以研究是不是哪里有错误,是不是数据有bias,是不是网络结构不合适。解释模型就是想做到”知己知彼”。
那到底要怎么解释呢,怎么找出权重呢。
shapley value
Shapley value是借用了游戏领域计算每个玩家的对community的贡献值的方法。shapley的文献很难看,越看越糊涂,特别是对算法的各种解析文章很多都不准确。但是记住以下几点:
计算shapley value不是针对feature,而是feature value,有很多文章都没指出这一点,使得最初帮助理解的例子无法转化到模型解释上来。
如果明白了这一点,那每一个shapley value就是每一个feature value的margin contribution的平均值。那这又是什么意思呢。大家还记得概率论里怎么计算一个变量的margin probability边缘概率吗? 其实是一个道理,就是把所有的和自己有关的组合都找出来,算出自己的contribution再平均一下。
为什么游戏理论里是的算法很好理解,这里很难理解呢,因为游戏理论里,可以直接去掉某个人来计算,但是模型不可以把某个feature去掉,所以用了替代方法,计算了所有可能的取值,然后取平均值。
最后记住一点,每一个样本都需要对每个feature的value计算一次shapley value,最后这个feature value的值是个平均值。
shapley value据说是非常公正的一种做法,但问题一看就知道,计算量太大。所以有了SHAP.
SHAP也是计算shapley value,只不过是一种局部近似法来减轻计算量。其中数学推导相当复杂。现在python有库来分析多种模型。https://github.com/slundberg/shap
解释模型不得不提的是LIME。数学推导不展开。核心思想就是对于每个样本找到局部模型,然后分析其贡献。有人质疑这个局部替代模型靠谱吗?人家问啦,你觉得gradient descent靠谱吗?
解释模型也是机器学习中比较大的一块领域。不可能通过读几篇文章就全部搞懂。如果到这里为止,大家get到shapley value,SHAP 和 LIME都是用来解释负责模型的,计算每个feature value的contribution就可以了。细节通过慢慢领悟。当然细节不领悟,照样可以使用python库。
Reference:
https://christophm.github.io/interpretable-ml-book/shap.html
https://towardsdatascience.com/explain-your-model-with-the-shap-values-bc36aac4de3d
作者简介:
Dagis: 现居住在瑞典,某AI公司的Data Scientist, 学习通信出身,喜欢数学,更喜欢把数学用于实际。
作者其它文章(更多文章,请进入公众号。)
用Streamlit可视化数据分析
学习笔记:Practical Statistics for Data Scientists
本文分享自微信公众号 - 一起learn大数据和机器学习(hundendagis)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4631447/blog/4535561