Example-based Machine Learning是什么?
参考:https://christophm.github.io/interpretable-ml-book/proto.html
EML简介
Example-based Machine Learning (EML) 是从数据集中选择特殊的样本来进行学习。下面看几个例子来理解:
-
一个医生给一个病人看病,该病人咳嗽症状与常见的不太一样,而且发烧严重。这让医生想起了之前的一个病人也是这种症状,于是他怀疑该病人可能和之前的那个病人是同样的病因。
-
一个程序猿接到了一个新的客户的需求。他经过分析后发现,这个需求很大部分与之前的一个项目类似,于是他打算基于原来的项目重新开发这个新的项目。
上面例子遵循的一个原则是:如果B事件和A事件类似,而且A事件会导致Y事件发生,那么B事件也有可能让Y事件发生。
我们看看有哪些算法遵循上面的原则:
- 决策树:根据数据在各种重要的特征的相似性来将数据划分到各个叶子节点中去。当有新的数据来的时候,根据样本之间的相似性进行判断。
- KNN:该算法更好理解,就是计算新样本与各个样本之间的距离,从最相近的前K个样本中选出最相近的样本做出预测。
下面介绍各种EML算法。
Counterfactual Method
Counterfactual简单理解就是反事实(思考或解释)。人类经常会这样反事实的思考,例如我们一早坐下来,啜一口咖啡,然后就问自己,如果我生在南非而不是美国的话,生活会变成怎样,如果地球的轨道离太阳的距离缩短几干米,世界又会变成怎样。
例子
那如何应用到机器学习中去呢?假如你现在有一套房子出租,你已知房子面积(20平米),年龄(10年),位置(深山老林),家居情况,房子布局等情况,并基于这些信息构建了一个房租预测模型,结果预测为每个月只能租100元人民币,你觉得这怎么能行,这跟你心中的2000一个月相差甚远。于是你调整各种参数来看房租的变化,你把房子面积设置为100平米,结果预测为10000元每月,你看到结果后满心欢喜,但是很快认清了现实,因为这不可能。于是你微调房子布局,例如增大客厅面积,或者增设厨房,又或者换上土豪色的地板,这些微调都使得预测的房子涨到了你所期望的2000元每月。以上意淫就是所谓的反事实。
形式化表达
上面的\(x,x'\)分别表示真实数据值和反事实数据值,\(y'\)表示预期的输出,\(\hat{f}(x')\)表示模型对反事实数据的预测值。
第一项表示模型预测值和预期输出值之间的差距,简单理解就是你YY你的房子各种修改之后可能的房租和你心目中满意的房租的差距。
第二项表示反事实数据和真实值之间的距离,也就是说你YY的程度大小,如果你YY你的房子面积从20平米变成100平米,这会使得损失函数非常大,所以算法优化过程中会让你这个YY降低。
\(\lambda\)的作用就是在与预期值的接近程度和YY的严重程度之间做平衡。当然这个值是很难选取的,所以另一种办法就是你自己设定一个阈值,例如,你希望房租是2000元每月,而且你也知道这很难,所以你觉得1500也还可以。该限制条件形式如下:
最终优化表达式为:
算法评价
优点:
- 可解释性强:因为通过调整不同的特征值或样本能够得到不同的预测,并且这些预测可能会和预期一致,当不一致的时候也就表示可能达到了某个阈值。
- 不需要获取数据或者模型,或者说只需模型预测结果就可以了。假如我们是一个房租价格预测模型的提供商,我们只把模型预测的API接口卖给别人,这样我们可以不断赚钱。另外用户用了我们的模型后,发现预测结果真的挺不错的,但是又没办法得到模型结构,于是它可以通过不断调用API来构建输入与输出之间的关系进而理解模型。因此该算法在解释模型预测和保护模型拥有者利益之间做了平衡。
缺点:
- 罗生门效应:意思是对于一个样本,也许我们对他的若干个属性(例如房子面积,有无厨房等)分别作了不同的修改得到了多个不同的新样本,最后得到的结果可能是都有所提升(房租都提升了)。这个时候你很难说到底是哪个属性起了作用,就好像同一个事件,不同的人会有不同的看法,你很难确定你的角度是全面的。
- 容忍度\(\epsilon\)也是很难找到合适的,不过这个不一定是方法上错了,也一定程度上取决于数据。
- 无法处理类别(categorical)特征。虽然可以单独地对每一个特征组合做处理,但是随着特征数量增加,组合特征数量会呈爆炸增长,处理起来也不现实。
Adversarial Example(对抗样本)
Adversarial Example(AE)的作用和Counterfactual Example有点类似,只不过前者是用来对模型进行解释的,而AE是用来迷惑模型的,以此来加强模型的鲁棒性。AE其实也就是最近非常火爆的GAN算法,这里就不做过多介绍了。
Prototypes and Criticisms
Prototype是能够表示所有数据的数据实例,而Criticism则是不能由一组prototypes很好表示出来的数据实例,如下图所示:
求解prototypes的方法有很多,很多聚类算法就可以实现这个,但是大都只能找到prototypes,不能找到criticism。所以下面介绍MMD-critic算法,该算法可以找到prototypes和criticism。
MMD-critic
该算法可以简单总结总如下:
- 设置prototypes和criticism的数量
- 使用贪婪搜索找到prototypes(具有代表性的样本)。
- 使用贪婪搜索找到criticisms(不具代表性的样本)。