本系列文章转载自关于如何解释机器学习的一些方法。本篇主要介绍了几种可视化数据及模型结果的方法。node
到如今你可能据说过种种奇闻轶事,好比机器学习算法经过利用大数据可以预测某位慈善家是否会捐款给基金会啦,预测一个在新生儿重症病房的婴儿是否会罹患败血症啦,或者预测一位消费者是否会点击一个广告啦,等等。甚至于,机器学习算法还能驾驶汽车,以及预测大选结果!… 呃,等等。它真的能吗?我相信它确定能够,可是,这些高调的论断应该在数据工做者(不管这些数据是不是『大』数据)以及机器学习工做者内心留下些很是困难的问题:我可否理解个人数据?我可否理解机器学习算法给予个人模型和结果?以及,我是否信任这些结果?不幸的是,模型的高复杂度赐予了机器学习算法无与伦比的预测能力,然而也让算法结果难以理解,甚至还可能难以采信。算法
尽管,咱们可能可以强制自变量-因变量关系函数是知足单调性约束的(译者注:单调性的意思是,递增地改变自变量,只会致使因变量要么一直递增,要么一直递减),机器学习算法一直有倾向产生非线性、非单调、非多项式形式、甚至非连续的函数,来拟合数据集中自变量和因变量之间的关系。(这种关系也能够描述为,基于自变量的不一样取值,因变量条件分布的变化)。这些函数能够根据新的数据点,对因变量进行预测——好比某位慈善家是否会捐款给基金会,一个在新生儿重症病房的婴儿是否会罹患败血症,一位消费者是否会点击一个广告,诸如此类。相反地,传统线性模型倾向于给出线性、单调、连续的函数用于估计这些关系。尽管它们不老是最准确的预测模型,线性模型的优雅、简单使得他们预测的结果易于解释。api
若是说,好的(数据)科学对可以理解、信任模型以及结果是一个通常性要求的话,那么在诸如银行、保险以及其余受监管的垂直行业中,模型的可解释性则是重要的法律规范。商业分析师、医生以及行业研究员必须理解以及信任他们本身的模型,以及模型给出的结果。基于这个缘由,线性模型几十年来都是应用预测模型中最易于上手的工具,哪怕是放弃几个百分点的精度。今天,大量机构和我的开始在预测模型任务中拥抱机器学习算法,可是『不易解释』仍然给机器学习算法的普遍应用带来了一些阻碍。浏览器
在这篇文章中,为了进行数据可视化和机器学习模型/结果解释,我在最经常使用的一些准确性度量、评估图表之外,提供了额外的几种方法。我诚挚建议用户根据本身的须要,对这些技巧进行一些混搭。只要有可能,在这篇文章中出现的每个技巧里,『可解释性』都被解构为几个更基本的方面:模型复杂程度,特征尺度,理解,信任 —— 接下来我首先就来简单对这几点作个介绍。网络
线性单调函数:由线性回归算法建立的函数多是最容易解释的一类模型了。这些模型被称为『线性的、单调的』,这意味着任何给定的自变量的变化(有时也多是自变量的组合,或者自变量的函数的变化),因变量都会以常数速率向同一个方向变更,变更的强度能够根据已知的系数表达出来。单调性也使得关于预测的直觉性推理甚至是自动化推理成为可能。举例来讲,若是一个贷款的借方拒绝了你的信用卡申请,他们可以告诉你,根据他们的『贷款违约几率模型』推断,你的信用分数、帐户余额以及信用历史与你对信用卡帐单的还款能力呈现单调相关。当这些解释条文被自动化生成的时候,它们每每被称做『缘由代码』。固然,线性单调的响应函数也可以提供变量重要性指标的计算。线性单调函数在机器学习的可解释性中有几种应用,在更下面的第一部分和第二部分讨论中,咱们讨论了利用线性、单调函数让机器学习变得更为可解释的不少种办法。数据结构
非线性单调函数:尽管大部分机器学习学到的响应函数都是非线性的,其中的一部分能够被约束为:对于任意给定的自变量,都能呈现单调性关系。咱们没法给出一个单一的系数来表征某个特定自变量的改变对响应函数带来的影响程度,不过非线性单调函数实际上可以作到『只朝着一个方向前进』(译者注:前进的速度有快有慢)。通常来讲,非线性单调的响应函数容许同时生成『缘由代码』以及自变量的『相对重要性指标』。非线性单调的响应函数在监管类的应用中,是具有高度可解释性的。app
(固然,机器学习可以凭借多元自适应回归样条方法,创建『线性非单调』的响应曲线。在此咱们不强调这些函数的缘由,是由于一方面,它们的预测精度低于非线性非单调的预测模型,另外一方面,它们跟线性单调的模型比起来又缺少解释性。)机器学习
非线性非单调函数:大部分机器学习算法创建了非线性、非单调的响应函数。给定任意一个自变量,响应函数可能以任何速率、向任何方向发生变更,所以这类函数最难以解释。通常来讲,惟一能够标准化的解释性指标就是变量的『相对重要性指标』。你可能须要组织一些本文将要展现的技术做为额外手段,来解释这些极端复杂的模型。函数
全局可解释性:某些下文展现的技巧,不管是对机器学习算法,算法获得的预测结果,仍是算法学习到的自变量-因变量关系而言,都可以提供全局的可解释性(好比条件几率模型)。全局可解释性能够根据训练出来的响应函数,帮助咱们理解全部的条件分布,不过全局可解释性通常都是『近似』的或者是『基于平均值』的。工具
局部可解释性:局部可解释性提升了对于小区域内条件分布的理解,好比输入值的聚类,聚类类别对应的预测值和分位点,以及聚类类别对应的输入值记录。由于小局部内的条件分布更有多是线性的、单调的,或者数据分布形式较好,所以局部可解释性要比全局可解释性更准确。
机器学习算法以及他们在训练过程当中获得的响应函数错综复杂,缺乏透明度。想要使用这些模型的人,具备最基本的情感需求:理解它们,信任它们——由于咱们要依赖它们帮忙作出重要决策。对于某些用户来讲,在教科书、论文中的技术性描述,已经为彻底理解这些机器学习模型提供了足够的洞见。对他们而言,交叉验证、错误率指标以及评估图表已经提供了足以采信一个模型的信息。不幸的是,对于不少应用实践者来讲,这些常见的定义与评估,并不足以提供对机器学习模型与结论的全然理解和信任。在此,咱们提到的技巧在标准化实践的基础上更进一步,以产生更大的理解和信任感。这些技巧要么提升了对算法原理,以及响应函数的洞察,要么对模型产生的结果给出了更详尽的信息。 对于机器学习算法,算法学习到的响应函数,以及模型预测值的稳定性/相关性,使用如下的技巧可让用户经过观测它们、确认它们来加强使用它们的信心。
这些技巧被组织成为三部分:第一部分涵盖了在训练和解释机器学习算法中,观察和理解数据的方法;第二部分介绍了在模型可解释性极端重要的场合下,整合线性模型和机器学习模型的技巧;第三部分描述了一些理解和验证那些极端复杂的预测模型的方法。
大部分真实的数据集都难以观察,由于它们有不少列变量,以及不少行数据。就像大多数的『视觉型』人类同样,在理解信息这方面我大量依赖个人『视觉』感受。对于我来讲,查看数据基本等价于了解数据。然而,我基本上只能理解视觉上的二维或者三维数据——最好是二维。此外,在人类看到不一样页面、屏幕上的信息时,一种被称做『变化盲视』的效应每每会干扰人类作出正确的推理分析。所以,若是一份数据集有大于两三个变量,或者超过一页/一屏幕数据行时,若是没有更先进的技巧而是只漫无止境的翻页的话,咱们确实难以知道数据中发生了什么。
固然,咱们有大量的方法对数据集进行可视化。接下来的强调的大部分技巧,是用于在二维空间中描述全部的数据,不只仅是数据集中的一两列(也就是仅同时描述一两个变量)。这在机器学习中很重要,由于大部分机器学习算法自动提取变量之间的高阶交互做用(意味着超过两三种变量在一块儿造成的效果)。传统单变量和双变量图表依然很重要,你仍是须要使用它们,但他们每每和传统线性模型的语境更相关;当众多变量之间存在任意高阶交互做用时,仅靠使用传统图表就想理解这类非线性模型,帮助就不大了。
图1. 使用图形符号表明操做系统和网页浏览器类型。
图形符号(Glyph)是一种用来表征数据的视觉符号。图形符号的颜色、材质以及排列形式,能够用来表达数据不一样属性(译者注:即变量)的值。在图1中,彩色的圆圈被定义为表达不一样种类的操做系统以及网络浏览器。使用特定方式对图形符号进行排列后,它们就能够表征数据集中的一行行数据了。
图2. 将图形符号进行组织,表达数据集中的多行。
关于如何使用图形符号表示一行行数据,图2在这里给出了一个例子。每4个符号造成的小组既能够表示特定数据集中的某一行数据,也能够表示其中的不少行的汇总数据。图形中被突出的『Windows+IE浏览器』这种组合在数据集中十分常见(用蓝色,茶叶色,以及绿色表示),同理『OS X+Safari浏览器』这种组合也很多(上面是两个灰色点)。在数据集中,这两种组合分别构成了两大类数据。同时咱们能够观察到,通常来讲,操做系统版本有比浏览器版本更旧的倾向,以及,使用Windows的用户更倾向用新版的操做系统,使用Safari的用户更倾向于用新版的浏览器,而Linux用户以及网络爬虫机器人则倾向于使用旧版的操做系统和旧版的浏览器。表明机器人的红点在视觉上颇有冲击力(除非您是红绿色盲)。为那些数据离群点(Outlier)选择鲜明的颜色和独特的排列,在图形符号表达法中,是标注重要数据或异常数据值的好办法。
图3. 来自一家大型金融公司,用于表征贷款业务的相关图
相关图是体现数据集中数据关系(相关性)的二维表达方法。尽管在图3中,过多的细节其实是无关紧要的,这张图还有必定改进空间,然而就相关图自己而言,这一方法仍然是观察、理解各变量相关性的有力工具。利用这种技巧,哪怕是上千个变量的数据集,也能画在一张二维图形上。
在图3中,图的结点(node)表示某个贷款数据集中的变量,图中的连边(edge)的权重,也就是线条的粗细,是由两两之间皮尔逊相关系数的绝对值来定义的。为了简单起见,低于特定某个阈值的绝对值没有画出来。结点的大小,由结点向外链接的数目(即结点的度,degree)决定。结点的颜色是图的社群聚类算法给出的。结点所在的位置是经过力导向图生成的。相关图使咱们可以观察到相关变量造成的大组,识别出孤立的非相关变量,发现或者确认重要的相关性信息以引入机器学习模型。以上这一切,二维图形足以搞定。
在如图3所展现的数据集中,若要创建以其中某个变量为目标的有监督模型,咱们但愿使用变量选择的技巧,从浅绿、蓝色、紫色的大组里挑选一到两个变量出来;咱们可以预计到,跟目标变量连线较粗的变量在模型中会较为重要,以及『CHANNEL_R』这种无连线的变量在模型中重要性较低。在图3中也体现出了一些常识性的重要关系,好比『FIRST_TIME_HOMEBUYER_FLAG_N』(是否为首次购房者)以及『ORIGINAL_INTEREST_RATE』(原始基准利率),这种关系应该在一个可靠的模型中有所体现。
图4. 基于著名的784维的MNIST手写数据集制做的二维投影图。左图使用了主成分分析,右图使用了堆叠式消噪自编码机
把来自数据集中原始高维空间的行向量映射到更容易观察的低维空间(理想状况是2到3维),此类方法可谓多种多样。流行的技巧包括:
主成分分析(Principal Component Analysis,PCA)
多维缩放(Multidimensional Scaling,MDS)
t分布随机近邻嵌入(t-distributed Stochastic Neighbor Embedding,t-SNE)
自编码机神经网络(Autoencoder Networks)
每一种方法都有它的优势和弱势,但他们有一个共同的主旨,就是把数据的行转化到有意义的低维空间上。这些数据集包括图像、文本,甚至商业数据,它们每每具备不少难以画在一张图上的变量。但这些经过找到把高维数据有效映射到低维表达的投影方法,让古老而可靠的散点图迎来了第二春。一个散点图所体现的高质量映射,应该反映出数据集中各方面的重要结构,好比数据点造成的聚类,层次结构,稀疏性,以及离群点等。
在图4中,著名的MNIST数据集(数字的手写数据集)被两种算法从原始的784维映射到了2维上:一种是主成分分析,另外一种是自编码机神经网络。糙快猛的主成分分析可以把标注为0和1的这两类数据区分的很好,这两种数字对应的手写图像被投影在两类较为密集的点簇中,可是其余数字对应的类广泛地发生了覆盖。在更精巧(然而计算上也更费时)的自编码机映射中,每一个类自成一簇,同时长的像的数字在降维后的二维空间上也比较接近。这种自编码机投影抓住了预期中的聚簇结构以及聚簇之间的相对远近关系。有意思的是,这两张图都能识别出一些离群点。
投影法在用于复查机器学习建模结果时,能提供必定程度上的额外『可信性』。好比说,若是在2维投影中可以观测到训练集/验证集里存在类别、层级信息和聚簇形态的信息,咱们也许能够确认一个机器学习算法是否正确的把它们识别出来。其次,类似的点会投影到相近的位置,不类似的点会投影到较远的位置,这些都是能够加以确认的。咱们考察一下用于作市场细分的分类或者聚类的模型:咱们预计机器学习模型会把老年有钱客户和年轻且不那么富裕的客户放在不一样的组里,而且它们在通过映射后,分别属于彻底分离的两大组稠密的点簇。哪怕训练集、验证集中存在一些扰动,这种结果也应该是稳定的,并且对有扰动/无扰动两组样本分别进行映射,能够考察模型的稳定性,或者考察模型是否表现出潜在的随时间变化的模式。
图5. 在著名的加州房产数据集上创建GBDT集成模型后获得的一维偏相关图
当咱们只关心一两个自变量取值发生变化,而其余自变量都处于平均水准对机器学习模型响应函数所形成的影响时,偏相关图能够为咱们展示这种关系。在咱们感兴趣的自变量存在较为复杂的交互做用时,用双自变量偏相关图进行可视化显得尤其有效。当存在单调性约束时,偏相关图能够用于确认响应函数对于自变量的单调性;在极端复杂的模型里,它也能够用于观察非线性性、非单调性、二阶交叉效应。若是它显示的二元变量关系与领域知识相符,或者它随时间迁移呈现出可预计的变化模式或者稳定性,或者它对输入数据的轻微扰动呈现不敏感,此时咱们对模型的信心都会有所提升。
偏相关图对于数据集的不一样数据行而言,是全局性的;但对数据的不一样列,也就是不一样自变量而言,是局部性的。仅当咱们须要考察1-2个自变量和因变量的关系时咱们才能使用这种图。一种较新,不太为人所知的偏相关图的改进版本,称为『个体条件指望图』(Individual conditional expectation,ICE),它使用相似偏相关图的思想,可以给出对数据更局部性的解释。在多个自变量存在较强的相关关系时,ICE图显得尤为好用。
图6. 一个来自残差分析应用的截图
『残差』,是指数据集每一行中,因变量的测量值和预测值之差。通常来讲,在拟合得不错的模型中,残差应该呈现出随机分布,由于一个好的模型,会描述数据集中除了随机偏差之外的绝大部分重要现象。绘制『残差-预测值』这种评估手段,是一种用二维图形检查模型结果的好办法,饱经时间考验。若是在残差图中观测到了很强的相关性模式,这不啻为一种死亡讯息:要么你的数据有问题,要么你的模型有问题——要么二者都有问题!反之,若是模型产生了随机分布的残差,那这就是一种强烈的信号:你的模型拟合较好,可靠,可信;若是其余拟合指标的值也合理(好比,R^2,AUC等指标),那就更加如此了。
在图6中,方框指出了残差中具备很强线性模式的部分。这里不只有传统的『预测值-残差图』,也有特定自变量跟残差造成的二维散点图。把残差跟不一样自变量画在一块儿,能够提供更细粒度的信息,以便于推理出到底什么缘由致使了非随机模式的产生。残差图对识别离群点也有帮助,图6就指出了离群点。不少机器学习算法都使徒最小化偏差平方和,这些高残差的点对大部分模型都会带来较强的影响,经过人工分析判断这些离群点的真实性能够较大的提升模型精度。
如今咱们已经展示了几种数据可视化的技巧,咱们经过提几个简单问题,来回顾如下几个大概念:尺度,复杂性,对数据的理解,以及模型的可信性。咱们也会对后面的章节中出现的技术提出相同的问题。
都有。大部分数据可视化技术,要么用于对整个数据集进行粗糙的观测,要么用于对局部数据提供细粒度检查。理想状况家,高级可视化工具箱可以让用户容易地缩放图形或者向下钻取数据。如若否则,用户还能够本身用不一样尺度对数据集的多个局部进行可视化。
数据可视化能够帮咱们解释各类复杂程度的函数。
对大部分人而言,数据结构(聚簇,层级结构,稀疏性,离群点)以及数据关系(相关性)的可视化表达比单纯浏览一行行数据并观察变量的取值要容易理解。
对数据集中呈现的结构和相关性进行观察,会让它们易于理解。一个准确的机器学习模型给出的预测,应当可以反映出数据集中所体现的结构和相关性。要明确一个模型给出的预测是否可信,对这些结构和相关性进行理解是首当其冲的。
在特定状况下,数据可视化能展示敏感性分析的结果,这种分析是另外一种提升机器学习结果可信度的方法。通常来讲,为了检查你的线上应用可否经过稳定性测试或者极端状况测试,会经过使用数据可视化技术,展示数据和模型随时间的变化,或者展示故意篡改数据后的结果。有时这一技术自己即被认为是一种敏感性分析。