可解释性和随机森林那些事儿
我们如何以及为什么可以从随机森林分类器中获得特征重要性?
机器学习的出现是因为人类不能总是很好地解释自己,尤其是对机器解释。很长一段时间,机器只能执行精确的一步接一步的指令,而且通常简单的人工任务对我们来说太自然了,无法显式将它们作为算法明确地写下来。举个例子来说一下,我没有办法向电脑解释清楚我是如何确切的认识到某物是一只猫的。
孩子,你需要学习很多东西。
我知道一只猫通常有两只耳朵,四条腿,一个圆形的脸形,以及独特的猫眼,但这只是揭开了第一层解释。在此基础上,我必须在算法上解释前一句中的每个形容词和名词的含义:二、耳、圆等,以及其扩展细节,例如猫的眼睛究竟是什么样子的。从理论上讲,我实际上可能会继续用一个一个的术语来解释这个术语 - 虽然这可能会花费我很多的时间。
我们人类相当聪明地决定,数学学习过程可能比通过算法分解每个决策过程更容易,这就是我们一开始机器学习的方法。然而,我们使用的学习模型并不总是对应于任何类型的我们人类固有的“自然”的学习方法,而建模学习并不能解决我们与计算机的基本通信问题。机器学习并没有摆脱解释数据关系的困难,这导致在构建和分析学习模型时,可解释性和准确性之间存在冲突。
可解释性与准确性之间的冲突
在使用机器学习模型时,数据科学中只有两个目标:
- 应用程序,我们使用训练有素的模型执行任务,理想情况下尽可能准确有效。
- 解释,我们使用训练的模型通过特征和响应变量之间的学习关系来获得对数据的洞察。
正如我们刚才所讨论的那样,我们人类几乎不知道我们如何真正去识别东西的,但比起机器,我们确实很擅长它。换句话说,我们大脑的内在逻辑是准确的,非常适合应用,但它不是很容易理解。因此,通常最精确的机器学习方法是最不易解释的,这不应该让人感到意外。
RoboCat:第一次接触
所谓的黑盒模型,如神经网络,给我们提供了很少的决策过程信息;他们学习的函数的代数复杂性往往会失去与原始特征变量集相关的任何含义。另一方面,有助于解释性的模型(如线性回归和决策树)往往在准确性部门中不足,因为它们通常无法捕获数据集中的任何细微差别或复杂关系。我们可以概括地总结这种关系如下:
对于足够复杂的数据,决策算法的可解释性与其应用的准确性之间存在着一种自然的权衡。就像是我们不太擅长对于高阶数值关系的内在理解一样,计算机仿佛对于通过用腿和耳朵来辨认猫天生就没有亲和力。我们无法清晰有意义地解释神经网络的复杂决策边界,也无法向计算机解释猫是什么,这可能是同一枚硬币的两面。
寻找平衡
我们的史前穴居人的大脑似乎非常喜欢解释线性关系/决策边界。线性回归是一种高度可解释的算法,毫无疑问:如果x增加1,y增加m,我们都可以回家。然而,行是简单的和高度偏见的,因此它们通常不会产生很好的学习算法。当然,我们可以调整我们对线性的定义,并扩展我们的基数以包括多项式、指数和其他任何其他项,但在某些时候必须支付债务,并且我们在参数中失去了这种自然意义感。
Barney和Fred对线性回归很感兴趣
另一个易于理解但基本上弱的分类器是决策树:通过贪婪地将特征空间分割成矩形,我们最终得到了一个描述决策过程背后逻辑的漂亮图表,并且除了最基本的之外,还有一个相当无用的模型关系。但是,回想一下树模型非常适合集成方法,而随机森林是一种特别强大的方法,可以将大量单独的弱树聚合成一个强大的预测模型。
随机森林和特征重要性
了解随机森林能否违背这种可解释性 - 准确性权衡,或者至少将其推向极限,这似乎令人惊讶。毕竟,随机森林的决策过程中存在一个固有的随机因素,并且有如此多的树木,任何固有的含义都可能在树林中迷失。然而,与树木协同工作以减少预测误差的方式完全相同,它们协同工作以准确地表示特征重要性。为了理解它们是如何这样做的,首先需要研究一种在单个树中解释特征重要性的自然方法。
如果知道随机森林能够克服这种解释精度之间的权衡,或者至少将其推到极限,可能会让人感到惊讶。毕竟,在随机森林的决策过程中有一个固有的随机因素,有这么多树,任何固有的含义都可能在森林中丢失。然而,就像这些树一起工作以减少预测错误一样,它们一起工作以准确地表示特性的重要性。要理解它们是如何做到这一点的,首先有必要研究一种自然的方法来解释单个树中的特性重要性。
单树中的特征重要性
回想一下,单个树的目的是在分割特征空间时以局部最优方式减少误差。分类树使用杂质度量来评估当前类别的分离,而回归树使用残差平方误差。我们将使用分类树的思想来使我们的可视化效果更好,但是在交换了错误函数之后,回归情况是相同的。
为了减少决策树的分类误差,减少杂质(或熵)是迭代分割区域的最快、最稳定的方法。衡量一个特征在该决策过程中所产生影响的一种自然方法是查看该特征从系统中移除的熵量。即,通过对该特征的决策所获得的信息量或准确度。仅此功能。下面的可视化演示了此过程,因为我们拆分了特征空间并构建了决策树。我们从初始熵值(D)开始,我们计算每个子区域的熵值,然后对树中每个特征变量的熵值变化进行求和。
、
我们从D = 1.31开始并分割特征空间,直到我们达到零熵。减少的1.011是由于对y作出的决定,而x仅负责0.299的减少。
我以前说过,不过这里会重新表达一次:决策树是弱分类器。训练数据的微小变化可能意味着我们最终会得到一个完全不同的树,因此对我们的特征重要性做出了不同的估计。考虑在我们的可视化中原始数据的这种轻微改动:
现在,由x引起的熵减少为1.011,而由y引起的减少为0.299。变量的重要性已经切换!
减少许多树的方差
如果这种计算特征重要性的方法是如此不稳定,那对我们来说并没有多大用处。问题在于测量的方差太高,这就是随机森林的用武之地:回想一下,随机森林的最终工作方式是首先通过基本上消除它并分裂的方式减少对个体树所具有的局部最优策略的偏差,然后通过聚合树来减少模型的整体方差。
这种方差的减少稳定了模型,减少了对训练数据选择的偏见,并导致更少变量和更准确的预测。如果就像我们在预测中做的那样,通过获取归因于每个特征变量的熵或准确度变化的平均值,将我们对随机森林中树木的特征重要性的度量值进行汇总,我们就会得到完全相同的效果。
直观地,对随机特征进行拆分使得模型中的每个特征都有机会在树的各个层面的所有可能点上显示其决策权,并且聚合减少了最终结果的可变性。基本上,与随机森林提高最终预测的准确性的方式相同,它提高了这种特征重要性度量的准确性。如果你不相信我,这里有一小部分证据:
A,B,C都是i.i.d
当将连续变量与分类变量进行对比时,这种方法存在一些明确的问题;连续变量有更多的“空间”来分割,因此可以在不重要的情况下在分类变量之上得到一个。
这种方法也没有真正违反可解释性 - 准确性权衡的想法,因为它只是真实地告诉我们变量如何相互叠加,即它没有告诉我们如果我们增加或减少我们的特征,我们的决定会发生什么变化(如旧的线性回归)。但是,这很有用,我从来没有说过随机森林是完美的。
无论如何,现在你知道你的scikit-learn RandomForestClassifier上的feature_importances_属性的强大功能,但是你仍然无法向计算机解释猫是什么。