第 8 章 全局模型无关方法

全局方法描述了机器学习模型的一种惯例做法。与全局方法相对应的是局部方法。全局方法通常表示为基于数据分布的预期值。例如,部分依赖图是一个特征效应图,是所有其他特征都被边缘化时的预期预测。由于全局解释方法描述了平均行为,因此当建模者想要了解数据中的一般机制或调试模型时,它们特别有用。

在本书中,你将了解以下与模型无关的全局解​​释技术:

  • 部分依赖图是一种特征效应方法。
  • 累积局部效应图是另一种在特征依赖时起作用的特征效应方法。
  • 特征交互(H-统计量)量化了预测在多大程度上是特征联合效应的结果。
  • 函数分解是可解释性的核心思想,也是一种将复杂的预测函数分解为更小的部分的技术。
  • 置换特征重要性衡量特征的重要性,作为置换特征时损失的增加。
  • 全局代理模型用更简单的模型代替原始模型进行解释。
  • 原型和批评是分布的代表性数据点,可用于增强可解释性。

8.1 部分依赖图

部分依赖图(简称PDP或PD图)显示了一个或两个特征对机器学习模型的预测结果的边际效应(J. H. Friedman 20011)。部分依赖图可以显示目标和特征之间的关系是线性的、单调的还是更复杂的。例如,当应用于线性回归模型时,部分依赖图始终呈现线性关系。

回归的部分依赖函数定义为:

f ^ S ( x S ) = E X C [ f ^ ( x S , X C ) ] = ∫ f ^ ( x S , X C ) d P ( X C ) \hat{f}_S(x_S)=E_{X_C}\left[\hat{f}(x_S,X_C)\right]=\int\hat{f}(x_S,X_C)d\mathbb{P}(X_C) f^​S​(xS​)=EXC​​[f^​(xS​,XC​)]=∫f^​(xS​,XC​)dP(XC​)

x S x_S xS​ 是绘制部分依赖函数的特征, X C X_C XC​ 是机器学习模型 f ^ \hat{f} f^​ 使用的其他特征,它通常被看作随机变量。通常,集合 S S S 中只有一个或两个特征。 S S S中的 ( s ) (s) (s)是我们想知道对预测产生影响的那些特征。特征向量 x S x_S xS​ 和 x C x_C xC​
组合构成总特征空间 x x x 。部分依赖通过将机器学习模型的输出边缘化到集合 C C C 中的特征分布来工作,因此该函数显示了我们感兴趣的集合 S S S 中的特征与预测结果之间的关系。通过边缘化其他特征,我们得到一个仅依赖于 S S S中的特征的函数,包括与其他特征的交互。

偏函数 f ^ S \hat{f}_S f^​S​是通过计算训练数据中的平均值来估计的,也称为蒙特卡洛方法:

f ^ S ( x S ) = 1 n ∑ i = 1 n f ^ ( x S , x C ( i ) ) \hat{f}_S(x_S)=\frac{1}{n}\sum_{i=1}^n\hat{f}(x_S,x^{(i)}_{C}) f^​S​(xS​)=n1​i=1∑n​f^​(xS​,xC(i)​)

对于集合 S S S 中给定的特征值 ( s ) (s) (s) ,偏函数告诉我们预测的边际效应平均值有多大。在这个公式中,是数据集中我们不感兴趣的特征的实际特征值, n n n 是数据集中的实例数。 P D P PDP PDP 的一个假设是 C C C 中的特征与 S S S 中的特征不相关。如果违反此假设,则为部分依赖图计算的平均值将包括靠谱甚至不可能的数据点(请参阅对缺点的描述)

对于机器学习模型输出概率的分类,部分依赖图显示的是集合 S S S 中某些类被赋予了不同特征值 ( s ) (s) (s)的概率。处理多个类的一种简单方法是为每个类绘制一条线或一副图。

部分依赖图是一种全局方法:该方法考虑到了所有实例,描述了特征与预测结果之间全局关系。

分类特征

到目前为止,我们只考虑了数值特征。对于分类特征,部分依赖很容易计算。对于每个类别,我们通过强制所有数据实例具有相同类别来获得 P D P PDP PDP 估计。例如,如果我们查看自行车租赁数据集并对季节的部分依赖图感兴趣,我们会得到四个数字,每个季节一个。为了计算 “ s u m m e r ” “summer” “summer” 的值,我们将所有数据实例的季节替换为 “ s u m m e r ” “summer” “summer” 并对预测进行平均。

8.1.1 基于 PDP 的特征重要性

G r e e n w e l l Greenwell Greenwell 2等人在2018年提出了一种简单的基于部分依赖特征重要性度量方法。根本动因是平滑的 P D P PDP PDP 表明特征不重要, P D P PDP PDP 变化越大,特征越重要。对于数值特征,重要性定义为每个唯一特征值与平均曲线的偏差:

I ( x S ) = 1 K − 1 ∑ k = 1 K ( f ^ S ( x S ( k ) ) − 1 K ∑ k = 1 K f ^ S ( x S ( k ) ) ) 2 I(x_S) = \sqrt{\frac{1}{K-1}\sum_{k=1}^K(\hat{f}_S(x^{(k)}_S) - \frac{1}{K}\sum_{k=1}^K \hat{f}_S({x^{(k)}_S))^2}} I(xS​)=K−11​k=1∑K​(f^​S​(xS(k)​)−K1​k=1∑K​f^​S​(xS(k)​))2 ​

这里要注意的是, x S ( k ) x^{(k)}_S xS(k)​ 是 X S X_S XS​ 特征 K 的唯一值。对于分类特征公式如下:

I ( x S ) = ( m a x k ( f ^ S ( x S ( k ) ) ) − m i n k ( f ^ S ( x S ( k ) ) ) ) / 4 I(x_S) = (max_k(\hat{f}_S(x^{(k)}_S)) - min_k(\hat{f}_S(x^{(k)}_S)))/4 I(xS​)=(maxk​(f^​S​(xS(k)​))−mink​(f^​S​(xS(k)​)))/4

这是唯一类别的 P D P PDP PDP 值范围除以四。这种计算偏差的奇怪方法称为范围规则。当你只知道范围时,它有助于粗略估计偏差。分母 4 4 4 来自标准正态分布:在正态分布中, 95 % 95\% 95% 的数据是均值附近的负二和正二标准差。因此,范围除以 4 4 4给出了一个粗略的估计,可能低估了实际方差。

这种基于 P D P PDP PDP 的特征重要性应该谨慎解释。它仅捕获特征的主要影响并忽略可能的特征交互。基于置换特征重要性等其他方法,一个特征可能非常重要,但 P D P PDP PDP 可能是平滑的的,因为该特征主要通过与其他特征的交互来影响预测。此度量的另一个缺点是它是在唯一值上定义的。仅具有一个实例的唯一特征值在重要性计算中与具有多个实例的值具有相同的权重。

8.1.2 示例

在实践中,特征集 S S S 通常只包含一个特征或最多两个,因为一个特征产生 2D 图,而两个特征产生 3D 图。除此之外的一切都非常棘手。即使是 2D 纸或显示屏上的 3D 也已经具有挑战性。

让我们回到回归示例,在该示例中,我们预测给定日期将租用的自行车数量。首先我们拟合一个机器学习模型,然后我们分析部分依赖关系。在这种情况下,我们拟合了一个随机森林来预测自行车的出租数量,并使用部分依赖图来可视化模型学习到的关系。下图显示了天气特征对预测自行车出租数量的影响。


图 8.1:自行车数量预测模型以及温度、湿度和风速的 PDP。最大的差异体现在温度上。天气越热,租用的自行车就越多。这种趋势上升到 20 ∘ C ^{\circ}C ∘C,然后在 30 ∘ C ^{\circ}C ∘C处变平并略有下降。x 轴上的标记表示数据分布。

对于温暖但不太热的天气,该模型平均预测大量租用自行车。当湿度超过 60 % 60\% 60% 时,潜在的骑自行车的人越来越难以租用自行车。此外,风越大,喜欢骑自行车的人就越少,这是有道理的。有趣的是,当风速从 25 增加到 35 km/h 时,预测的自行车租赁数量并没有下降,但没有太多的训练数据,因此机器学习模型可能无法对这个范围进行有意义的预测。至少直观地说,我预计自行车的数量会随着风速的增加而减少,尤其是在风速非常高的时候。

为了说明具有分类特征的部分依赖图,我们检查了季节特征对预测的自行车租赁的影响。


图 8.2:自行车数量预测模型和季节的 PDP。出乎意料的是,所有季节都对模型的预测产生了类似的影响,只是对于冬季,模型预测的自行车租赁量会减少。

我们还计算了宫颈癌分类的部分依赖性。这次我们拟合了一个随机森林,根据风险因素预测女性是否可能患宫颈癌。我们计算并可视化癌症概率对随机森林不同特征的部分依赖性:


图 8.3:基于年龄和使用激素避孕药年份的癌症概率 PDP。对于年龄,PDP 显示概率在 40 岁之前较低,之后会增加。使用激素避孕药的时间越长,预测的癌症风险就越高,尤其是在 10 年后。对于这两个特征,没有多少具有大值的数据点可用,因此这些区域的 PD 估计值不太可靠。

我们还可以一次可视化两个特征的部分依赖关系:

图 8.4:癌症概率的 PDP 与年龄和怀孕次数的相互作用。该图显示了 45 岁时患癌症的概率增加。对于 25 岁以下的女性,与怀孕 0 次或超过 2 次的女性相比,怀孕 1 次或 2 次的女性预测癌症风险较低。但是在得出结论时要小心:这可能只是一种相关性,而不是因果关系!

8.1.3 优点

部分依赖图的计算很直观:如果我们强制所有数据点假设该特征值,则特定特征值处的部分依赖函数表示平均预测。以我的经验,外行人通常很快就能理解 PDP 的概念。

如果你为其计算 PDP 的特征与其他特征不相关,则 PDP 完美地代表了该特征如何平均影响预测。在不相关的情况下,解释很清楚:部分依赖图显示了当第 j 个特征发生变化时,数据集中的平均预测如何变化。当特征相关时,它会更加复杂,另请参阅缺点。

部分依赖图很容易实现。

部分相关图的计算具有因果解释。我们干预一个特征并测量预测的变化。在此过程中,我们分析了特征和预测之间的因果关系。3这种关系是模型的因果关系——因为我们明确地将结果建模为特征的函数——但不一定适用于现实世界!

8.1.4 缺点

部分依赖函数中实际的最大特征数是两个。这不是 PDP 的错,而是二维表示(纸或显示屏)的错,也是我们无法想象超过三个维度的错。

一些 PD 图没有显示特征分布。省略分布可能会产生误导,因为你可能会过度解释几乎没有数据的区域。这个问题很容易通过显示地毯(x 轴上数据点的指标)或直方图来解决。

独立性假设是 PD 图的最大问题。假设计算部分依赖的特征与其他特征不相关。例如,假设你想根据一个人的体重和身高来预测一个人的步行速度。对于其中一个特征的部分依赖,例如身高,我们假设其他特征(体重)与身高无关,这显然是一个错误的假设。为了计算某个高度(例如 200 厘米)的 PDP,我们对体重的边缘分布进行平均,这可能包括低于 50 公斤的体重,这对于 2 米的人来说是不现实的。换句话说:当特征相关时,我们在实际概率非常低的特征分布区域创建新数据点(例如,不太可能有人身高 2 米但体重小于 50 公斤)。这个问题的一个解决方案是使用条件分布而不是边际分布的累积局部效应图或短 ALE 图。

8.1.5 软件和替代品

有许多实现 PDP 的 R 包。我将iml包用于示例,但也有pdpor DALEX。在 Python 中,部分依赖图是内置的scikit-learn,你可以使用PDPBox.

本书中介绍的 PDP 的替代方案是ALE 图和ICE 曲线。

8.2 累积局部效应(ALE)图

累积的局部效应34描述了特征如何平均影响机器学习模型的预测。ALE 图是部分依赖图 (PDP) 的更快且无偏的替代方案。

我建议先阅读关于部分依赖图的章节,因为它们更容易理解,并且两种方法都有相同的目标:两者都描述了一个特征如何平均影响预测。在下一节中,我想说服你,当特征相关时,部分依赖图会出现严重问题。

8.2.1 动因和直觉

如果机器学习模型的特征是相关的,则部分依赖图不可信。与其他特征强相关的特征的部分依赖图的计算涉及对现实中不太可能的人工数据实例的预测进行平均。这会极大地偏差估计的特征效果。想象一下计算一个机器学习模型的部分依赖图,该模型根据房间的数量和居住区域的大小来预测房子的价值。我们对居住面积对预测值的影响感兴趣。提醒一下,部分依赖图的方法是:1.选择特征。2.定义网格。3.每个网格值:a.用网格值替换特征和;b.平均预测。4.绘制曲线。用于计算 PDP 的第一个网格值——比如 30 m 2 30m^2 30m2 – 我们将所有实例的起居区替换为 30 m 2 30m^2 30m2,即使对于有 10 个房间的房屋也是如此。在我看来,这是一座非常不寻常的房子。部分依赖图在特征效应估计中包含了这些不切实际的房子,并假装一切都很好。下图说明了两个相关的特征,以及部分依赖图方法是如何对不太可能的实例的预测进行平均的。


图 8.5:强相关特征 x1 和 x2。为了计算 x1 在 0.75 处的特征效应,PDP 将所有实例的 x1 替换为 0.75,错误地假设 x2 在 x1 = 0.75 处的分布与 x2 的边缘分布(垂直线)相同。这导致 x1 和 x2 的不太可能的组合(例如 x1=0.75 处的 x2=0.2),PDP 将其用于计算平均效果。

我们可以做些什么来获得尊重特征相关性的特征效果估计?我们可以对特征的条件分布进行平均,这意味着在 x1 的网格值处,我们对具有相似 x1 值的实例的预测进行平均。使用条件分布计算特征效应的解决方案称为边际图或 M-图(名称混淆,因为它们基于条件分布,而不是边际分布)。等等,我不是答应过你谈论 ALE 情节吗?M-Plots 不是我们正在寻找的解决方案。为什么 M-Plots 不能解决我们的问题?如果我们对大约 30 m 2的所有房屋的预测进行平均,我们估计总和居住面积和房间数量的影响,因为它们的相关性。假设居住面积对房子的预测价值没有影响,只有房间的数量有影响。M-Plot 仍会显示居住区域的大小会增加预测值,因为房间数量会随着居住区域的增加而增加。下图显示了 M-Plot 如何工作的两个相关特征。


图 8.6:强相关特征 x1 和 x2。M-Plots 对条件分布进行平均。这里 x2 在 x1 = 0.75 处的条件分布。对局部预测进行平均会导致两个特征的效果混合。

M-Plots 避免对不太可能的数据实例进行平均预测,但它们将特征的影响与所有相关特征的影响混合在一起。ALE 图通过计算(同样基于特征的条件分布)预测的差异而不是平均值来解决这个问题。对于 30 m 2 30m^2 30m2 居住面积的影响,ALE方法使用所有大约 30 m 2 30m^2 30m2 的房屋,得到假设这些房屋为 31 m 2 31m^2 31m2 的模型预测减去假设为 29 m 2 29m^2 29m2 的预测. 这给了我们生活区域的纯粹效果,并且没有将效果与相关特征的效果混合在一起。使用差异会阻止其他函数的影响。下图直观地展示了如何计算 A L E ALE ALE 图。


图 8.7:计算特征 x 1 x1 x1 的 A L E ALE ALE,与 x 2 x2 x2 相关。首先,我们将特征划分为区间(垂直线)。对于区间内的数据实例(点),我们计算将特征替换为区间上限和下限(水平线)时的预测差异。这些差异稍后会累积并居中,从而产生 ALE 曲线。

总结每种类型的图(PDP、M、ALE)如何计算特征在特定网格值 v v v 处的影响:

部分依赖图:“让我向你展示当每个数据实例具有值 v 时模型平均预测的内容对于该函数。我忽略了值 v 是否对所有数据实例都有意义。”

M-Plots:“让我向你展示模型对于该特征的值接近 v 的数据实例的平均预测。效果可能是由于该特征,也可能是由于相关特征。”

ALE 绘图:“让我向你展示模型预测如何在该窗口中数据实例的 v 周围特征的小“窗口”中变化。

8.2.2 理论

PD、M 和 ALE 图在数学上有何不同?这三种方法的共同点是它们将复杂的预测函数 f 简化为仅依赖于一个(或两个)特征的函数。这三种方法都通过对其他特征的影响进行平均来减少函数,但它们的不同之处在于是否计算预测的平均值或预测的差异,以及是否在边际分布或条件分布上进行平均。

部分依赖图对边际分布的预测进行平均。

f ^ S , P D P ( x ) = E X C [ f ^ ( x S , X C ) ] = ∫ X C f ^ ( x S , X C ) d P ( X C ) \begin{align*} \hat{f}_{S,PDP}(x)&=E_{X_C}\left[\hat{f}(x_S,X_C)\right] \\ & = \int_{X_C}\hat{f}(x_S,X_C)d\mathbb{P}(X_C) \end{align*} f^​S,PDP​(x)​=EXC​​[f^​(xS​,XC​)]=∫XC​​f^​(xS​,XC​)dP(XC​)​

这是预测函数 f f f 的值,特征值$(s) 特征向量 x S x_S xS​ , 平均所有特征向量 X C X_C XC​(这里被视为随机变量)。取平均值意味着计算集合 C C C 中特征的边际期望 E E E,它是由概率分布加权的预测的积分。听起来很花哨,但要计算边际分布的期望值,我们只需获取所有数据实例,强制它们对集合 S S S 中的特征具有一定的网格值,然后对这个操纵数据集的预测进行平均。这个过程确保我们对特征的边缘分布进行平均。

M-plots 对条件分布的预测进行平均。

f ^ S , M ( x S ) = E X C ∣ X S [ f ^ ( X S , X C ) ∣ X S = x s ] = ∫ X C f ^ ( x S , X C ) d P ( X C ∣ X S = x S ) \begin{align*}\hat{f}_{S,M}(x_S)&=E_{X_C|X_S}\left[\hat{f}(X_S,X_C)|X_S=x_s\right]\\&=\int_{X_C}\hat{f}(x_S, X_C)d\mathbb{P}(X_C|X_S = x_S)\end{align*} f^​S,M​(xS​)​=EXC​∣XS​​[f^​(XS​,XC​)∣XS​=xs​]=∫XC​​f^​(xS​,XC​)dP(XC​∣XS​=xS​)​

与 P D P PDP PDP 相比,唯一的变化是我们根据感兴趣特征的每个网格值对预测进行平均,而不是假设每个网格值的边际分布。在实践中,这意味着我们必须定义一个邻域,例如为了计算 30 m 2 30m^2 30m2 对预测房屋价值的影响,我们可以对 28 m 2 28m^2 28m2 到 32 m 2 32m^2 32m2 之间的所有房屋的预测进行平均。

A L E ALE ALE 图对预测的变化进行平均,并将它们累积在网格上(稍后将详细介绍计算过程)。
f ^ S , A L E ( x S ) = ∫ z 0 , S x S E X C ∣ X S = x S [ f ^ S ( X s , X c ) ∣ X S = z S ] d z S − constant = ∫ z 0 , S x S ( ∫ x C f ^ S ( z s , X c ) d P ( X C ∣ X S = z S ) d ) d z S − constant \begin{align*} \hat{f}_{S,ALE}(x_S)=&\int_{z_{0,S}}^{x_S}E_{X_C|X_S = x_S}\left[\hat{f}^S(X_s,X_c)|X_S=z_S\right]dz_S-\text{constant}\\ = & \int_{z_{0,S}}^{x_S}(\int_{x_C}\hat{f}^S(z_s,X_c)d\mathbb{P}(X_C|X_S = z_S)d{})dz_S-\text{constant} \end{align*} f^​S,ALE​(xS​)==​∫z0,S​xS​​EXC​∣XS​=xS​​[f^​S(Xs​,Xc​)∣XS​=zS​]dzS​−constant∫z0,S​xS​​(∫xC​​f^​S(zs​,Xc​)dP(XC​∣XS​=zS​)d)dzS​−constant​
该公式揭示了与 M-Plots 的三个不同之处。首先,我们平均预测的变化,而不是预测本身。这种变化被定义为偏导数(但后来,对于实际计算,被一个区间内的预测差异所取代)。

f ^ S ( x s , x c ) = ∂ f ^ ( x S , x C ) ∂ x S \hat{f}^S(x_s,x_c)=\frac{\partial\hat{f}(x_S,x_C)}{\partial{}x_S} f^​S(xs​,xc​)=∂xS​∂f^​(xS​,xC​)​

第二个区别是 z z z 上的附加积分。我们在集合 S 的特征范围内累积局部偏导数,这给了我们特征对预测的影响。对于实际计算, z z z 被一个间隔网格替换,我们在该网格上计算预测的变化。 A L E ALE ALE 方法不是直接对预测进行平均,而是计算以特征 S S S 为条件的预测差异,并对特征 S S S 的导数进行积分以估计效果。嗯,这听起来很愚蠢。求导和积分通常会相互抵消,例如先减去,然后再添加相同的数字。为什么在这里有意义?导数(或区间差)隔离了感兴趣特征的影响并阻止了相关特征的影响。

A L E ALE ALE 图与 M M M 图的第三个区别是我们从结果中减去了一个常数。此步骤使 A L E ALE ALE 图居中,以便对数据的平均影响为零。

一个问题仍然存在:并非所有模型都带有梯度,例如随机森林没有梯度。但正如你将看到的,实际计算没有梯度并使用间隔。让我们更深入地研究 A L E ALE ALE 图的估计。

8.2.3 估计

首先,我将描述如何为单个数字特征估计 A L E ALE ALE 图,然后为两个数字特征和单个分类特征估计 A L E ALE ALE 图。为了估计局部效应,我们将特征分成许多区间并计算预测的差异。此过程近似于导数,也适用于没有导数的模型。

首先我们估计非中心效应:

f ~ ^ j , A L E ( x ) = ∑ k = 1 k j ( x ) 1 n j ( k ) ∑ i : x j ( i ) ∈ N j ( k ) [ f ^ ( z k , j , x ∖ j ( i ) ) − f ^ ( z k − 1 , j , x ∖ j ( i ) ) ] \hat{\tilde{f}}_{j,ALE}(x)=\sum_{k=1}^{k_j(x)}\frac{1}{n_j(k)}\sum_{i:x_{j}^{(i)}\in{}N_j(k)}\left[\hat{f}(z_{k,j},x^{(i)}_{\setminus{}j})-\hat{f}(z_{k-1,j},x^{(i)}_{\setminus{}j})\right] f~​^​j,ALE​(x)=k=1∑kj​(x)​nj​(k)1​i:xj(i)​∈Nj​(k)∑​[f^​(zk,j​,x∖j(i)​)−f^​(zk−1,j​,x∖j(i)​)]

让我们从右边开始分解这个公式。累积局部效应的名称很好地反映了该公式的所有单个组件。ALE 方法的核心是计算预测的差异,我们用网格值 z 替换感兴趣的特征。预测的差异在于该特征在特定时间间隔内对单个实例的影响。右侧的总和将公式中显示为邻域的区间内所有实例的影响相加 N j ( k ) N_j(k) Nj​(k) 我们将此总和除以该区间中的实例数,以获得该区间预测的平均差异。区间中的这个平均值包含在名称 ALE 中的术语“本地”中。左边的总和符号意味着我们累积了所有区间的平均效应。例如,位于第三个区间中的特征值的(未居中的) A L E ALE ALE 是第一个、第二个和第三个区间的影响之和。 A L E ALE ALE 中的累积一词反映了这一点。

该效应居中,因此平均效应为零。

f ^ j , A L E ( x ) = f ~ ^ j , A L E ( x ) − 1 n ∑ i = 1 n f ~ ^ j , A L E ( x j ( i ) ) \hat{f}_{j,ALE}(x)=\hat{\tilde{f}}_{j,ALE}(x)-\frac{1}{n}\sum_{i=1}^{n}\hat{\tilde{f}}_{j,ALE}(x^{(i)}_{j}) f^​j,ALE​(x)=f~​^​j,ALE​(x)−n1​i=1∑n​f~​^​j,ALE​(xj(i)​)

ALE 的值可以解释为特征在某个值时的主效应与数据的平均预测值相比。例如,ALE 估计值为 − 2 -2 −2 在 x j = 3 x_j=3 xj​=3

表示当第 j j j 个特征的值为 3 3 3 时,预测值比平均预测值低 2 2 2。

特征分布的分位数用作定义区间的网格。使用分位数可确保在每个区间中存在相同数量的数据实例。分位数的缺点是间隔可以有非常不同的长度。如果感兴趣的特征非常偏斜,例如许多低值和只有少数非常高的值,这可能会导致一些奇怪的 ALE 图。

两个特征相互作用的 ALE 图

ALE 图还可以显示两个特征的交互作用。计算原理与单个特征相同,但我们使用矩形单元而不是间隔,因为我们必须在二维中累积效果。除了调整整体平均效应外,我们还调整了这两个特征的主要影响。这意味着两个特征的 ALE 估计了二阶效应,其中不包括特征的主效应。换句话说,两个特征的ALE只显示了两个特征的附加交互效果。我省去了 2D ALE 图的公式,因为它们很长而且读起来不愉快。如果你对计算感兴趣,我建议你参考论文,公式 (13) – (16)。我将依靠可视化来培养关于二阶 ALE 计算的直觉。


图 8.8:2D-ALE 的计算。我们在这两个特征上放置一个网格。在每个网格单元中,我们计算其中所有实例的二阶差异。我们首先用单元格角的值替换 x1 和 x2 的值。如果 a、b、c 和 d 表示操纵实例的“角”预测(如图所示),则二阶差为 (d - c) - (b - a)。每个单元格的平均二阶差在网格上累积并居中。

在上图中,由于相关性,许多单元格是空的。在 ALE 图中,这可以用一个变灰或变暗的框来可视化。或者,你可以用最近的非空单元的 ALE 估计替换空单元的缺失 ALE 估计。

由于两个特征的 ALE 估计只显示了特征的二阶效应,因此需要特别注意解释。二阶效应是在我们考虑了特征的主效应之后,特征的附加交互效应。假设两个特征不相互作用,但每个特征对预测结果都有线性影响。在每个特征的一维 ALE 图中,我们会看到一条直线作为估计的 ALE 曲线。但是当我们绘制 2D ALE 估计值时,它们应该接近于零,因为二阶效应只是交互作用的附加效应。ALE 图和 PD 图在这方面有所不同:PDP 始终显示总效应,ALE 图显示一阶或二阶效应。这些是不依赖于基础数学的设计决策。

也可以针对任意高阶(三个或更多特征的交互)计算累积的局部效应,但正如PDP 章节中所述,只有最多两个特征是有意义的,因为更高的交互不能被可视化,甚至无法有意义地解释。

用于分类特征的 ALE

根据定义,累积局部效应方法需要具有顺序的特征值,因为该方法会在某个方向上累积效应。分类特征没有任何自然顺序。为了计算分类特征的 ALE 图,我们必须以某种方式创建或找到一个顺序。类别的顺序会影响累积局部效应的计算和解释。

一种解决方案是根据其他特征的相似性对类别进行排序。两个类别之间的距离是每个特征的距离之和。特征距离比较两个类别的累积分布,也称为 Kolmogorov-Smirnov 距离(用于数值特征)或相对频率表(用于分类特征)。一旦我们有了所有类别之间的距离,我们就使用多维缩放将距离矩阵简化为一维距离度量。这为我们提供了基于相似性的类别顺序。

为了更清楚一点,这里有一个例子:让我们假设我们有两个分类特征“季节”和“天气”以及一个数字特征“温度”。对于第一个分类特征(季节),我们要计算 ALE。该函数具有“春季”、“夏季”、“秋季”、“冬季”等类别。我们开始计算“春季”和“夏季”类别之间的距离。距离是温度和天气特征距离的总和。对于温度,我们采用“春季”季节的所有实例,计算经验累积分布函数,并对“夏季”季节的实例做同样的事情,并用 Kolmogorov-Smirnov 统计量测量它们的距离。对于天气特征,我们为所有“春季”实例计算每种天气类型的概率,对“summer”实例做同样的事情,并总结概率分布中的绝对距离。如果“春季”和“夏季”的温度和天气差异很大,则总类别距离很大。我们对其他季节对重复该过程,并通过多维缩放将得到的距离矩阵减少到一维。

8.2.4 示例

让我们看看 ALE 图的实际效果。我构建了一个部分依赖图失败的场景。该场景由一个预测模型和两个高度相关的特征组成。预测模型主要是线性回归模型,但是在我们从未观察到的实例的两个特征的组合中做了一些奇怪的事情。


图 8.9:两个特征和预测结果。模型预测两个特征的总和(阴影背景),除了如果 x1 大于 0.7 和 x2 小于 0.3,模型总是预测 2。这个区域远离数据的分布(点云)和不影响模型的性能,也不应影响其解释。

这是一个现实的、相关的场景吗?当你训练模型时,学习算法会最大限度地减少现有训练数据实例的损失。奇怪的事情可能发生在训练数据的分布之外,因为模型不会因为在这些领域做奇怪的事情而受到惩罚。离开数据分布称为外推法,它也可以用来欺骗机器学习模型,在对抗性示例一章中进行了描述。在我们的小示例中,与 ALE 图相比,部分依赖图的表现如何。


图 8.10:使用 PDP(上排)和 ALE(下排)计算的特征效果的比较。PDP 估计受到数据分布之外的模型的奇怪行为(图中的急剧跳跃)的影响。ALE 图正确地识别出机器学习模型在特征和预测之间具有线性关系,忽略了没有数据的区域。

但是,看到我们的模型在 x 1 > 0.7 x1 > 0.7 x1>0.7 和 x 2 < 0.3 x2 < 0.3 x2<0.3 时表现异常,这不是很有趣吗?嗯,是的,也不是。由于这些数据实例在物理上可能是不可能的,或者至少是极不可能的,因此研究这些实例通常是无关紧要的。但是,如果你怀疑你的测试分布可能略有不同,并且某些实例实际上在该范围内,那么将这个区域包括在特征效应的计算中会很有趣。但它必须是一个有意识的决定,包括我们尚未观察到数据的区域,它不应该是像 PDP 这样的选择方法的副作用。如果你怀疑该模型稍后将用于不同分布的数据,我建议使用 ALE 图并模拟你期望的数据分布。

转向一个真实的数据集,让我们根据天气和日期预测租用自行车的数量,并检查 ALE 图是否真的像承诺的那样工作。我们训练一个回归树来预测给定一天租用自行车的数量,并使用 ALE 图来分析温度、相对湿度和风速如何影响预测。让我们看一下 ALE 图的内容:


图 8.11:自行车预测模型的 ALE 图(按温度、湿度和风速)。温度对预测有很大的影响。平均预测随着温度的升高而上升,但再次下降到 25 ∘ C ^{\circ}C ∘C以上。湿度有负面影响:当高于 60% 时,相对湿度越高,预测值越低。风速对预测的影响不大。

让我们看看温度、湿度和风速以及所有其他特征之间的相关性。由于数据还包含分类特征,我们不能只使用 Pearson 相关系数,这仅适用于两个特征都是数值的。相反,我训练一个线性模型来预测,例如,基于其他特征之一作为输入的温度。然后我测量线性模型中的另一个特征解释了多少方差并取平方根。如果另一个特征是数值,则结果等于标准皮尔逊相关系数的绝对值。但是,即使另一个特征是分类特征,这种基于模型的“方差解释”(也称为 ANOVA,代表方差分析)的方法仍然有效。“方差解释”测量值始终介于 0(无关联)和 1(可以从其他特征完美预测温度)之间。我们使用所有其他特征计算温度、湿度和风速的解释方差。解释的方差(相关性)越高,PD 图的(潜在)问题就越多。下图可视化了天气特征与其他特征的关联程度。


图 8.12:当我们训练一个线性模型时,温度、湿度和风速与所有特征之间的相关强度,以解释的方差量来衡量,以预测温度和季节为特征。对于温度,我们观察到 - 毫不奇怪 - 与季节和月份高度相关。湿度与天气状况有关。

这种相关性分析表明,我们可能会遇到部分相关图的问题,尤其是温度特征。好吧,你自己看看:


图 8.13:温度、湿度和风速的 PDP。与 ALE 图相比,PDP 显示在高温或高湿条件下预测的自行车数量减少幅度较小。PDP 使用所有数据实例来计算高温的影响,即使它们是例如具有“冬季”季节的实例。ALE 图更可靠。

接下来,让我们看看 ALE 图对分类特征的作用。月份是一个分类特征,我们要分析它对预测的自行车数量的影响。可以说,月份已经有一定的顺序(1 月到 12 月),但是让我们尝试看看如果我们首先按相似度重新排序类别然后计算效果会发生什么。月份根据其他特征(例如温度或是否是假期)按每个月的天数相似度排序。


图 8.14:分类特征月份的 ALE 图。根据其他特征按月的分布,月份按彼此的相似性排序。我们观察到 1 月、3 月和 4 月,尤其是 12 月和 11 月,与其他月份相比,对预计租用自行车数量的影响较小。

由于许多特征都与天气有关,因此月份的顺序强烈反映了月份之间天气的相似程度。所有较冷的月份都位于左侧(2 月至 4 月),而较暖的月份位于右侧(10 月至 8 月)。请记住,相似度计算中也包括了非天气特征,例如假期的相对频率与计算月份之间相似度的温度具有相同的权重。

接下来,我们考虑湿度和温度对预测的自行车数量的二阶效应。请记住,二阶效应是两个特征的附加交互效应,不包括主效应。这意味着,例如,你不会在二阶 ALE 图中看到高湿度导致平均预测自行车数量减少的主要影响。


图 8.15:湿度和温度对预计租用自行车数量的二阶影响的 ALE 图。当已经考虑到主要影响时,较浅的阴影表示高于平均水平,较深的阴影表示低于平均水平的预测。该图揭示了温度和湿度之间的相互作用:炎热潮湿的天气增加了预测。在寒冷和潮湿的天气中,显示出对预测自行车数量的额外负面影响。

请记住,湿度和温度的主要影响都表明,在非常炎热和潮湿的天气中,自行车的预测数量会减少。因此,在湿热天气中,温度和湿度的综合效应不是主效应的总和,而是大于总和。为了强调纯二阶效应(你刚才看到的 2D ALE 图)和总效应之间的区别,让我们看一下部分依赖图。PDP 显示总效应,它结合了平均预测、两个主效应和二阶效应(相互作用)。


图 8.16:温度和湿度对自行车预测数量的总体影响的 PDP。该图结合了每个特征的主要效果及其交互作用,而不是仅显示交互作用的 2D-ALE 图。

如果你只对交互感兴趣,则应查看二阶效应,因为总效应将主效应混合到图中。但是如果你想知道这些特征的综合效果,你应该看看总效果(PDP 显示的)。例如,如果你想知道在 30 ∘ C ^{\circ}C ∘C和 80% 湿度下的预期自行车数量,你可以直接从 2D PDP 中读取。如果你想从 ALE 图中读取相同内容,则需要查看三个图:温度、湿度和温度 + 湿度的 ALE 图,你还需要了解总体平均预测。在两个特征没有交互的场景中,这两个特征的总效果图可能会产生误导,因为它可能显示了一个复杂的景观,暗示了一些交互,但它只是两个主要效果的产物。二阶效应将立即表明不存在相互作用。

现在自行车够多了,让我们转向分类任务。我们训练一个随机森林来根据风险因素预测宫颈癌的概率。我们可视化其中两个特征的累积局部效应:


图 8.17:使用激素避孕药的年龄和年龄对宫颈癌预测概率的影响的 ALE 图。对于年龄特征,ALE 图显示预测的癌症概率在 40 岁之前平均较低,之后会增加。使用激素避孕药的年限与 8 年后更高的预测癌症风险相关。

接下来,我们看看怀孕次数和年龄之间的相互作用。


图 8.18:怀孕次数和年龄的二阶效应的 ALE 图。情节的解释有点不确定,显示出似乎过度拟合的情况。例如,该图显示了 18-20 岁和超过 3 次怀孕的奇怪模型行为(癌症概率最多增加 5 个百分点)。具有这种年龄和怀孕次数的数据中的女性并不多(实际数据显示为点),因此该模型在训练期间不会因为这些女性犯错而受到严厉惩罚。

8.2.5 优点

ALE 图是无偏的,这意味着当特征相关时它们仍然有效。在这种情况下,部分依赖图会失败,因为它们会边缘化不太可能甚至物理上不可能的特征值组合。

ALE 图的计算速度比 PDP 快,并且可以使用 O(n) 进行缩放,因为最大可能的区间数是每个实例一个区间的实例数。PDP 需要 n 倍的网格点估计数。对于 20 个网格点,PDP 需要比最坏情况 ALE 图多 20 倍的预测,其中使用与实例一样多的间隔。

ALE 图的解释很清楚:在给定值的条件下,可以从 ALE 图中读取更改特征对预测的相对影响。ALE 图以零为中心。这使得他们的解释很好,因为 ALE 曲线每个点的值都是与平均预测的差值。2D ALE 图仅显示交互:如果两个特征不交互,则图不显示任何内容。

整个预测函数可以分解为低维 ALE 函数的总和,如函数分解一章中所述。

总而言之,在大多数情况下,我更喜欢 ALE 图而不是 PDP,因为特征通常在某种程度上是相关的。

8.2.6 缺点

如果特征高度相关,则不允许跨区间解释效果。考虑你的特征高度相关的情况,并且你正在查看 1D-ALE 图的左端。ALE 曲线可能会引起以下误解:“ALE 曲线显示了平均而言,当我们逐渐更改数据实例的相应特征的值并保持实例的其他特征值固定时,预测如何变化。” 效果是按间隔(局部)计算的,因此效果的解释只能是局部的。为方便起见,累积了区间效应以显示平滑曲线,但请记住,每个区间都是使用不同的数据实例创建的。

当特征相互作用并相关时,ALE 效应可能与线性回归模型中指定的系数不同。Grömping (2020) 5表明,在具有两个相关特征和附加交互项 ( f ^ ( x ) = β 0 + β 1 x 1 + β 2 x 2 + β 3 x 1 x 2 \hat{f}(x) = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \beta_3 x_1 x_2 f^​(x)=β0​+β1​x1​+β2​x2​+β3​x1​x2​),一阶 ALE 图不显示直线。相反,它们略微弯曲,因为它们包含了特征的乘法交互的一部分。要了解这里发生了什么,我建议阅读函数分解一章。简而言之,ALE 定义一阶(或一维)效应的方式与描述它们的线性公式不同。这不一定是错误的,因为当特征相关时,交互的归属就不是那么清楚了。但是 ALE 和线性系数不匹配肯定是不直观的。

ALE 图可能会变得有点不稳定(许多小的起伏),间隔数很多。在这种情况下,减少区间数会使估计更稳定,但也会平滑并隐藏预测模型的一些真实复杂性。设置间隔数没有完美的解决方案。如果数字太小,ALE 图可能不是很准确。如果数字太高,曲线可能会变得不稳定。

与 PDP 不同,ALE 图没有 ICE 曲线。对于 PDP,ICE 曲线非常棒,因为它们可以揭示特征效果的异质性,这意味着特征的效果对于数据子集看起来是不同的。对于 ALE 图,你只能检查每个区间的实例之间的效果是否不同,但每个区间都有不同的实例,因此它与 ICE 曲线不同。

二阶 ALE 估计在整个特征空间中具有不同的稳定性,这不是以任何方式可视化的。这样做的原因是每个单元格中局部效应的估计都使用不同数量的数据实例。因此,所有估计都有不同的准确度(但它们仍然是最好的估计)。该问题存在于主效应 ALE 图的不太严重的版本中。由于使用分位数作为网格,所有区间中的实例数都相同,但在某些区域会有许多短区间,ALE 曲线将包含更多估计值。但是对于可能构成整个曲线很大一部分的长间隔,实例相对较少。例如,这发生在高龄的宫颈癌预测 ALE 图中。

解释二阶效应图可能有点烦人,因为你始终必须牢记主效应。将热图解读为这两个特征的总效果是很诱人的,但这只是交互的附加效果。纯粹的二阶效应对于发现和探索交互很有趣,但对于解释效果是什么样子的,我认为将主要效果融入情节中更有意义。

与部分依赖图相比,ALE 图的实现要复杂得多,也更不直观

即使 ALE 图在相关特征的情况下没有偏差,但当特征强相关时,解释仍然很困难。因为如果它们具有非常强的相关性,那么仅分析同时更改两个特征而不是孤立地更改的效果才有意义。这个缺点不是 ALE 图特有的,而是强相关特征的普遍问题。

如果特征不相关且计算时间不成问题,则 PDP 稍微更可取,因为它们更容易理解并且可以与 ICE 曲线一起绘制。

缺点列表已经变得很长,但不要被我使用的单词数量所迷惑: 根据经验:使用 ALE 而不是 PDP。

8.2.7 实施和替代方案

我有没有提到部分依赖图和个体条件期望曲线是另一种选择?

ALE 绘图由发明者本人在ALEPlot R 包中的 R 中实现,并且曾经在iml 包中实现。ALE 在ALEPython 包和Alibi中也至少有两个 Python 实现。

8.3 特征交互

当特征在预测模型中相互作用时,预测不能表示为特征效果的总和,因为一个特征的效果取决于另一个特征的值。亚里士多德的谓词“整体大于部分之和”适用于存在相互作用的情况。

8.3.1 特征交互?

如果机器学习模型基于两个特征进行预测,我们可以将预测分解为四个项:常数项、第一个特征项、第二个特征项和两个特征之间的交互项。
两个特征之间的交互作用是在考虑个体特征效应后通过改变特征而发生的预测变化。

例如,一个模型预测房子的价值,使用房子大小(大或小)和位置(好或坏)作为特征,这会产生四种可能的预测:

位置 大小 预测房价
300,000
200,000
250,000
150,000

我们将模型预测分解为以下部分:常数项(150,000)、尺寸特征的影响(+100,000 如果大;+0 如果小)和位置影响(+50,000 如果好;+0 如果不好)。这种分解完全解释了模型预测。没有交互效应,因为模型预测是大小和位置的单个特征效应的总和。当你把一个小房子变大时,预测总是增加 100,000,无论位置如何。此外,无论大小如何,好位置和坏位置之间的预测差异都是 50,000。

现在让我们看一个交互的例子:

位置 大小 预测房价
400,000
200,000
250,000
150,000

我们将预测表分解为以下部分:常数项(150,000)、尺寸特征的效果(大时 +100,000,小时 +0)和位置效果(好时 +50,000,坏时 +0) )。对于这个表,我们需要一个额外的交互项:+100,000 如果房子很大并且位置很好。这是大小和位置之间的相互作用,因为在这种情况下,大房子和小房子之间的预测差异取决于位置。

估计交互强度的一种方法是测量预测的变化有多少取决于特征的交互。这种测量称为 H 统计量,由 Friedman 和 Popescu (2008) [^Friedman2008]引入。

8.3.2 Theory: 理论:Friedman的 H 统计量

我们将处理两种情况:首先,双向交互度量,它告诉我们模型中的两个特征是否以及在何种程度上相互交互;第二,一个总交互度量,它告诉我们一个特征是否以及在多大程度上与模型中的所有其他特征交互。理论上,可以测量任意数量的特征之间的任意交互,但这两种是最有趣的情况。

如果两个特征不交互,我们可以将部分依赖函数分解如下(假设部分依赖函数以零为中心):

P D j k ( x j , x k ) = P D j ( x j ) + P D k ( x k ) PD_{jk}(x_j,x_k)=PD_j(x_j)+PD_k(x_k) PDjk​(xj​,xk​)=PDj​(xj​)+PDk​(xk​)

其中 P D j k ( x j , x k ) PD_{jk}(x_j,x_k) PDjk​(xj​,xk​) 是两个特征的两种种部分依赖函数, P D j ( x j ) PD_j(x_j) PDj​(xj​) 和 P D k ( x k ) PD_k(x_k) PDk​(xk​) 是单个特征的部分依赖函数特征。

同样,如果一个特征与任何其他特征没有相互作用,我们可以将预测函数 f ^ ( x ) \hat{f}(x) f^​(x) 表示为部分依赖函数的和,其中第一个和仅依赖于 j j j ,第二个和依赖于除 j j j 之外的所有其他特征:

f ^ ( x ) = P D j ( x j ) + P D − j ( x − j ) \hat{f}(x)=PD_j(x_j)+PD_{-j}(x_{-j}) f^​(x)=PDj​(xj​)+PD−j​(x−j​)

其中 P D − j ( x − j ) PD_{-j}(x_{-j}) PD−j​(x−j​) 是部分依赖函数,它依赖于除第 j j j 个特征之外的所有特征。

这种分解表达了没有交互作用的部分依赖(或完全预测)函数(在特征 j 和 k 之间,或分别在 j 和所有其他特征之间)。在下一步中,我们测量观察到的部分依赖函数与没有交互的分解函数之间的差异。我们计算部分依赖(衡量两个特征之间的交互)或整个函数(衡量一个特征与所有其他特征之间的交互)输出的方差。交互作用解释的方差量(观察到的和非交互作用的 PD 之间的差异)用作交互作用强度统计量。如果完全没有交互,则统计量为 0,如果 P D j k PD_{jk} PDjk​ 或 f ^ \hat{f} f^​ 由部分依赖函数之和来解释。两个特征之间的交互统计量为 1 意味着每个单独的 PD 函数是恒定的,并且对预测的影响仅来自交互。H 统计量也可以大于 1,这更难以解释。当二维交互作用的方差大于二维部分依赖图的方差时,就会发生这种情况。

在数学上,Friedman 和 Popescu 提出的特征 j 和 k 之间的交互作用的 H 统计量是:

H j k 2 = ∑ i = 1 n [ P D j k ( x j ( i ) , x k ( i ) ) − P D j ( x j ( i ) ) − P D k ( x k ( i ) ) ] 2 ∑ i = 1 n P D j k 2 ( x j ( i ) , x k ( i ) ) H^2_{jk} = \frac{\sum_{i=1}^n\left[PD_{jk}(x_{j}^{(i)},x_k^{(i)})-PD_j(x_j^{(i)}) - PD_k(x_{k}^{(i)})\right]^2}{\sum_{i=1}^n{PD}^2_{jk}(x_j^{(i)},x_k^{(i)})} Hjk2​=∑i=1n​PDjk2​(xj(i)​,xk(i)​)∑i=1n​[PDjk​(xj(i)​,xk(i)​)−PDj​(xj(i)​)−PDk​(xk(i)​)]2​

这同样适用于测量特征 j 是否与任何其他特征交互:

H j 2 = ∑ i = 1 n [ f ^ ( x ( i ) ) − P D j ( x j ( i ) ) − P D − j ( x − j ( i ) ) ] 2 ∑ i = 1 n f ^ 2 ( x ( i ) ) H^2_{j}=\frac{\sum_{i=1}^n\left[\hat{f}(x^{(i)})-PD_j(x_j^{(i)})-PD_{-j}(x_{-j}^{(i)})\right]^2}{\sum_{i=1}^n\hat{f}^2(x^{(i)})} Hj2​=∑i=1n​f^​2(x(i))∑i=1n​[f^​(x(i))−PDj​(xj(i)​)−PD−j​(x−j(i)​)]2​

H 统计量的评估成本很高,因为它遍历所有数据点,并且在每个点都必须评估部分相关性,而这又需要对所有 n 个数据点进行评估。在最坏的情况下,我们需要对机器学习模型预测函数进行 KaTeX parse error: Double superscript at position 5: 2n^2^̲ 次调用来计算双向 H 统计量(j vs. k)和总 H 统计量(j vs. all)的 KaTeX parse error: Double superscript at position 5: 3n^2^̲ 次调用。为了加快计算速度,我们可以从 n 个数据点中采样。这样做的缺点是增加了部分依赖估计的方差,这使得 H 统计量不稳定。因此,如果你使用采样来减少计算负担,请确保采样足够的数据点。

Friedman 和 Popescu 还提出了一个检验统计量来评估 H 统计量是否显着不同于零。零假设是不存在交互作用。要在原假设下生成交互统计,你必须能够调整模型,使其在特征 j 和 k 或所有其他特征之间没有交互。这对所有类型的模型都是不可能的。因此,此测试是特定于模型的,而不是与模型无关的,因此此处未涵盖。

如果预测是概率,则交互强度统计也可以应用于分类设置。

8.3.3 示例

让我们看看实际中的特征交互是什么样子的!我们测量支持向量机中特征的交互强度,该支持向量机根据天气和日历特征预测租用自行车的数量。下图显示了特征交互 H 统计量:


图 8.19:支持向量机预测自行车租赁的每个特征与所有其他特征的交互强度(H 统计量)。总体而言,特征之间的交互作用非常弱(每个特征解释的方差低于 10%)。

在下一个示例中,我们计算分类问题的交互统计量。在给定一些风险因素的情况下,我们分析了经过训练以预测宫颈癌的随机森林中特征之间的相互作用。


图 8.20:预测宫颈癌概率的随机森林中每个特征与所有其他特征的交互强度(H 统计量)。使用激素避孕药的年份与所有其他特征的相对交互作用最高,其次是怀孕次数。

在查看了每个特征与所有其他特征的特征交互之后,我们可以选择其中一个特征并深入研究所选特征与其他特征之间的所有 2-way 交互。


图 8.21:怀孕次数和彼此特征之间的 2 向交互强度(H 统计量)。怀孕次数和年龄之间有很强的相互作用。

8.3.4 优点

交互作用 H 统计量通过部分依赖分解具有基础理论

H 统计量有一个有意义的解释:交互作用被定义为交互作用所解释的方差份额。

由于统计数据是无量纲的,因此可以跨特征甚至跨模型进行比较。

该统计检测各种交互,无论它们的特定形式如何。

使用 H 统计量,还可以分析任意更高的交互,例如 3 个或更多特征之间的交互强度。

8.3.5 缺点

你会注意到的第一件事:交互 H 统计量需要很长时间来计算,因为它的计算量很大。

计算涉及估计边际分布。如果我们不使用所有数据点,这些估计也会有一定的差异。这意味着当我们对点进行采样时,估计值也因运行而异,结果可能不稳定。我建议重复 H 统计量计算几次,看看是否有足够的数据来获得稳定的结果。

目前尚不清楚交互作用是否明显大于 0。我们需要进行统计测试,但该测试在模型不可知版本中(尚未)可用

关于测试问题,很难说 H 统计量何时大到足以让我们认为交互“强”。

此外,H 统计量可能大于 1,这使得解释变得困难。

当两个特征的总效果很弱,但主要由交互作用组成时,H-statistic 会很大。这些虚假的交互作用需要 H 统计量的一个小分母,并且当特征相关时会变得更糟。虚假的交互很容易被过度解释为强交互效应,而实际上这两个特征在模型中都扮演着次要角色。一种可能的补救方法是可视化 H 统计量的非标准化版本,它是 H 统计量6分子的平方根。这将 H 统计量缩放到与响应相同的水平,至少对于回归而言,并且较少强调虚假交互

H j k ∗ = ∑ i = 1 n [ P D j k ( x j ( i ) , x k ( i ) ) − P D j ( x j ( i ) ) − P D k ( x k ( i ) ) ] 2 H^{*}_{jk} = \sqrt{\sum_{i=1}^n\left[PD_{jk}(x_{j}^{(i)},x_k^{(i)})-PD_j(x_j^{(i)}) - PD_k(x_{k}^{(i)})\right]^2} Hjk∗​=i=1∑n​[PDjk​(xj(i)​,xk(i)​)−PDj​(xj(i)​)−PDk​(xk(i)​)]2 ​

H 统计量告诉我们交互作用的强度,但它并没有告诉我们交互作用的样子。这就是部分依赖图的用途。一个有意义的工作流程是测量交互强度,然后为你感兴趣的交互创建 2D 部分依赖图。

如果输入是像素,则无法有意义地使用 H 统计量。因此该技术对图像分类器没有用处。

交互统计是在我们可以独立打乱特征的假设下工作的。如果特征相关性很强,则违反假设,我们会整合现实中不太可能的特征组合。这与部分依赖图有同样的问题。相关特征会导致 H 统计量值较大。

有时结果很奇怪,并且对于小型模拟不会产生预期的结果。但这更像是一个轶事观察。

8.3.6 实现

对于本书中的示例,我使用了CRAN上提供的 R 包和 GitHub 上的开发版本。还有其他实现,重点关注特定模型:R 包 pre 实现了 RuleFit 和 H-statistic。R 包 gbm 实现了梯度提升模型和 H 统计量。

8.3.7 替代方案

H 统计量不是衡量交互作用的唯一方法:

Hooker (2004)7的可变交互网络 (VIN)是一种将预测函数分解为主效应和特征交互的方法。然后将特征之间的交互可视化为网络。不幸的是,还没有可用的软件。

Greenwell 等人的基于部分依赖的特征交互。(2018)2测量两个特征之间的相互作用。这种方法测量一个特征的特征重要性(定义为部分依赖函数的方差),以另一个特征的不同固定点为条件。如果方差高,则特征相互影响,如果方差为零,则它们不相互作用。GitHub 上 vip 提供了相应的 R 包。该软件包还涵盖了部分依赖图和特征重要性。

8.4 函数分解

有监督的机器学习模型可以被视为一个函数,它以高维特征向量作为输入并产生预测或分类分数作为输出。函数分解是一种解构高维函数并将其表示为可以可视化的个体特征效应和交互效应的总和的解释技术。此外,函数分解是许多解释技术的基本原理——它可以帮助你更好地理解其他解释方法。

让我们直接进入并查看一个特定的函数。此函数将两个特征作为输入并产生一维输出:

y = f ^ ( x 1 , x 2 ) = 2 + e x 1 − x 2 + x 1 ⋅ x 2 y = \hat{f}(x_1, x_2) = 2 + e^{x_1} - x_2 + x_1 \cdot x_2 y=f^​(x1​,x2​)=2+ex1​−x2​+x1​⋅x2​

将该函数视为机器学习模型。我们可以使用 3D 图或带有等高线的热图来可视化该函数:


图8.22 两个特征 X 1 X1 X1 和 X 2 X2 X2 的函数预测表面。

函数取大值时 X 1 X_1 X1​ 很大并且 X 2 X_2 X2​ 很小,取小值时 X 2 X_2 X2​ 大 X 1 X_1 X1​ 小。预测函数不仅仅是两个特征之间的相加效应,而是两者之间的相互作用。图中可以看到交互的存在——改变特征 X 1 X_1 X1​ 值的效果取决于特征 X 2 X_2 X2​ 的值。

我们现在的工作是将这个函数分解为特征的主要因子 X 1 X_1 X1​ 和 X 2 X_2 X2​ 以及一个交互项。对于二维函数 f ^ \hat{f} f^​ 这仅取决于两个输入特征: f ^ ( x 1 , x 2 ) \hat{f}(x_1, x_2) f^​(x1​,x2​) ,我们希望每个分量代表一个主要因子( f ^ 1 \hat{f}_1 f^​1​ 和 f ^ 2 \hat{f}_2 f^​2​),相互作用 ( f ^ 1 , 2 \hat{f}_{1,2} f^​1,2​) 或截距 ( f ^ 0 \hat{f}_0 f^​0​):

f ^ ( x 1 , x 2 ) = f ^ 0 + f ^ 1 ( x 1 ) + f ^ 2 ( x 2 ) + f ^ 1 , 2 ( x 1 , x 2 ) \hat{f}(x_1, x_2) = \hat{f}_0 + \hat{f}_1(x_1) + \hat{f}_2(x_2) + \hat{f}_{1,2}(x_{1},x_{2}) f^​(x1​,x2​)=f^​0​+f^​1​(x1​)+f^​2​(x2​)+f^​1,2​(x1​,x2​)

主要影响表明每个特征如何影响预测,而与另一个特征的值无关。交互效应表示特征的联合效应。截距只是告诉我们当所有特征效应都设置为零时的预测是什么。请注意,组件本身是具有不同输入维度的函数(截距除外)。

我现在只给你组件,稍后解释它们的来源。截距是 f ^ 0 ∼ 3.18 \hat{f}_0\sim3.18 f^​0​∼3.18 。由于其他组件是函数,我们可以将它们可视化:


图 8.23:函数分解。

考虑到上述真实公式,你认为这些组件是否有意义,而忽略截距值似乎有点随机? x 1 x_1 x1​ 特征显示指数主要因子,并且 x 2 x_2 x2​ 显示负线性效应。交互项看起来有点像 Pringles 芯片。用不那么松脆和更数学的术语来说,它是一个双曲抛物面,正如我们所期望的那样 x 1 ⋅ x 2 x_1 \cdot x_2 x1​⋅x2​ 。剧透提醒:分解是基于累积的局部效应图,我们将在本章后面讨论。

8.4.1 如何不计算分量 I

为什么所有这些令人兴奋?

看一眼公式就已经给出了分解的答案,所以不需要花哨的方法,对吧?对于特征 x 1 x_1 x1​ ,我们可以取所有只包含 x 1 x_1 x1​ 作为该函数的组件。对于特征 x 2 x_2 x2​ 那将是 f ^ 1 ( x 1 ) = e x 1 \hat{f}_1(x_1) = e^{x_1} f^​1​(x1​)=ex1​ 和 f ^ 2 ( x 2 ) = − x 2 \hat{f}_2(x_2) = -x_2 f^​2​(x2​)=−x2​ 。那么交互就是 f ^ 12 ( x 1 , x 2 ) = x 1 ⋅ x 2 \hat{f}_{12}(x_{1},x_{2}) = x_1 \cdot x_2 f^​12​(x1​,x2​)=x1​⋅x2​ 。虽然这是此示例的正确答案(直到常量),但此方法存在两个问题:

问题 1):虽然示例从公式开始,但现实情况是几乎没有机器学习模型可以用这样的公式来描述整洁的公式。

问题 2)要复杂得多,并且涉及交互是什么。

想象一个简单的函数 f ^ ( x 1 , x 2 ) = x 1 ⋅ x 2 \hat{f}(x_1,x_2) = x_1 \cdot x_2 f^​(x1​,x2​)=x1​⋅x2​ ,其中两个特征的值都大于零并且彼此独立。

使用我们的查看公式策略,我们会得出结论,特征之间存在交互 x 1 x_1 x1​ 和 x 2 x_2 x2​ ,但不是个别特征效果。

但是我们真的可以说特征 x 1 x_1 x1​ 对预测函数没有个体影响?

不管特征 x 2 x_2 x2​ 有多大影响,预测随着 x 1 x_1 x1​ 增加而增加。

例如,对于 x 2 = 1 x_2 = 1 x2​=1 , x 1 x_1 x1​ 的影响是 X1是 f ^ ( x 1 , 1 ) = x 1 \hat{f}(x_1, 1) = x_1 f^​(x1​,1)=x1​ , 对于 x 2 = 10 x_2 = 10 x2​=10 ,影响是 X1是 f ^ ( x 1 , 10 ) = 10 ⋅ x 1 \hat{f}(x_1, 10) = 10 \cdot x_1 f^​(x1​,10)=10⋅x1​ 。因此,很明显,特征 x 1 x_1 x1​ 对预测有积极影响,独立于 x 2 x_2 x2​ ,并且不为零。

为了解决问题 1) 无法获得简洁的公式,我们需要一种仅使用预测函数或分类分数的方法。

为了解决问题 2) 缺乏定义,我们需要一些公理来告诉我们组件应该是什么样子以及它们如何相互关联。但首先,我们应该更准确地定义什么是函数分解。

8.4.2 函数分解

一个预测函数需要将特征 p p p 作为输入, f ^ : R p ↦ R \hat{f}: \mathbb{R}^p \mapsto \mathbb{R} f^​:Rp↦R 产生一个输出。这可以是回归函数,但也可以是给定类别的分类概率或给定集群的分数(无监督机器学习)。完全分解后,我们可以将预测函数表示为函数分量的总和:
f ^ ( x ) = f ^ 0 + f ^ 1 ( x 1 ) + … + f ^ p ( x p ) + f ^ 1 , 2 ( x 1 , x 2 ) + … + f ^ 1 , p ( x 1 , x p ) + … + f ^ p − 1 , p ( x p − 1 , x p ) + … + f ^ 1 , … , p ( x 1 , … , x p ) \begin{align*} \hat{f}(x) = & \hat{f}_0 + \hat{f}_1(x_1) + \ldots + \hat{f}_p(x_p) \\ & + \hat{f}_{1,2}(x_1, x_2) + \ldots + \hat{f}_{1,p}(x_1, x_p) + \ldots + \hat{f}_{p-1,p}(x_{p-1}, x_p) \\ & + \ldots \\ & + \hat{f}_{1,\ldots,p}(x_1, \ldots, x_p) \end{align*} f^​(x)=​f^​0​+f^​1​(x1​)+…+f^​p​(xp​)+f^​1,2​(x1​,x2​)+…+f^​1,p​(x1​,xp​)+…+f^​p−1,p​(xp−1​,xp​)+…+f^​1,…,p​(x1​,…,xp​)​

我们可以通过索引所有可能的特征组合子集来使分解公式更好一些: S ⊆ { 1 , … , p } S\subseteq\{1,\ldots,p\} S⊆{1,…,p} 。 该集合包含截距 ( S = ∅ S=\emptyset S=∅), 主效应 ( ∣ S ∣ = 1 |S|=1 ∣S∣=1) 和所有交互作用 ( ∣ S ∣ ≥ 1 |S|\geq{}1 ∣S∣≥1)。定义了这个子集后,我们可以得到如下分解:

f ^ ( x ) = ∑ S ⊆ { 1 , … , p } f ^ S ( x S ) \hat{f}(x) = \sum_{S\subseteq\{1,\ldots,p\}} \hat{f}_S(x_S) f^​(x)=S⊆{1,…,p}∑​f^​S​(xS​)

在公式中, x S x_S xS​ 是集合 S S S 中的特征向量。 并且每个子集 S S S 表示一个函数组件,例如,如果 S 只包含一个特征,则为主要因子,如果 ∣ S ∣ > 1 |S| > 1 ∣S∣>1 则为一个交互。

上式中有多少个组件?
答案归结为能形成多少个来自 1 , … , p 1,\ldots, p 1,…,p 的子集 S S S。这些是 ∑ i = 0 p ( p i ) = 2 p \sum_{i=0}^p\binom{p}{i}=2^p ∑i=0p​(ip​)=2p 可能的子集!例如,如果一个函数使用 10 个特征,我们可以将该函数分解为 1042 个分量:1 个截距、10 个主要因子、90 个 2-way 交互项、720 个 3-way 交互项……伴随着额外的特征,组件数量翻倍。显然,对于大多数函数,计算所有分量是不可行的。不计算所有组件的另一个原因是具有 ∣ S ∣ > 2 |S|>2 ∣S∣>2 的组件很难形象化和解释。

8.4.3 如何不计算分量 II

到目前为止,我一直避免谈论组件是如何定义和计算的。我们隐含地谈到的唯一约束是组件的数量和维数,并且组件的总和应该产生原始函数。但是如果没有对组件应该是什么的进一步限制,它们就不是唯一的。这意味着我们可以在主效应和交互作用之间转换效应,或者在低阶交互(少数特征)和高阶交互(更多特征)之间转换。在本章开头的示例中,我们可以将两个主效应都设置为零,并将它们的效应添加到交互效应中。

这是一个更极端的例子,它说明了对组件的约束的需要。假设你有一个 3 维函数。这个函数长什么样并不重要,但下面的分解总是有效的: f ^ 0 \hat{f}_0 f^​0​ 是 0.12。
f ^ 1 ( x 1 ) = 2 ⋅ x 1 \hat{f}_1(x_1)=2\cdot{}x_1 f^​1​(x1​)=2⋅x1​ + 你拥有的鞋子数量。
f ^ 2 \hat{f}_2 f^​2​, f ^ 3 \hat{f}_3 f^​3​, f ^ 1 , 2 \hat{f}_{1,2} f^​1,2​, f ^ 2 , 3 , f ^ 1 , 3 \hat{f}_{2,3}, \hat{f}_{1,3} f^​2,3​,f^​1,3​ 全都是0。
为了让这个把戏凑效,定义 f ^ 1 , 2 , 3 ( x 1 , x 2 , x 3 ) = f ^ ( x ) − ∑ S ⊂ { 1 , … , p } f ^ S ( x S ) \hat{f}_{1,2,3}(x_1,x_2,x_3)=\hat{f}(x)-\sum_{S\subset\{1,\ldots,p\}}\hat{f}_S(x_S) f^​1,2,3​(x1​,x2​,x3​)=f^​(x)−∑S⊂{1,…,p}​f^​S​(xS​)。所以包含所有特征的交互项只是吸收了所有剩余的影响,根据定义,这总是有效的,因为所有组件的总和为我们提供了原始预测函数。如果你将此分解作为对模型的解释,那么这种分解将不会很有意义并且会产生误导。

可以通过指定进一步的约束或计算组件的特定方法来避免歧义。在本章中,我们将讨论以不同方式处理函数分解的三种方法:

  • (广义)函数方差分析
  • 累积的局部效应
  • 统计回归模型

8.4.4 函数方差分析

Hooker (2004)7提出了函数方差分析。这种方法的一个要求是模型预测函数 f ^ \hat{f} f^​ 是平方可积的。与任何函数分解一样,函数 ANOVA 将函数分解为组件:

f ^ ( x ) = ∑ S ⊆ { 1 , … , p } f ^ S ( x S ) \hat{f}(x) = \sum_{S\subseteq\{1,\ldots,p\}} \hat{f}_S(x_S) f^​(x)=S⊆{1,…,p}∑​f^​S​(xS​)

Hooker (2004) 使用以下公式定义每个组件:

f ^ S ( x ) = ∫ X − S ( f ^ ( x ) − ∑ V ⊂ S f ^ V ( x ) ) d X − S \hat{f}_S(x) = \int_{X_{-S}} \left( \hat{f}(x) - \sum_{V \subset S} \hat{f}_V(x)\right) d X_{-S} f^​S​(x)=∫X−S​​(f^​(x)−V⊂S∑​f^​V​(x))dX−S​

好吧,让我们把这个东西拆开。我们可以将组件重写为:

f ^ S ( x ) = ∫ X − S ( f ^ ( x ) ) d X − S − ∫ X − S ( ∑ V ⊂ S f ^ V ( x ) ) d X − S \hat{f}_S(x) = \int_{X_{-S}} \left( \hat{f}(x)\right) d X_{-S} - \int_{X_{-S}} \left(\sum_{V \subset S} \hat{f}_V(x) \right) d X_{-S} f^​S​(x)=∫X−S​​(f^​(x))dX−S​−∫X−S​​(V⊂S∑​f^​V​(x))dX−S​

左侧是预测函数关于从集合 S S S 中排除的特征,表示为 − S -S −S 。 例如,如果我们计算特征 2 和 3 的 2-way 交互分量,我们将对特征 1、4、5 进行积分……

积分也可以看作是预测函数对于 X − S X_{-S} X−S​ 的期望值 ,假设所有特征都遵循从最小值到最大值的均匀分布。从这个区间中,我们减去所有包含 S S S 的子集 。这种减法消除了所有低阶效应的影响,并使效应居中。为了 S = { 1 , 2 } S=\{1,2\} S={1,2},我们减去两个主要因子 f ^ 1 \hat{f}_1 f^​1​ 和 f ^ 2 \hat{f}_2 f^​2​ ,以及截距 f ^ 0 \hat{f}_0 f^​0​ 。这些低阶效应的出现使公式递归:我们必须通过子集的层次结构来截取并计算所有这些分量。对于拦截组件 f ^ 0 \hat{f}_0 f^​0​ ,子集是空集 S = { ∅ } S=\{\emptyset\} S={∅} 因此 − S -S −S 包含所有特征:
f ^ 0 ( x ) = ∫ X f ^ ( x ) d X \hat{f}_0(x) = \int_{X} \hat{f}(x) dX f^​0​(x)=∫X​f^​(x)dX

这只是集成在所有函数上的预测函数。当我们假设所有特征都是均匀分布时,截距也可以解释为预测函数的期望值。现在我们知道了 f ^ 0 \hat{f}_0 f^​0​ ,可以计算 f ^ 1 \hat{f}_1 f^​1​(等价于 f ^ 2 \hat{f}_2 f^​2​ ):

f ^ 1 ( x ) = ∫ X − 1 ( f ^ ( x ) − f ^ 0 ) d X − S \hat{f}_1(x) = \int_{X_{-1}} \left( \hat{f}(x) - \hat{f}_0\right) d X_{-S} f^​1​(x)=∫X−1​​(f^​(x)−f^​0​)dX−S​

完成组件 $\hat{f}_{1,2} 的计算,我们可以把所有东西放在一起:

f ^ 1 , 2 ( x ) = ∫ X 3 , 4 ( f ^ ( x ) − ( f ^ 0 ( x ) + f ^ 1 ( x ) − f ^ 0 + f ^ 2 ( x ) − f ^ 0 ) ) d X 3 , X 4 = ∫ X 3 , 4 ( f ^ ( x ) − f ^ 1 ( x ) − f ^ 2 ( x ) + f ^ 0 ) d X 3 , X 4 \begin{align*}\hat{f}_{1,2}(x) &= \int_{X_{3,4}} \left( \hat{f}(x) - (\hat{f}_0(x) + \hat{f}_1(x) - \hat{f}_0 + \hat{f}_2(x) - \hat{f}_0)\right) d X_{3},X_4 \\ &= \int_{X_{3,4}} \left(\hat{f}(x) - \hat{f}_1(x) - \hat{f}_2(x) + \hat{f}_0\right) d X_{3},X_4 \end{align*} f^​1,2​(x)​=∫X3,4​​(f^​(x)−(f^​0​(x)+f^​1​(x)−f^​0​+f^​2​(x)−f^​0​))dX3​,X4​=∫X3,4​​(f^​(x)−f^​1​(x)−f^​2​(x)+f^​0​)dX3​,X4​​

这个例子展示了每个高阶效应是如何通过整合所有其他特征来定义的,而且还通过删除作为我们感兴趣的特征集子集的所有低阶效应来定义。

Hooker (2004) 表明,函数组件的这种定义满足这些理想的公理:

  • 零意味着: ∫ f ^ S ( x S ) d X s = 0 \int{}\hat{f}_S(x_S)dX_s=0 ∫f^​S​(xS​)dXs​=0 对应 S ≠ ∅ S\neq\emptyset S=∅.
  • 正交: ∫ f ^ S ( x S ) f ^ V ( x v ) d X = 0 \int{}\hat{f}_S(x_S)\hat{f}_V(x_v)dX=0 ∫f^​S​(xS​)f^​V​(xv​)dX=0 对应 S ≠ V S\neq{}V S=V
  • 方差分解: 让 σ f ^ 2 = ∫ f ^ ( x ) 2 d X \sigma^2_{\hat{f}}=\int \hat{f}(x)^2dX σf^​2​=∫f^​(x)2dX, 然后 σ 2 ( f ^ ) = ∑ S ⊆ { 1 , … , p } σ S 2 ( f ^ S ) \sigma^2(\hat{f}) = \sum_{S \subseteq \{1,\ldots,p\}} \sigma^2_S(\hat{f}_S) σ2(f^​)=∑S⊆{1,…,p}​σS2​(f^​S​)

零意味着所有影响或相互作用都以零为中心。因此,位置 x 的解释是相对于中心预测而不是绝对预测。

正交定理意味着组件不共享信息。例如,特征的一阶效应 X 1 X_1 X1​ 和交互项 X 1 X_{1} X1​ 和 X 2 X_2 X2​ 不相关。由于正交性,所有组件都是“纯”的,因为它们不会混合效果。例如,函数的组件很有意义X4应该独立于特征之间的交互项X1和X2. 更有趣的结果是分层组件的正交性,其中一个组件包含另一个组件的特征,例如 X 1 X_1 X1​ 和 X 2 X_2 X2​ ,以及特征的主要因子 X 1 X_1 X1​ 。相比之下,二维部分依赖图 X 1 X_1 X1​ 和 X 2 X_2 X2​ 将包含四个效果:截距,两个主要因子 X 1 X_1 X1​ 和 X 2 X_2 X2​ 以及它们之间的相互作用。函数方差分析组件 f ^ 1 , 2 ( x 1 , x 2 ) \hat{f}_{1,2}(x_1,x_2) f^​1,2​(x1​,x2​) 只包含纯交互。

方差分解允许我们在组件之间划分函数的方差 f ^ \hat{f} f^​ ,并保证它最终将函数的总方差相加。
方差分解性质也可以向我们解释为什么该方法被称为``函数方差分析’'。
在统计学中,ANOVA 代表方差分析。ANOVA 是指一组分析目标变量均值差异的方法。ANOVA 通过划分方差并将其归因于变量来工作。

因此,函数方差分析可以看作是这个概念对任何函数的扩展。

当特征相关时,函数方差分析会出现问题。

作为一种解决方案,已经提出了广义函数方差分析。

8.4.5 相关特征的广义泛函方差分析

与大多数基于采样数据(例如 PDP)的解释技术类似,当特征相关时,函数 ANOVA 会产生误导性结果。如果我们在均匀分布上进行积分,当实际上特征是依赖的时,我们会创建一个偏离联合分布的新数据集,并推断出不太可能的特征值组合。

Hooker (2007)8提出了广义函数方差分析,一种适用于依赖特征的分解。它是我们前面遇到的泛函方差分析的一种泛化,也就是说函数方差分析是泛函方差分析的一个特例。这些分量被定义为 f 在加法函数空间上的投影:

f ^ S ( x S ) = a r g m i n g S ∈ L 2 ( R S ) S ∈ P ∫ ( f ^ ( x ) − ∑ S ⊂ P g S ( x S ) ) 2 w ( x ) d x . \hat{f}_S(x_S) = argmin_{g_S \in L^2(\mathbb{R}^S)_{S \in P}} \int \left(\hat{f}(x) - \sum_{S \subset P} g_S(x_S)\right)^2 w(x)dx. f^​S​(xS​)=argmingS​∈L2(RS)S∈P​​∫(f^​(x)−S⊂P∑​gS​(xS​))2w(x)dx.

组件不满足正交,而是满足分层正交条件:

∀ f ^ S ( x S ) ∣ S ⊂ U : ∫ f ^ S ( x S ) f ^ U ( x U ) w ( x ) d x = 0 \forall \hat{f}_S(x_S)| S \subset U: \int \hat{f}_S(x_S) \hat{f}_U(x_U) w(x)dx = 0 ∀f^​S​(xS​)∣S⊂U:∫f^​S​(xS​)f^​U​(xU​)w(x)dx=0

分层正交不同于正交。对于两个特征集 S 和 U,它们都不是另一个的子集(例如 S = { 1 , 2 } S=\{1,2\} S={1,2} and U = { 2 , 3 } U=\{2,3\} U={2,3}),组件 f ^ S \hat{f}_S f^​S​ 和 f ^ U \hat{f}_U f^​U​不需要是正交的,分解是层次正交的。但是所有 S S S 的子集的所有组件小号必须正交于 f ^ S \hat{f}_S f^​S​ 。

因此,解释在相关方面有所不同:与ALE 章节中的 M-Plot 类似,广义函数 ANOVA 分量可以纠缠相关特征的(边际)效应。组件是否纠缠边际效应也取决于权重函数 w ( x ) w(x) w(x) 的选择。

如果我们选择 w 作为单位立方体上的统一度量,我们可以从上面的部分获得泛函方差分析。w 的一个自然选择是联合概率分布函数。然而,联合分布通常是未知的,并且难以估计。一个技巧可以是从单位立方体上的统一度量开始,并切出没有数据的区域。

估计是在特征空间中的点网格上完成的,并表示为可以使用回归技术解决的最小化问题。但是,这些组件不能单独计算,也不能分层计算,而是必须求解涉及其他组件的复杂方程组。因此,计算是相当复杂且计算密集的。

8.4.6 累积局部效应图

ALE 图(Apley 和 Zhu 20204)也提供了函数分解,这意味着将所有 ALE 图从截距、1D ALE 图、2D ALE 图等相加,产生预测函数。ALE 与(广义)函数方差分析不同,因为组件不是正交的,而是作者称之为伪正交的。为了理解伪正交,我们必须定义算子 H S H_S HS​,它接受一个函数 f ^ \hat{f} f^​ 并将其映射到特征子集 S S S的 ALE 图. 例如,算子 H 1 , 2 H_{1,2} H1,2​ 将机器学习模型作为输入,并为特征 1 和 2 生成 2D ALE 图: H 1 , 2 ( f ^ ) = f ^ A L E , 12 H_{1,2}(\hat{f}) = \hat{f}_{ALE,12} H1,2​(f^​)=f^​ALE,12​ 如果我们两次应用相同的运算符,我们会得到相同的 ALE 图。应用算子 H 1 , 2 H_{1,2} H1,2​ 到 f f f 一次,我们得到了 2D ALE 图 f ^ A L E , 12 \hat{f}_{ALE,12} f^​ALE,12​ 然后我们再次应用算子到 f ^ A L E , 12 \hat{f}_{ALE,12} f^​ALE,12​ 而不是 f f f 这是可能的,因为 2D ALE 组件本身就是一个函数。结果又是 f ^ A L E , 12 \hat{f}_{ALE,12} f^​ALE,12​,这意味着我们可以多次应用相同的算子并始终获得相同的 ALE 图。这是伪正交的第一部分。但是,如果我们对不同的特征集应用两个不同的运算符,结果会怎样呢?例如, H 1 , 2 H_{1,2} H1,2​ 和 H 1 H_{1} H1​,或者 H 1 , 2 H_{1,2} H1,2​ 和 H 3 , 4 , 5 H_{3,4,5} H3,4,5​ 答案是零。如果我们首先应用 ALE 算子 H S H_S HS​ 到一个函数,然后应用 H U H_U HU​ 到结果( S ≠ U S \neq U S=U),则结果为零。换句话说,ALE 图的 ALE 图为零,除非你两次应用相同的 ALE 图。或者换句话说,特征集 S S S 的 ALE 图不包含任何其他 ALE 图。或者用数学术语来说,ALE 算子将函数映射到内积空间的正交子空间。

正如 Apley 和 Zhu (2020) 所指出的,伪正交性可能比分层正交性更可取,因为它不会纠缠特征的边际效应。此外,ALE 不需要估计联合分布;分量可以以分层方式估计,这意味着计算特征 1 和 2 的 2D ALE 只需要计算 1 和 2 的单个 ALE 分量以及截距项。

8.4.7 统计回归模型

这种方法与可解释模型相关,特别是广义的加法模型。我们可以在建模过程中构建约束,而不是分解复杂的函数,以便我们可以轻松地读出各个组件。虽然分解可以以自上而下的方式处理,我们从高维函数开始并分解它,但广义加法模型提供了一种自下而上的方法,我们从简单的组件构建模型。这两种方法的共同点是它们的目标是提供单独的和可解释的组件。在统计模型中,我们限制了组件的数量,因此不必拟合所有 2 p 2^p 2p 组件。最简单的版本是线性回归:

f ^ ( x ) = β 0 + β 1 x 1 + … β p x p \hat{f}(x) = \beta_0 + \beta_1 x_1 + \ldots \beta_p x_p f^​(x)=β0​+β1​x1​+…βp​xp​

该公式看起来与函数分解非常相似,但有两个主要修改。修改1:排除所有交互效应,只保留截距和主效应。修改2:主效应可能只在特征上是线性的: f ^ j ( x j ) = β j x j \hat{f}_j(x_j)=\beta_j{}x_j f^​j​(xj​)=βj​xj​。通过函数分解的镜头查看线性回归模型,我们看到模型本身代表了从特征映射到目标的真实函数的函数分解,但在强烈假设效应是线性效应并且没有相互作用的情况下。

广义加法模型通过使用更灵活的函数 f ^ j \hat{f}_j f^​j​ 来弱化第二个假设。也可以添加交互,但此过程非常费力。诸如 GA2M 之类的方法尝试将 2-way 交互自动添加到 GAM。9

将线性回归模型或 GAM 视为函数分解也会导致混淆。如果你应用本章前面的分解方法(广义函数方差分析和累积局部效应),你可能会得到与直接从 GAM 读取的组件不同的组件。当在 GAM 中对相关特征的交互影响进行建模时,就会发生这种情况。出现差异是因为其他函数分解方法在交互作用和主效应之间以不同的方式划分效应。

那么什么时候应该使用 GAMs 而不是复杂的模型 + 分解呢?当大多数交互为零时,你应该坚持使用 GAM,尤其是当没有与三个或更多特征的交互时。如果我们知道交互中涉及的最大特征数是两个( ∣ S ∣ ≤ 2 |S|\leq{}2 ∣S∣≤2),然后我们可以使用 MARS 或 GA2M 等方法。最终,测试数据上的模型性能可能表明 GAM 是否足够或更复杂的模型性能更好。

8.4.8 奖励:部分依赖图

部分依赖图是否也提供函数分解?简短的回答:不。更长的回答:特征集 S S S 的部分依赖图总是包含层次结构的所有影响因子, { 1 , 2 } \{1,2\} {1,2} 的 PDP 不仅包含交互,而且还有个体特征影响。因此,为所有子集添加所有 PDP 不会产生原始函数,因此不是有效的分解。但是我们是否可以调整 PDP,也许通过消除所有较低的影响?是的,我们可以,但我们会得到类似于函数方差分析的结果。然而,PDP 不是在均匀分布上积分,而是在 X − S X_{-S} X−S​ 边际分布上积分,这是使用的蒙特卡洛采样估计。

8.4.9 优点

我认为函数分解是机器学习可解释性的核心概念

函数分解为我们将高维和复杂的机器学习模型分解为个体效应和交互提供了理论依据——这是让我们能够解释个体效应的必要步骤。函数分解是统计回归模型、ALE、(广义)函数方差分析、PDP、H 统计量和 ICE 曲线等技术的核心思想。

函数分解还提供了对其他方法的更好理解。例如,排列特征重要性破坏特征和目标之间的关联。从函数分解的角度来看,我们可以看到排列“破坏”了涉及该特征的所有组件的效果。这会影响特征的主要效果,也会影响与其他特征的所有交互。作为另一个示例,Shapley 值将预测分解为单个特征的加性效应。但是函数分解告诉我们,分解中也应该有交互作用,那么它们在哪里呢?Shapley 值提供了对单个特征的公平归因,这意味着所有交互也公平地归因于这些特征,因此在 Shapley 值之间进行了划分。

在考虑将函数分解作为一种工具时,使用ALE 图具有许多优点。ALE 图提供了一种计算速度快的函数分解,具有软件实现(参见 ALE 章节)和理想的伪正交性属性。

8.4.10 缺点

函数分解的概念很快就达到了超出两个特征之间相互作用的高维组件的极限。不仅特征数量的这种指数爆炸限制了实用性,因为我们无法轻松地可视化高阶交互,而且如果我们要计算所有交互,计算时间也是疯狂的。

每种函数分解方法都有各自的缺点。自下而上的方法——构建回归模型——是一个非常手动的过程,并且对模型施加了许多可能影响预测性能的约束。函数方差分析需要独立的特征。广义函数方差分析很难估计。累积的局部效应图不提供方差分解。

函数分解方法比文本或图像更适合分析表格数据

8.5 置换特征重要性

置换特征重要性衡量我们置换特征值后模型预测误差的增加,这打破了特征与真实结果之间的关系。

8.5.1 理论

这个概念非常简单:我们通过计算置换特征后模型预测误差的增加来衡量特征的重要性。如果改组其值会增加模型误差,则该特征是“重要的”,因为在这种情况下,模型依赖于该特征进行预测。如果改组其值使模型误差保持不变,则该特征是“不重要的”,因为在这种情况下,模型忽略了预测的特征。Breiman (2001)10为随机森林引入了置换特征重要性测量。基于这个想法,Fisher、Rudin 和 Dominici (2018)11提出了一个与模型无关的特征重要性版本,并将其称为模型依赖。他们还介绍了关于特征重要性的更高级的想法,例如考虑到许多预测模型可以很好地预测数据的(特定于模型的)版本。他们的论文值得一读。

基于 Fisher、Rudin 和 Dominici (2018) 的置换特征重要性算法

The permutation feature importance algorithm based on Fisher, Rudin, and Dominici (2018):

输入:训练模型 f ^ \hat{f} f^​ , 特征矩阵 X X X , 目标向量是的, 误差测量 L ( y , f ^ ) L(y,\hat{f}) L(y,f^​) 。

  1. 估计原始模型误差 e o r i g = L ( y , f ^ ( X ) ) e_{orig} = L(y, \hat{f}(X)) eorig​=L(y,f^​(X))(例如均方误差)Estimate the original model error e o r i g = L ( y , f ^ ( X ) ) e_{orig} = L(y, \hat{f}(X)) eorig​=L(y,f^​(X)) (e.g. mean squared error)
  2. 对于每个功能 j ∈ { 1 , . . . , p } j \in \{1,...,p\} j∈{1,...,p} :
    • 生成特征矩阵 X p e r m X_{perm} Xperm​ 通过置换数据 X X X 中的特征 j j j 。这打破了特征 j j j 与真实结果 y y y 之间的关联。
    • 估计误差 e p e r m = L ( Y , f ^ ( X p e r m ) ) e_{perm} = L(Y,\hat{f}(X_{perm})) eperm​=L(Y,f^​(Xperm​)) 基于置换数据的预测。
    • 将排列特征重要性计算为 F I j = e p e r m / e o r i g FI_j= e_{perm}/e_{orig} FIj​=eperm​/eorig​ 或差异 F I j = e p e r m − e o r i g FI_j = e_{perm}- e_{orig} FIj​=eperm​−eorig​ 。
  3. 按 F I FI FI 降序对特征进行排序。

Fisher、Rudin 和 Dominici (2018) 在他们的论文中建议将数据集分成两半并交换两半的特征 j j j 的值,而不是置换特征 j j j。如果你考虑一下,这与置换特征 j j j 完全相同。如果你想要更准确的估计,你可以通过将每个实例与其他实例的特征 j j j 的值配对来估计置换特征 j j j 的误差(除了自身)。这为你提供了一个大小的数据集 n(n-1) 来估计排列误差,并且需要大量的计算时间。如果你认真想要获得极其准确的估计,我只能推荐使用 n(n-1) 方法。

8.5.2 我应该计算训练数据还是测试数据的重要性?

tl;dr: 你可能应该使用测试数据。

回答有关训练或测试数据的问题涉及到特征重要性的基本问题。了解基于训练与基于测试数据的特征重要性之间差异的最佳方法是一个“极端”示例。我训练了一个支持向量机来预测给定 50 个随机特征(200 个实例)的连续随机目标结果。“随机”是指目标结果独立于 50 个特征。这就像根据最新的彩票号码预测明天的温度一样。如果模型“学习”了任何关系,那么它就会过拟合。事实上,SVM 在训练数据上确实过拟合了。训练数据的平均绝对误差(简称:mae)为 0.29,测试数据的平均绝对误差为 0.82,这也是始终预测平均结果为 0(mae 为 0.78)的最佳可能模型的误差。换句话说,SVM 模型是垃圾。对于这个过度拟合的 SVM 的 50 个特征,你期望特征重要性的值是多少?零,因为没有任何函数有助于提高看不见的测试数据的性能?或者重要性是否应该反映模型对每个特征的依赖程度,而不管学习到的关系是否可以推广到看不见的数据?让我们看看训练数据和测试数据的特征重要性分布有何不同。不管学习到的关系是否可以推广到看不见的数据?让我们看看训练数据和测试数据的特征重要性分布有何不同。不管学习到的关系是否可以推广到看不见的数据?

让我们看看训练数据和测试数据的特征重要性分布有何不同。


图 8.24:按数据类型划分的特征重要性值分布。SVM 在具有 50 个随机特征和 200 个实例的回归数据集上进行训练。SVM 过拟合数据:基于训练数据的特征重要性显示了许多重要特征。在未见过的测试数据上计算,特征重要性接近 1 的比率(=不重要)。

我不清楚这两个结果中哪一个更可取。所以我会尝试为这两个版本提供一个案例。

测试数据案例

这是一个简单的案例:

基于训练数据的模型错误估计是垃圾 -> 特征重要性依赖于模型错误估计 -> 基于训练数据的特征重要性是垃圾。真的,这是你在机器学习中学到的第一件事:如果你在训练模型的相同数据上测量模型误差(或性能),测量结果通常过于乐观,这意味着模型似乎工作比它在现实中做得更好。而且由于排列特征的重要性依赖于模型误差的测量,我们应该使用看不见的测试数据。基于训练数据的特征重要性让我们错误地认为特征对预测很重要,而实际上模型只是过度拟合,而特征根本不重要。

训练数据案例

使用训练数据的论点有点难以表述,但恕我直言,与使用测试数据的论点一样令人信服。我们再看看我们的垃圾 SVM。根据训练数据,最重要的特征是 r max.imp$feature。让我们看一下特征 r max.imp$feature 的部分依赖图。部分依赖图显示了模型输出如何根据特征的变化而变化,而不依赖于泛化误差。PDP 是用训练数据还是测试数据计算的并不重要。

该图清楚地表明,SVM 已经学会依赖特征 r max.imp$feature 进行预测,但根据基于测试数据 (r round(imp2$results[imp2$results$feature == max.imp$feature, "importance"], 2)) 的特征重要性,它并不重要。根据训练数据,重要性为 r round(max.imp$importance, 2),反映模型已经学会使用该特征。基于训练数据的特征重要性告诉我们哪些特征对模型很重要,因为它依赖于它们进行预测。

作为使用训练数据案例的一部分,我想介绍一个反对测试数据的论点。在实践中,你希望使用所有数据来训练你的模型,以最终获得最佳模型。这意味着不会留下未使用的测试数据来计算特征重要性。当你想估计模型的泛化误差时,你会遇到同样的问题。如果你将(嵌套)交叉验证用于特征重要性估计,你将遇到的问题是,特征重要性不是在具有所有数据的最终模型上计算,而是在具有可能表现不同的数据子集的模型上计算。

但是,最后我建议使用测试数据来衡量排列特征的重要性。因为如果你对模型的预测受某个特征的影响程度感兴趣,你应该使用其他重要性度量,例如 SHAP 重要性。

接下来,我们将看一些例子。我基于训练数据计算重要性,因为我必须选择一个并且使用训练数据需要少几行代码。

8.5.3 示例和解释

我展示了分类和回归的例子。

宫颈癌(分类)

我们拟合随机森林模型来预测宫颈癌。我们测量误差增加 1-AUC(1 减去 ROC 曲线下的面积)。与模型误差增加 1 倍(= 无变化)相关的特征对于预测宫颈癌并不重要。


图 8.26:使用随机森林预测宫颈癌的每个特征的重要性。

最重要的特征 r imp.dat[1, 'feature'] 在置换后随着 r round(imp.dat[1,'importance'], 2) 的错误而不断增长。

共享单车(回归)

我们拟合了一个支持向量机模型来预测租用自行车的数量,给定天气条件和日历信息。作为误差测量,我们使用平均绝对误差。

We fit a support vector machine model to predict the number of rented bikes, given weather conditions and calendar information.
As error measurement we use the mean absolute error.


图 8.27:每个特征在使用支持向量机预测自行车数量时的重要性。最重要的是温度,最不重要的是假期。

8.5.4 优点

很好的解释:特征重要性是当特征信息被破坏时模型误差的增加。

特征重要性提供了对模型行为的高度压缩的全局洞察

使用错误率而不是错误差异的一个积极方面是特征重要性测量在不同问题之间具有可比性

重要性度量会自动考虑与其他特征的所有交互。通过置换特征,你还破坏了与其他特征的交互效果。这意味着排列特征的重要性既考虑了主要特征的影响,也考虑了对模型性能的交互影响。这也是一个缺点,因为两个特征之间交互的重要性包含在两个特征的重要性测量中。这意味着特征重要性加起来并不等于性能下降的总和,但总和更大。只有当特征之间没有交互时,如在线性模型中,重要性才近似相加。

置换特征重要性不需要重新训练模型. 其他一些方法建议删除一个特征,重新训练模型,然后比较模型错误。由于机器学习模型的重新训练可能需要很长时间,因此“仅”置换一个特征可以节省大量时间。使用特征子集重新训练模型的重要性方法乍一看很直观,但数据减少的模型对于特征重要性来说毫无意义。我们对固定模型的特征重要性感兴趣。使用减少的数据集进行重新训练会创建一个与我们感兴趣的模型不同的模型。假设你训练了一个稀疏线性模型(使用 Lasso),该模型具有固定数量的非零权重的特征。数据集有 100 个特征,你将非零权重的数量设置为 5。你分析具有非零权重的特征之一的重要性。你删除该特征并重新训练模型。模型性能保持不变,因为另一个同样好的特征获得了非零权重,你的结论是该特征并不重要。另一个例子:模型是一个决策树,我们分析被选为第一个分割的特征的重要性。你删除该特征并重新训练模型。由于选择了另一个特征作为第一个分割,整个树可能会非常不同,这意味着我们比较(可能)完全不同的树的错误率,以确定该特征对于其中一棵树的重要性。该模型是一个决策树,我们分析了被选为第一个分割的特征的重要性。你删除该特征并重新训练模型。由于选择了另一个特征作为第一个分割,整个树可能会非常不同,这意味着我们比较(可能)完全不同的树的错误率,以确定该特征对于其中一棵树的重要性。该模型是一个决策树,我们分析了被选为第一个分割的特征的重要性。你删除该特征并重新训练模型。由于选择了另一个特征作为第一个分割,整个树可能会非常不同,这意味着我们比较(可能)完全不同的树的错误率,以确定该特征对于其中一棵树的重要性。

8.5.5 缺点

排列特征的重要性与模型的误差有关。这本质上并不是坏事,但在某些情况下不是你所需要的。在某些情况下,你可能更愿意知道模型的输出对于某个特征的变化程度,而不考虑它对性能的意义。例如,你想了解当有人操作特征时模型的输出有多稳健。在这种情况下,你不会对置换特征时模型性能降低多少感兴趣,而是每个特征解释了模型的输出方差有多少。当模型泛化良好(即它不会过拟合)时,模型方差(由特征解释)和特征重要性密切相关。

需要获得真实的结果。如果有人只为你提供模型和未标记的数据——而不是真实的结果——你就无法计算排列特征的重要性。

排列特征的重要性取决于对特征进行洗牌,这会增加测量的随机性。当重复排列时,结果可能会有很大差异。重复排列并对重复次数的重要性度量进行平均可以稳定度量,但会增加计算时间。

如果特征是相关的,则排列特征的重要性可能会受到不切实际的数据实例的影响。问题与部分依赖图相同:当两个或多个特征相关时,特征的排列会产生不太可能的数据实例。当它们呈正相关(例如人的身高和体重)并且我对其中一个特征进行洗牌时,我会创建不太可能甚至物理上不可能的新实例(例如,体重 2 米、体重 30 公斤的人),但我会使用这些新实例来衡量重要性。换句话说,对于相关特征的排列特征重要性,我们考虑当我们将特征与我们在现实中永远不会观察到的值交换时,模型性能会降低多少。检查特征是否强相关,如果是,请注意特征重要性的解释。然而,成对相关性可能不足以揭示问题。

另一个棘手的事情:通过划分两个特征之间的重要性,添加相关特征会降低相关特征的重要性。让我举一个例子来说明我所说的“分割”特征重要性:我们想要预测下雨的概率,并使用前一天上午 8:00 的温度作为特征以及其他不相关的特征。我训练了一个随机森林,结果发现温度是最重要的特征,一切都很好,第二天晚上我睡得很好。现在想象另一种情况,其中我另外包括上午 9:00 的温度作为与上午 8:00 的温度密切相关的特征。如果我已经知道上午 8:00 的温度,那么上午 9:00 的温度不会给我太多额外的信息。但是拥有更多函数总是好的,对吧?我训练了一个具有两个温度特征和不相关特征的随机森林。随机森林中的一些树获得了上午 8:00 的温度,另一些则获得了上午 9:00 的温度,还有一些则两者兼有,而另一些则没有。这两个温度特征加在一起比以前的单个温度特征更重要,但不是位于重要特征列表的顶部,每个温度现在都处于中间位置。通过引入相关特征,我将最重要的特征从重要性阶梯的顶端踢到了平庸。一方面这很好,因为它只是反映了底层机器学习模型的行为,这里是随机森林。上午 8:00 的温度变得不那么重要了,因为模型现在也可以依赖上午 9:00 的测量值。另一方面,它使特征重要性的解释变得更加困难。想象一下,你想检查特征是否存在测量错误。检查很昂贵,你决定只检查最重要的前 3 个函数。在第一种情况下,你将检查温度,在第二种情况下,你将不包含任何温度特征,因为它们现在共享重要性。即使重要性值在模型行为级别上可能有意义,但如果你具有相关特征,则会令人困惑。

8.5.6 备选方案

一种称为 PIMP 的算法采用置换特征重要性算法来提供重要性的 p p p 值。另一种基于损失的替代方法是从训练数据中省略特征,重新训练模型并测量损失的增加。置换特征并衡量损失的增加并不是衡量特征重要性的唯一方法。不同的重要性度量可以分为特定于模型的方法和与模型无关的方法。随机森林的 Gini 重要性或回归模型的标准化回归系数是模型特定重要性度量的示例。

置换特征重要性的与模型无关的替代方法是基于方差的度量。基于方差的特征重要性度量(例如 Sobol 指数或函数 ANOVA)对导致预测函数高方差的特征给予更高的重要性。还有 [SHAP 的重要性]](#shap) 与基于方差的重要性度量有相似之处。如果改变一个特征极大地改变了输出,那么它就很重要。这种重要性的定义不同于置换特征重要性的基于损失的定义。这在模型过度拟合的情况下很明显。如果模型过拟合并使用与输出无关的特征,则置换特征重要性将分配为零的重要性,因为该特征无助于产生正确的预测。另一方面,基于方差的重要性度量可能会赋予特征高重要性,因为当特征改变时预测会发生很大变化。

Wei (2015)12的论文很好地概述了各种重要性技术。

8.5.7 软件

R包 iml 用于示例。R 包 DALEXvip 以及 Python 库 alibiscikit-learnrfpimp实现了与模型无关的置换特征重要性。

8.6 全局代理

全局代理模型是一种可解释的模型,经过训练以近似黑盒模型的预测。通过解释代理模型,我们可以得出关于黑盒模型的结论。通过使用更多的机器学习来解决机器学习的可解释性!

8.6.1 理论

替代模型也用于工程:如果感兴趣的结果昂贵、耗时或难以测量(例如,因为它来自复杂的计算机模拟),则可以使用廉价且快速的结果替代模型。工程和可解释机器学习中使用的代理模型之间的区别在于,基础模型是机器学习模型(不是模拟),并且代理模型必须是可解释的。(可解释的)代理模型的目的是尽可能准确地近似基础模型的预测,同时使其具有可解释性。代理模型的概念可以用不同的名称找到:近似模型、元模型、响应面模型、仿真器……

关于理论:实际上不需要太多理论来理解代理模型。我们希望在 g g g 是可解释的约束下,用代理模型预测函数 g g g 尽可能接近我们的黑盒预测函数 f f f。对于函数 g g g 可以使用任何可解释的模型——例如来自可解释模型一章的模型。

例如线性模型:

g ( x ) = β 0 + β 1 x 1 + … + β p x p g(x)=\beta_0+\beta_1{}x_1{}+\ldots+\beta_p{}x_p g(x)=β0​+β1​x1​+…+βp​xp​

或决策树:

g ( x ) = ∑ m = 1 M c m I { x ∈ R m } g(x)=\sum_{m=1}^Mc_m{}I\{x\in{}R_m\} g(x)=m=1∑M​cm​I{x∈Rm​}

训练代理模型是一种与模型无关的方法,因为它不需要任何有关黑盒模型内部工作的信息,只需要访问数据和预测函数即可。如果底层机器学习模型被另一个替换,你仍然可以使用代理方法。黑盒模型类型和代理模型类型的选择是分离的。

执行以下步骤以获得代理模型:

  1. 选择数据集 X。这可以是用于训练黑盒模型的同一数据集,也可以是来自同一分布的新数据集。你甚至可以选择数据的子集或点网格,具体取决于你的应用程序。
  2. 对于选定的数据集 X,获取黑盒模型的预测。
  3. 选择可解释的模型类型(线性模型、决策树……)。
  4. 在数据集 X 及其预测上训练可解释模型。
  5. 恭喜!你现在有一个代理模型。
  6. 衡量代理模型复制黑盒模型预测的程度。
  7. 解释代理模型。

You may find approaches for surrogate models that have some extra steps or differ a little, but the general idea is usually as described here.

One way to measure how well the surrogate replicates the black box model is the R-squared measure:

R 2 = 1 − S S E S S T = 1 − ∑ i = 1 n ( y ^ ∗ ( i ) − y ^ ( i ) ) 2 ∑ i = 1 n ( y ^ ( i ) − y ^ ˉ ) 2 R^2=1-\frac{SSE}{SST}=1-\frac{\sum_{i=1}^n(\hat{y}_*^{(i)}-\hat{y}^{(i)})^2}{\sum_{i=1}^n(\hat{y}^{(i)}-\bar{\hat{y}})^2} R2=1−SSTSSE​=1−∑i=1n​(y^​(i)−y^​ˉ​)2∑i=1n​(y^​∗(i)​−y^​(i))2​

y ^ ∗ ( i ) \hat{y}_*^{(i)} y^​∗(i)​ 是的(一世)*是代理模型的第 i i i 个实例的预测, y ^ ( i ) \hat{y}^{(i)} y^​(i) 是黑盒模型的预测和 y ^ ˉ \bar{\hat{y}} y^​ˉ​ 是黑盒模型预测的平均值。SSE 代表误差平方和,SST 代表总平方和。R 平方度量可以解释为代理模型捕获的方差百分比。如果 R 平方接近 1(= 低 SSE),则可解释模型非常接近黑盒模型的行为。如果可解释模型非常接近,你可能希望将复杂模型替换为可解释模型。如果 R 平方接近 0(= 高 SSE),则可解释模型无法解释黑盒模型。

请注意,我们没有讨论底层黑盒模型的模型性能,即它在预测实际结果方面的表现如何。黑盒模型的性能对训练代理模型没有影响。代理模型的解释仍然有效,因为它是关于模型而不是关于现实世界的陈述。但是当然,如​​果黑盒模型不好,代理模型的解释就变得无关紧要,因为黑盒模型本身就无关紧要了。

我们还可以基于原始数据的子集构建代理模型或重新加权实例。通过这种方式,我们改变了代理模型输入的分布,从而改变了解释的重点(那么它就不再是真正的全局了)。如果我们通过数据的特定实例在本地对数据进行加权(实例与所选实例越接近,它们的权重越高),我们就会得到一个可以解释实例的个体预测的本地代理模型。

在[下一章]](#lime)中关于本地模型的信息。

8.6.2 示例

为了演示代理模型,我们考虑回归和分类示例。

首先,我们训练一个支持向量机来预测给定天气和日历信息的每日租用自行车数量。支持向量机的可解释性不是很好,因此我们用 CART 决策树作为可解释模型来训练一个代理来近似支持向量机的行为。


图 8.28:代理树的终端节点,近似于在自行车租赁数据集上训练的支持向量机的预测。节点中的分布表明,当温度高于 13 ∘ C ^{\circ}C ∘C以及当天在 2 年期间的晚些时候(切点为 435 天)时,代理树预测的租用自行车数量会增加。

代理模型的 R 平方(解释方差)为 0.77,这意味着它很好地逼近了潜在的黑盒行为,但并不完美。如果拟合完美,我们可以丢弃支持向量机并改用树。

在我们的第二个示例中,我们使用随机森林预测宫颈癌的概率。我们再次使用原始数据集训练决策树,但将随机森林的预测作为结果,而不是数据中的真实类别(健康与癌症)。


图 8.29:近似于在宫颈癌数据集上训练的随机森林的预测的代理树的终端节点。节点中的计数显示节点中黑盒模型分类的频率。

代理模型的 R 平方(方差解释)为 0.19,这意味着它不能很好地逼近随机森林,我们在得出关于复杂模型的结论时不应过度解释树。

8.6.3 优点

代理模型方法很灵活:可以使用可解释模型章节中的任何模型。这也意味着你不仅可以交换可解释的模型,还可以交换底层的黑盒模型。假设你创建了一些复杂的模型并将其解释给公司中的不同团队。一个团队熟悉线性模型,另一个团队可以理解决策树。你可以为原始黑盒模型训练两个代理模型(线性模型和决策树)并提供两种解释。如果你找到性能更好的黑盒模型,则不必更改解释方法,因为你可以使用相同类别的代理模型。

我认为这种方法非常直观和直接。这意味着它很容易实现,也很容易向不熟悉数据科学或机器学习的人解释。

使用R-squared measure,我们可以轻松地衡量我们的代理模型在近似黑盒预测方面有多好。

8.6.4 缺点

你必须意识到你得出的结论是关于模型而不是数据,因为代理模型永远不会看到真正的结果。

目前尚不清楚 R 平方的最佳截止值是什么,以便确信代理模型与黑盒模型足够接近。解释了 80 % 80\% 80% 的方差? 50 % 50\% 50%? 99 % 99\% 99%?

我们可以测量代理模型与黑盒模型的接近程度。让我们假设我们不是很接近,但足够接近。可能发生的情况是,可解释模型对于数据集的一个子集非常接近,但对于另一个子集却大相径庭。在这种情况下,简单模型的解释不会对所有数据点都同样好。

你选择作为代理的可解释模型具有所有优点和缺点

有些人认为,一般来说,不存在本质上可解释的模型(甚至包括线性模型和决策树),甚至对可解释性产生错觉也是危险的。如果你同意这种观点,那么这种方法当然不适合你。

8.6.5 软件

在示例中使用了 iml R 包。如果你可以训练机器学习模型,那么你应该能够自己实现代理模型。只需训练一个可解释的模型来预测黑盒模型的预测。

8.7 原型和批评

原型是代表所有数据的数据实例。批评是没有很好地由原型集表示的数据实例。批评的目的是与原型一起提供见解,特别是对于原型不能很好地代表的数据点。原型和批评可以独立于机器学习模型来描述数据,但它们也可以用于创建可解释的模型或使黑盒模型可解释。

在本章中,我使用“数据点”一词来指代单个实例,以强调实例也是坐标系中的一个点的解释,其中每个特征都是一个维度。下图显示了一个模拟的数据分布,其中一些实例被选为原型,一些实例被选为批评。小点是数据,大点是批评,大点是原型。(手动)选择原型以覆盖数据分布的中心,批评是没有原型的集群中的点。原型和批评总是来自数据的实际实例。


图 8.30:具有两个特征 x1 和 x2 的数据分布的原型和批评。

我手动选择了原型,这不能很好地扩展并且可能导致结果不佳。有很多方法可以在数据中找到原型。其中之一是 k-medoids,一种与 k-means 算法相关的聚类算法。任何返回实际数据点作为聚类中心的聚类算法都有资格选择原型。但是这些方法中的大多数只找到原型,而没有批评。本章介绍 Kim 等人的 MMD 评论家(2016)13,一种将原型和批评结合在一个框架中的方法。

MMD-critic 比较数据的分布和所选原型的分布。这是理解 MMD-critic 方法的中心概念。MMD-critic 选择最小化两个分布之间差异的原型。高密度区域的数据点是很好的原型,尤其是当点是从不同的“数据集群”中选择的时候。来自原型没有很好解释的区域的数据点被选为批评。

让我们更深入地研究这个理论。

8.7.1 理论

高层的 MMD-critic 程序可以简要概括为:

  1. 选择您想要查找的原型和批评的数量。
  2. 使用贪婪搜索找到原型。选择原型以使原型的分布接近数据分布。
  3. 通过贪婪搜索找到批评。选择点作为原型分布与数据分布不同的批评。

我们需要一些成分来找到具有 MMD-critic 的数据集的原型和批评。作为最基本的成分,我们需要一个核函数来估计数据密度。核函数是根据两个数据点的接近程度对它们进行加权的函数。基于密度估计,我们需要一个度量来告诉我们两个分布有多么不同,以便我们可以确定我们选择的原型的分布是否接近数据分布。这可以通过测量最大平均差异 (MMD)来解决。同样基于核函数,我们需要见证函数告诉我们两个分布在特定数据点的不同之处。使用见证函数,我们可以选择批评,即原型和数据分布发散的数据点,并且见证函数具有较大的绝对值。最后一个要素是对好的原型和批评的搜索策略,通过简单的贪婪搜索来解决。

让我们从最大平均差异 (MMD)开始,它衡量两个分布之间的差异。原型的选择创建了原型的密度分布。我们想评估原型分布是否与数据分布不同。我们用核密度函数估计两者。最大平均差异衡量两个分布之间的差异,它是根据两个分布的期望之间的差异的函数空间上的上确界。全清?就个人而言,当我看到如何用数据计算某些东西时,我会更好地理解这些概念。以下公式显示了如何计算平方 MMD 度量 (MMD2):

M M D 2 = 1 m 2 ∑ i , j = 1 m k ( z i , z j ) − 2 m n ∑ i , j = 1 m , n k ( z i , x j ) + 1 n 2 ∑ i , j = 1 n k ( x i , x j ) MMD^2=\frac{1}{m^2}\sum_{i,j=1}^m{}k(z_i,z_j)-\frac{2}{mn}\sum_{i,j=1}^{m,n}k(z_i,x_j)+\frac{1}{n^2}\sum_{i,j=1}^n{}k(x_i,x_j) MMD2=m21​i,j=1∑m​k(zi​,zj​)−mn2​i,j=1∑m,n​k(zi​,xj​)+n21​i,j=1∑n​k(xi​,xj​)

k k k 是一个核函数,用于测量两点的相似性,稍后会详细介绍。 m m m 是原型 z z z 的数量, n n n 是我们原始数据集中数据点 x x x 的数量。原型 z z z 是数据点 x x x 的选择。每个点都是多维的,即它可以有多个特征。MMD-critic 的目标是最小化 MMD2。MMD2 越接近于零,原型的分布就越适合数据。将 MMD2 降为零的关键是中间项,它计算原型与所有其他数据点之间的平均接近度(乘以 2)。如果这个术语加起来是第一项(原型彼此之间的平均接近度)加上最后一项(数据点彼此之间的平均接近度),那么原型完美地解释了数据。

下图说明了 MMD2 测量。第一个图显示了具有两个特征的数据点,其中数据密度的估计以阴影背景显示。其他每个图都显示了不同的原型选择,以及图标题中的 MMD2 度量。原型是大点,它们的分布显示为等高线。选择最能覆盖这些场景中数据的原型(左下)具有最低的差异值。


图 8.31:具有两个特征和不同原型选择的数据集的平方最大平均差异度量 (MMD2)。

核的选择是径向基函数核:

k ( x , x ′ ) = e x p ( − γ ∣ ∣ x − x ′ ∣ ∣ 2 ) k(x,x^\prime)=exp\left(-\gamma||x-x^\prime||^2\right) k(x,x′)=exp(−γ∣∣x−x′∣∣2)

其中 ∣ ∣ x − x ′ ∣ ∣ 2 ||x-x'||^2 ∣∣x−x′∣∣2 是两点之间的欧几里得距离,是缩放参数。内核的值随着两点之间的距离而减小,范围在零和一之间:当两点相距无限远时为零;当两点相等时。γ

我们在一个寻找原型的算法中结合了 MMD2 度量、内核和贪心搜索:

1. 从一个空的原型列表开始。
2. 虽然原型的数量低于所选数量 m:- 对于数据集中的每个点,检查将点添加到原型列表时减少了多少 MMD2。将最小化 MMD2 的数据点添加到列表中。
3. 返回原型列表。

寻找批评的剩余成分是见证函数,它告诉我们两个密度估计在特定点上的差异有多大。可以使用以下方法进行估算:

w i t n e s s ( x ) = 1 n ∑ i = 1 n k ( x , x i ) − 1 m ∑ j = 1 m k ( x , z j ) witness(x)=\frac{1}{n}\sum_{i=1}^nk(x,x_i)-\frac{1}{m}\sum_{j=1}^mk(x,z_j) witness(x)=n1​i=1∑n​k(x,xi​)−m1​j=1∑m​k(x,zj​)

对于两个数据集(具有相同的特征),见证函数为您提供了评估点 x 更适合哪个经验分布的方法。为了找到批评,我们在消极和积极的方向上寻找见证函数的极端值。见证函数中的第一项是点 x 和数据之间的平均接近度,第二项分别是点 x 和原型之间的平均接近度。如果点 x 的见证函数接近于零,则数据和原型的密度函数接近,这意味着原型的分布类似于点 x 处的数据分布。x 点的负见证函数意味着原型分布高估了数据分布(例如,如果我们选择了一个原型但附近只有很少的数据点);x 点的正见证函数意味着原型分布低估了数据分布(例如,如果 x 周围有很多数据点,但我们没有选择附近的任何原型)。

为了给您更多的直觉,让我们预先使用最低 MMD2 重用绘图中的原型,并显示几个手动选择的点的见证函数。下图中的标签显示了标记为三角形的各个点的见证函数值。只有中间的点具有较高的绝对值,因此很适合批评。

见证函数允许我们显式搜索原型没有很好地表示的数据实例。批评是见证函数中绝对值高的点。像原型一样,批评也是通过贪婪搜索找到的。但是,我们不是减少整体 MMD2,而是寻找最大化包括见证函数和正则项的成本函数的点。优化函数中的附加项强制点的多样性,这是必要的,以便点来自不同的集群。

第二步与如何找到原型无关。我也可以精心挑选一些原型并使用此处描述的程序来学习批评。或者原型可以来自任何聚类过程,比如 k-medoids。

这就是MMD批评理论的重要部分。仍然存在一个问题:** MMD-critic 如何用于可解释的机器学习?**

MMD-critic 可以通过三种方式增加可解释性:

帮助更好地理解数据分布;

通过建立一个可解释的模型;

通过使黑盒模型可解释。

如果您将 MMD-critic 应用于您的数据以查找原型和批评,它将提高您对数据的理解,特别是如果您有一个具有边缘情况的复杂数据分布。但是通过MMD-critic,您可以获得更多!

例如,您可以创建一个可解释的预测模型:所谓的“最近原型模型”。预测函数定义为:

f ^ ( x ) = a r g m a x i ∈ S k ( x , x i ) \hat{f}(x)=argmax_{i\in{}S}k(x,x_i) f^​(x)=argmaxi∈S​k(x,xi​)

这意味着我们从原型集合 S 中选择最接近新数据点的原型 i,从某种意义上说,它产生了内核函数的最高值。原型本身作为预测的解释返回。此过程具有三个调整参数:内核类型、内核缩放参数和原型数量。所有参数都可以在交叉验证循环中进行优化。在这种方法中没有使用批评。

作为第三种选择,我们可以使用 MMD-critic 通过检查原型和批评及其模型预测来使任何机器学习模型在全球范围内都可解释。程序如下:

1. 使用 MMD-critic 查找原型和批评。
2. 像往常一样训练机器学习模型。
3. 使用机器学习模型预测原型和批评的结果。
4. 分析预测:在哪些情况下算法是错误的?现在你有许多很好地代表数据的例子,可以帮助你找到机器学习模型的弱点。

这有什么帮助?

还记得 Google 的图像分类器将黑人识别为大猩猩吗?也许他们应该在部署他们的图像识别模型之前使用这里描述的过程。仅仅检查模型的性能是不够的,因为如果它是 99 % 99\% 99% 正确的,那么这个问题可能仍然在 1 % 1\% 1% 之内。标签也可能是错误的!如果预测有问题,则检查所有训练数据并执行完整性检查可能会发现问题,但这是不可行的。但是选择——比如说几千个——原型和批评是可行的,并且可能揭示了数据的问题:它可能表明缺乏深色皮肤的人的图像,这表明存在多样性的问题。数据集。或者它可以展示一个或多个深色皮肤的人的图像作为原型,或者(可能)作为臭名昭著的“大猩猩”分类的批评。我不保证 MMD-critic 肯定会拦截这些错误,但这是一个很好的理智检查。

8.7.2 示例

以下 MMD-critic 示例使用手写数字数据集。

查看实际原型,你可能会注意到每个数字的图像数量不同。这是因为在整个数据集中搜索了固定数量的原型,而不是每个类的固定数量。正如预期的那样,原型展示了不同的数字书写方式。


图 8.33:手写数字数据集的原型。

8.7.3 优点

在一项用户研究中,MMD-critic 的作者向参与者提供了图像,他们必须在视觉上与两组图像中的一组图像匹配,每组图像代表两个类别中的一个(例如两个犬种)。当集合显示原型和批评而不是班级的随机图像时,参与者表现最好。

你可以自由选择原型和批评的数量

MMD-critic 使用数据的密度估计。这适用于任何类型的数据和任何类型的机器学习模型

该算法易于实现

MMD-critic 在用于提高可解释性的方式上非常灵活。它可以用来理解复杂的数据分布。它可用于构建可解释的机器学习模型。或者它可以阐明黑盒机器学习模型的决策。

发现批评与原型的选择过程无关。但是根据 MMD-critic 选择原型是有道理的,因为原型和批评都是使用比较原型和数据密度的相同方法创建的。

8.7.4 缺点

虽然在数学上,原型和批评的定义不同,但它们的区别是基于一个临界值(原型的数量)。假设你选择的原型数量太少而无法覆盖数据分布。批评最终会出现在没有得到很好解释的领域。但是,如果你要添加更多原型,它们最终也会出现在相同的区域中。任何解释都必须考虑到批评强烈依赖于现有原型和原型数量的(任意)截止值。

你必须选择原型和批评的数量。尽管这可能很好,但它也是一个缺点。我们实际上需要多少原型和批评?越多越好?越少越好吗?一种解决方案是通过测量人类用于查看图像任务的时间来选择原型和批评的数量,这取决于特定的应用程序。只有在使用 MMD-critic 构建分类器时,我们才有办法直接对其进行优化。一种解决方案可能是在 x 轴上显示原型数量和在 y 轴上显示 MMD2 测量值的 screeplot。我们会选择 MMD2 曲线变平的原型数量。

其他参数是内核的选择和内核缩放参数。我们遇到了与原型数量和批评相同的问题:我们如何选择内核及其缩放参数?同样,当我们使用 MMD-critic 作为最近的原型分类器时,我们可以调整内核参数。然而,对于 MMD-critic 的无监督用例,尚不清楚。(也许我在这里有点苛刻,因为所有无监督的方法都有这个问题。)

它将所有特征作为输入,而忽略了某些特征可能与预测感兴趣的结果无关的事实。一种解决方案是仅使用相关特征,例如图像嵌入而不是原始像素。只要我们有办法将原始实例投影到仅包含相关信息的表示上,这就会起作用。

有一些可用的代码,但它还没有实现为很好的打包和文档化的软件

8.7.5 代码和替代方案

MMD-critic 的实现可以在作者的 the authors GitHub repository 中找到。

最近开发了 MMD-critic 的扩展:Protodash。作者声称在他们的 出版物 中优于 MMD 评论家。IBM AIX360 工具中提供了 Protodash 实现。

寻找原型的最简单的替代方法是Kaufman 等人的k-medoids 。(1987 年)。14


  1. Friedman, Jerome H. “Greedy function approximation: A gradient boosting machine.” Annals of statistics (2001): 1189-1232. ↩︎

  2. Greenwell, Brandon M., Bradley C. Boehmke, and Andrew J. McCarthy. “A simple and effective model-based variable importance measure.” arXiv preprint arXiv:1805.04755 (2018). ↩︎ ↩︎

  3. Zhao, Qingyuan, and Trevor Hastie. “Causal interpretations of black-box models.” Journal of Business & Economic Statistics, to appear. (2017). ↩︎

  4. Apley, Daniel W., and Jingyu Zhu. “Visualizing the effects of predictor variables in black box supervised learning models.” Journal of the Royal Statistical Society: Series B (Statistical Methodology) 82.4 (2020): 1059-1086. ↩︎ ↩︎

  5. Grömping, Ulrike. “Model-Agnostic Effects Plots for Interpreting Machine Learning Models.” Reports in Mathematics, Physics and Chemistry: Department II, Beuth University of Applied Sciences Berlin. Report 1/2020 (2020) ↩︎

  6. Inglis, Alan, Andrew Parnell, and Catherine Hurley. “Visualizing Variable Importance and Variable Interaction Effects in Machine Learning Models.” arXiv preprint arXiv:2108.04310 (2021). ↩︎

  7. Hooker, Giles. “Discovering additive structure in black box functions.” Proceedings of the tenth ACM SIGKDD international conference on Knowledge discovery and data mining. (2004). ↩︎ ↩︎

  8. Hooker, Giles. “Generalized functional anova diagnostics for high-dimensional functions of dependent variables.” Journal of Computational and Graphical Statistics 16.3 (2007): 709-732. ↩︎

  9. Caruana, Rich, et al. “Intelligible models for healthcare: Predicting pneumonia risk and hospital 30-day readmission.” Proceedings of the 21th ACM SIGKDD international conference on knowledge discovery and data mining. (2015). ↩︎

  10. Breiman, Leo.“Random Forests.” Machine Learning 45 (1). Springer: 5-32 (2001). ↩︎

  11. Fisher, Aaron, Cynthia Rudin, and Francesca Dominici. “All models are wrong, but many are useful: Learning a variable’s importance by studying an entire class of prediction models simultaneously.” http://arxiv.org/abs/1801.01489 (2018). ↩︎

  12. Wei, Pengfei, Zhenzhou Lu, and Jingwen Song. “Variable importance analysis: a comprehensive review.” Reliability Engineering & System Safety 142 (2015): 399-432. ↩︎

  13. Kim, Been, Rajiv Khanna, and Oluwasanmi O. Koyejo. “Examples are not enough, learn to criticize! Criticism for interpretability.” Advances in Neural Information Processing Systems (2016). ↩︎

  14. Kaufman, Leonard, and Peter Rousseeuw. “Clustering by means of medoids”. North-Holland (1987). ↩︎

【人工智能系列经典图书翻译】可解释机器学习(第二版) 第8章 全局模型无关方法相关推荐

  1. 动手学机器学习(第二版)-第四章训练模型

    第四章 训练模型 线性模型(Linear Regression) 线性模型的一般形式如下 y^=θ0+θ1x1+θ2x2+-+θnxn\hat{y} = \theta_0 + \theta_1 x_1 ...

  2. 机器学习新-统计机器学习第二版

    本书介绍 统计领域不断受到科学和工业带来的问题的挑战.在早期,这些问题往往来自农业和工业试验,范围相对较小.随着计算机和信息时代的到来,统计问题在规模和复杂性上都发生了爆炸.数据存储.组织和搜索领域的 ...

  3. 机器学习实践—基于Scikit-Learn、Keras和TensorFlow2第二版—第9章 无监督学习技术(Chapter9_Unsupervised_Learning_Techniques)

    机器学习实践-基于Scikit-Learn.Keras和TensorFlow2第二版-第9章 无监督学习技术(Chapter9_Unsupervised_Learning_Techniques) 虽然 ...

  4. Linux管理传世经典:Linux 系统管理技术手册(第二版) 中文高清版下载

    Linux管理传世经典:Linux 系统管理技术手册(第二版) 中文高清版下载 转载于:https://www.cnblogs.com/gavinhughhu/archive/2010/07/05/1 ...

  5. 补学图论算法:算法竞赛入门经典(第二版)第十一章:

    补学图论算法:算法竞赛入门经典(第二版)第十一章: 倒排索引还没有实现! 下面是左神的图论算法,并查集笔记.和一个美团题目. ''' https://www.nowcoder.com/live/11? ...

  6. 计算机程序的构造和解释(第二版)笔记

    计算机程序的构造和解释(第二版) 跳转至: 导航. 搜索 define cond if (else) special form,不能实现为对cond的封装(why?) and or not sqrt ...

  7. 《sklearn机器学习第二版》(加文海克著)学习笔记

    本书附以sklearn机器学习示例程序,从调用函数的角度解释了常用的机器学习的方法,包括线性回归.逻辑回归.决策树.SVM.朴素贝叶斯.ANN.K-means.PCA.原理粗浅易懂,注重代码实践.本文 ...

  8. 【新书】用Python3六步掌握机器学习第二版,469页pdf,Mastering Machine Learning

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 https://www.apress.com/gp/book/978148424946 ...

  9. python机器学习第二版(读书笔记)

    第一章 赋予计算机从数据中学习的能力 每一行:代表一个样本,行向量用上标表示:每一列:代表一个维度,列向量用下标表示. numpy:多维矩阵的存储和操作数据,pandas:基于numpy,提供更高级操 ...

最新文章

  1. 美多商城之验证码(异步方案)
  2. Oracle-11g安装与使用
  3. GPS轨迹数据集免费下载资源整理
  4. monkey自定义脚本实践
  5. Angular中修改第三方组件的样式 - zorro日期选择器右端不对齐的BUG
  6. android8 呼吸灯,红米note8pro呼吸灯颜色如何设置?
  7. win7系统 软件服务器地址,老司机传授win7系统设置DNS服务器地址的设置方案.
  8. 知道端口号如何查看应用位置
  9. 单片机模拟计算机课设,单片机课程设计题目汇总(全)
  10. SQL Server 2012 扩展事件(2)体系结构
  11. 如何往一个指定的地址写入一个值呢
  12. signature=32c56289e10e63e51063305adfc34ef0,Deconfinement transition and Black Holes
  13. 点阵字库制作和使用(一)
  14. Android小白从零开始学Android开发的要点总结(内含福利)
  15. WKWebView刷新URL
  16. PMP课程笔记:第13章 项目相关方管理
  17. 【Flutter小记4】Android手动设置Camera焦点没效果的解决方案CameraImage转YUV或RGBA要注意!
  18. 2017暑期实习招聘-产品经理-微软WDGAE(2)-第3轮面试
  19. 2021-09-13项目部署
  20. 医院“移动”不起来软肋在数据安全?

热门文章

  1. windows文件介绍
  2. 【日常修机】打印机故障维护
  3. mysql auto position_MySQL内核月报 2015.01-MySQL · 捉虫动态· 设置 gtid_purged 破坏AUTO_POSITION复制协议-阿里云开发者社区...
  4. 27、Bugku——XX的邀请码writeup
  5. c语言中空指针是什么意思,空指针 到底是什么意思?
  6. @深度学习硬件选择与配置(避坑与指南)
  7. 【数理统计】数理统计的基本概念
  8. 生鲜超市如何打造线上私域流量池?
  9. 2020年稳超2019年,UCloud优刻得营收高速增长!
  10. kubernetes基于node-problem-detector实现异常节点检测