社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

原创 | 机器学习模型的可解释性

数据派THU • 5 月前 • 154 次点击  

作者:宋雨婷
本文约6300字,建议阅读13分钟
本文为你详细介绍机器学习模型的可解释性。


复杂的机器学习模型在实际应用中有很高的准确率,在设计模型时主要关注的是性能,而非可解释性。模型的复杂度、非线性等特征使得他们成为“黑箱” ,很难被人类理解并应用于下游决策任务中倘若人类无法理解模型,人类很难去信任模型并把它应用于高风险决策中。因此,仅仅只关注模型的正确性是不够的,也要关注模型的可解释性。那么,如何做到模型能够被人类理解呢?一般有两个方法:一是建立本身就具有可解释性的模型,如线性模型、决策树等等。二是先建立一个黑箱模型,然后用事后可解释性分析方法对其进行分析。


在某些情况下,模型的准确率和可解释性之间可能存在权衡。准确率越高的模型的决策过程往往很复杂,难以直观理解,而可解释性高的模型则准确率较低。

 


本文将先从内部可解释模型与事后可解释性分析方法两方面介绍目前用于模型解释的常见方法,然后介绍评估模型解释的有效性和准确率的方法,接着,从实证和理论两个角度分析模型解释的可靠性和有效性,最后介绍未来可解释性分析的发展方向。


期望解释的模型特征主要有:线性关系特征、特征重要性排序、梯度向量和广义线性可加。模型可能是可解释的,也可能是不可解释的 比如,如果一个模型的响应变量由上千个因变量共同影响,此时,即使可以评估每个因变量的权重,使用者也很难去理解模型。


为了更加清晰明了地解释机器学习模型,本文将从基于规则的模型解释、风险评分、广义可加模型和基于原型层的模型解释四个维度对机器学习模型的内部机理进行解释。


1. 基于规则的模型解释


在现实生活中,我们经常会使用“如果...,那么...”的语句对事物进行判断,比如“如果他不听课且不写作业且不复习,那么他将不及格。”IF-THEN 结构在语义上类似于自然语言和人类的思维方式,因此利用IF-THEN结构构建的模型具有很高的可解释性。对于一条规则,如果满足条件的样本预测出来的结果与真实值不符,那么这条规则是不准确的;如果这条规则没有任何满足条件的样本,那么无法支持这条规则。规则通常在准确性和是否能支持之间进行权衡:通过向条件添加更多特征,可以获得更高的准确率,但会失去支持。


对于一个复杂的多分类任务,一条规则是不够的,通常分类器需要去学习10-20条规则。那么,这些规则该如何排列呢?不恰当的排列方式也许会导致两个问题:规则重叠(一个样本同时满足两条规则,然而两条规则指向不同的预测结果)和支持率低(存在样本不符合所有规则)。后者可以通过引入默认规则来解决。即假如样本不符合所有规则,则默认他的类别为A。而前者,则可以通过合适的排列方式来解决,如决策树、规则列表与可解释决策集。


看下面这张图,左侧为可解释决策集,而右侧是规则列表。不难发现,左侧为并列的结构,而右侧为层次嵌套式结构。


在规则列表中,如果样本的第一条规则的条件为 true,则使用第一条规则进行预测。如果样本的第一条规则的条件为假,则转到下一条规则并检查它是否适用,依此类推。决策列表通过仅返回列表中适用的第一条规则的预测结果来解决重叠规则的问题。


决策集类似于规则的集合,不同之处在于某些规则可能具有更高的投票权。在一个决策集中,规则要么是互斥的,要么存在解决冲突的策略,例如多数投票。


1.1. 贝叶斯规则列表


在了解了规则的排列方式之后,规则又是如何生成的呢?又是以什么样的权重、顺序排列到一起的呢?贝叶斯规则列表回答了以上问题。


贝叶斯规则列表通常包括三个步骤:预挖掘先行词、构建规则列表、和模型参数推断。以医疗诊断为例,现在收集了年龄、有无高血压病史、是否抽烟等特征,需要通过这些特征去诊断患者患有中风的概率。


首先,在预挖掘先行词阶段,利用关联规则挖掘技术(如Apriori等)去挖掘数据集找出频繁出现的项集,如“年龄大于60”(1-项集)、“年龄大于60且抽烟”(2-项集)、“年龄大于60且抽烟且有高血压”(3-项集)。把这些频繁出现的项集作为决策规则中的IF条件,即先行词。


接着,在构建规则列表阶段,计算满足IF条件的样本患有中风的条件概率,比如 “IF偏瘫且年龄 > 60,THEN中风风险为 58.9%(53.8% - 63.8%)”。构建完初步的规则列表后,需要对规则进行排序和筛选,来优化规则列表的性能。可以根据规则的准确性(如条件概率、后验概率等)、可解释性(如规则的简洁性、逻辑清晰度等)或其他相关指标进行排序。例如,按照条件概率从高到低对规则进行排序,优先选择准确性较高的规则。筛选可以根据设定的阈值或其他标准,去除性能较差或不太重要的规则。例如,如果某个规则的条件概率低于一定阈值,或者规则过于复杂且对整体性能提升不大,会将其从规则列表中删除。


最后,在模型参数推断阶段,需要确定规则列表中各项参数(如规则的权重、条件概率的阈值),通常采用 Metropolis - Hastings 算法来实现。该算法通过在模型参数的可能取值空间中进行随机采样,并根据一定的接受准则来决定是否接受新的采样值,从而逐步逼近最优的参数估计。随机采样是对d进行采样,从当前的生成提议的,通常有三种操作选项:移动(Move)、添加(Add)、移除(Remove),对应的概率如下:

 


通过多次迭代采样,算法能够充分探索参数空间,考虑不同参数取值对模型性能的影响,最终得到较为准确的参数估计值,使模型能够更好地拟合数据,提高预测的准确性和可靠性。


最后,经过以上操作,得到最终的规则列表,如下图:

 


1.2. 可解释决策集


规则列表相当于一串IF-THEN-ELSE语句,虽然复杂度比决策树低,然而,决策列表仍然存在缺点。通过IF-THEN-ELSE语句链接规则意味着新规则只能覆盖特征空间的越来越窄的切片。即使列表中的前几条规则是可解释的,附加的规则也会变得不那么可解释,因为它仅适用于越来越狭窄的情况。换句话说,附加规则只对前面规则都不适用的数据点才有用,这限制了决策列表的可解释性。此外,在多分类问题中,大多数类别只能用更窄的规则来描述,因为它们出现在列表的后面,这对那些希望所有类别都有同样好规则的专家来说,是个很麻烦的问题。为了解决这个问题,Hima_Lakkaraju提出了可解释决策集这个基于并列结构的模型。基于这个并列结构,人类可以依次了解每条规则的工作原理。


首先,我们对决策集的一些属性进行定义。为了保证可解释性,我们定义了决策集大小、决策集长度、覆盖率和重叠率四个维度。


  • 决策集大小:决策集中的规则越少,人类越容易理解。定义:对于决策集R,Size(R)=决策集中规则数量。

  • 决策集长度:每条规则中变量越少,该规则越容易被人类理解。定义:对于规则r=(s,c),length(r)=规则r中变量数量。

  • 覆盖率:当知道一条规则适用于哪些数据点,便可以更好的理解模型。定义:对于规则r=(s,c),cover(r)=数据集中所有满足规则r的数据点的集合。

  • 重叠率:通过规则的重叠率来衡量决策集的决策边界是否被明确。定义:对于规则r=(s,c)和r’=(s’,c’),overlap(r, r′) = cover(r) ∩ cover(r′)。


通过在测试集上调用模型来评估整个决策集的整体正确性,但仍然需要评估各条规则的正确性,为此定义了覆盖样本正确集和覆盖样本错误集来进行评估。


  • 覆盖样本正确率:对于一条规则r,定义correct-cover(r) = {(x, y) ∈ cover(r) | y = c},表示为满足规则条件的点被规则正确预测的集合。

  • 覆盖样本错误率:对于一条规则r,定义incorrect-cover(r) = cover(r) \ correct-cover(r),表示为满足规则条件的点被规则错误预测的集合。


有了这些属性后,利用它们来定义目标函数,并把目标函数分为七个部分,将这七个部分加权求和作为最终的目标函数,各个部分表示如下:


首先,使用规则数量较少的决策集:,其中,S是决策集中规则数量。

其次,单一规则的长度越短越好:,其中规则之间的重合度应越少越好,为此,定义f3,f4:

 

 

对于每个类别,鼓励决策集中至少有一个规则去预测他:



准确率:

召回率:


最终,定义决策集R=


目标函数中包含很多属性,优化它并非容易,这是一个NP问题,目标函数是非负、非常态、非单调的子模函数,用于优化目标函数的一个常用的算法是smooth local search(SLS),该算法通过对基于某个潜在子集的不同概率的元素(或规则)进行采样,找到决策集R。根据目标函数选择集合A中的元素,得到的决策集R是一个平滑的局部最优解。算法流程如下。


2. 风险评分


风险评分是一种广泛使用的线性分类模型,用于通过简单的算术计算来评估风险。风险评分在医学和刑事司法等领域有许多应用。比如看下面这张图:

 


图中列出了几条用于评估囚犯出狱后二次犯罪风险的规则,例如“之前被捕次数≥2,则加1分”“之前被捕次数≥5,则加1分”等,根据这些规则加减分来计算总分。同时,图片给出了不同分数对应的再犯风险概率,例如分数为 - 1 时,再犯风险为 11.9%;分数为 4 时,再犯风险为 95.3%。


然而,许多风险评分方法仍然是由领域专家手动构建的,这些方法通常依赖于专家判断,缺乏性能保证。Berk Ustun提出通过数据驱动的方式来学习构建风险评分。他把风险评分问题抽象成一个MINLP问题。


首先,记一个包含n个独立同分布训练样本的训练集为,其中,表示特征向量,表示类别标签。我们将分数表示为线性函数s(x)=<>,其中,是包含d+1个系数的向量, 为截距。在这个设定中,系数表示特征j对分数的贡献。对于具有特征的样本,用户计算分数si(x)=<>,然后将分数转换为预测风险的估计值。我们通过logistic函数估计样本为正例的预测风险:


我们的目标是训练一个稀疏的、具有小整数系数且在校准性和排序准确性方面表现良好的风险评分模型,通过求解一个混合整数非线性规划来确定系数的值,这是一个离散优化问题,其形式为:

 


目标函数:,约束条件:

其中:

  • 是归一化逻辑损失函数。

  • - 半范数。

  • 是用户提供的一组可行系数向量。

  • 是平衡拟合和稀疏性的权衡参数。


优化RiskMINLLP是困难的,因为-正则化、整数最小化、MINLP问题都是NP的难点。为此,Berk Ustun利用了多种方法求解风险评分问题,包括切割平面算法(CPA)、晶格切割平面算法(LCPA),并利用离散坐标下降(DCD)、顺序舍入(SequentialRounding)、链式更新(ChainedUpdates)对算法进行改进。此处不做过多展开。


3. 广义可加模型


爱因斯坦说过:“凡事应尽可能简单,但不能过于简单。” 线性模型是简单而可解释的,然而,它的简单导致它无捕捉到数据中的非线性特征,因此,它的准确度往往不高。那么,应该如何修改,使其保留一部分的解释性,同时具有较高准确度呢?Yin Lou提出,对于线性函数,用来替换,用替换y。此处,f可以是一系列的平滑函数,如样条函数、局部回归、树模型等。


下面这张表总结了考虑的不同复杂度模型之间的差异。

 


线性模型和广义线性模型是最容易理解的,但通常也是最不准确的。相加模型和广义相加模型在许多数据集上比 GLMs 更准确,因为它们捕获了(单个)特征与响应之间的非线性关系,但保留了线性模型的大部分可理解性。复杂模型在许多数据集上更准确,因为它们同时考虑到了非线性和交互作用,但由于它们过于复杂,导致几乎不可能解释它们。


广义可加模型明确地将一个复杂函数分解为一维组件,即其形状函数本文中将考虑两类形状函数:回归样条和树或集成树。


  • d次回归样条的形式为:

  • 树或集成树:包括Binary Trees、Single Tree、Bagged Trees、Boosted Trees、Boosted Bagged Trees。


拟合样条归结为学习基函数的权重。学习权重可以归结为拟合线性模型,其中;线性模型的系数可以使用最小二乘法精确计算。为了控制平滑度,用一个 “摆动度” 实现惩罚:最小化 ,其中是平滑参数。的大值会导致为直线,而的小值允许样条紧密拟合数据。


使用标准梯度提升法,唯一的区别是:由于需要学习全部特征的形状函数,在提升的每次迭代中,必须依次循环遍历所有特征。算法伪代码如下:

 


在算法 1 中,首先将所有形状函数设置为零(第 1 行)。然后循环M次(第 2 行)并遍历所有特征(第 3 行),计算残差(第 4 行)。学习出一维函数来预测残差(第 5 行)并将其添加到形状函数(第 6 行)。


对于拟合GAM,反向拟合算法也是一种常见算法。该算法从所有形状函数的初始猜测开始(例如将它们都设置为零)。然后学习第一个形状函数,目标是使用训练集预测y。然后在残差上学习第二个形状函数,即使用训练集第三个形状函数在残差上进行训练,依此类推。在训练了n个形状函数之后,丢弃第一个形状函数并在其他n-1个形状函数的残差上重新训练它。


4. 基于原型层的模型解释


事后解释性方法的一个问题是,解释本身可以根据解释的模型而改变。例如,对于网络如何对单个对象进行分类,很容易创建多个相互冲突但令人信服的解释,但其中没有一个对对象进行正确的分类。与此同时,事后解释性方法经常创造出对人类没有意义的解释,为此需要额外的建模来确保解释是可解释的。


如果一个深度学习模型可以解释自身推理的过程,那么这个模型自然而然地能够对每个预测给出解释,并且这些解释会与网络实际的预测结果一致。不妨看看以下的网络架构:

 


该网络由三部分组成:自编码器、原型层、全连接层。


现有一个图像分类任务,有n个样本,K个类别。训练集为,对于每个 ,有。为了挖掘图像中的潜在特征,p维数据先经过encoder被转换为q维,即,接着,计算转换后的向量与q维的原型向量计算距离并将这些距离信息传递给全连接层和softmax层,最终输出属于每个类别的概率。由于原型向量与编码输入处于相同的潜在空间,因此可以借助解码器将原型向量映射回原始数据空间(如像素空间)进行可视化展示,此时的原型向量展示了每个类别最具代表性的形态。

这个网络的目标函数如下:

 


它由四部分组成:分类误差项、重建误差项和可解释性正则化项。同时,通过来进行调整各部分之间的比例,从而掌控模型精确性与可解释性之间的平衡。每个部分的计算公式如下:


  • 这是一个分类任务,分类误差项由交叉熵计算,公式如下:

 


  • 为了保证自动编码器能够准确地重构输入数据,通过计算原始输入与自动编码器重建输出之间的平方距离来衡量重建误差,公式如下:

 


  • 为了促使原型向量具有与训练数据相似的特征表示,使得解码后的原型图像能够与真实数据相似,每个原型向量在潜在空间中应尽可能接近至少一个训练示例,公式如下:


  • 为了确保原型向量能够覆盖整个训练数据空间,避免原型过于集中或无法代表某些数据部分,理应要求每个编码训练示例在潜在空间中尽可能接近一个原型向量,公式如下:

 


5. 结论


通过基于规则的模型解释、风险评分、广义可加模型和基于原型层的模型解释四个维度,解释了机器学习模型的内部规则结构,在后续的内容中,将事利用事后可解释性分析方法解释黑箱。


编辑:于腾凯
校对:林亦霖

作者简介

宋雨婷,苏州大学,未来科学与工程学院数据科学与大数据技术专业在读,对可解释性机器学习、计算机视觉等领域感兴趣。

数据派研究部介绍




数据派研究部成立于2017年初,以兴趣为核心划分多个组别,各组既遵循研究部整体的知识分享实践项目规划,又各具特色:


算法模型组:积极组队参加kaggle等比赛,原创手把手教系列文章;

调研分析组:通过专访等方式调研大数据的应用,探索数据产品之美;

系统平台组:追踪大数据&人工智能系统平台技术前沿,对话专家;

自然语言处理组:重于实践,积极参加比赛及策划各类文本分析项目;

制造业大数据组:秉工业强国之梦,产学研政结合,挖掘数据价值;

数据可视化组:将信息与艺术融合,探索数据之美,学用可视化讲故事;

网络爬虫组:爬取网络信息,配合其他各组开发创意项目。


点击文末“阅读原文” ,报名数据派研究部志愿者,总有一组适合你~



转载须知


如需转载,请在开篇显著位置注明作者和出处(转自:数据派THUID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

未经许可的转载以及改编者,我们将依法追究其法律责任。





关于我们

数据派THU作为数据科学类公众号,背靠清华大学大数据研究中心,分享前沿数据科学与大数据技术创新研究动态、持续传播数据科学知识,努力建设数据人才聚集平台、打造中国大数据最强集团军。




新浪微博:@数据派THU

微信视频号:数据派THU

今日头条:数据派THU

点击“阅读原文”拥抱组织


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/178156
 
154 次点击