Functional Decomposition
机器学习中的监督学习模型可被视为一个函数,该函数将高维特征向量作为输入,然后产生预测或分类概率作为输出。函数分解(functional decomposition)分解高维函数并将其表达为可以可视化的个体特征效应和交互效应总和,而且函数分解是许多可解释方法的潜在基本原则之一。它会帮助你更好地理解可解释方法。
让我们直入主题并且看一个特定的函数,该函数采用二维向量作为输入,产生一维输出:
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
将函数视为一个机器学习模型,用一个带有等高线的二维图像来直观显示该函数:

该函数是在自变量 X 1 X_1 X1取一个很大的值和 X 2 X_2 X2取一个很小的值的时候函数值较大; X 1 X_1 X1取值较小, X 2 X_2 X2取值较大的时候函数值取值较小。预测函数不是简单的两个特征之间的相加效果,而是两者之间的相互作用。在图1中展现了特征交互的作用,效应值的变化在更改了 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
和
f
^
2
\hat f_1和 \hat f_2
f^1和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\backsim3.18 f^0∽3.18,将其他项的分函数分别可视化之后得到图2所示:

图2显示了 X 1 X_1 X1是指数类型的响应, X 2 X_2 X2是显示出了负效应, x 1 ⋅ x 2 x_1\cdot x_2 x1⋅x2交互项是一个双曲抛物面。
How not to compute the components I
上述部分看一眼公式就能得到函数分解的相应答案,并不需要什么花哨的方法。对于特征
x
1
x_1
x1,我们可以得到只包含
x
1
x_1
x1的项
f
^
1
(
x
1
)
=
e
x
1
\hat f_1(x_1)=e^{x_1}
f^1(x1)=ex1;对于
x
2
x_2
x2来说是
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)要复杂得多,涉及到什么是相互作用。假设我们两个特征
x
1
x_1
x1和
x
2
x_2
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,其中两个特征都取大于零的值并且彼此独立。通过我们对公式策略的研究,我们可以得出结论,特征
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来说就是
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交互项就变成了
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)缺少对简洁公式的获取,我们需要一种仅使用预测函数或分类分数的方法。为了解决缺乏定义的问题,我们需要一些公理来告诉我们各函数项应该是什么样子,以及它们之间的关系。但是首先,我们应该更精确地定义什么是函数分解。
Functional Decomposition
假设有一个函数
f
^
:
R
p
→
R
\hat f :\mathbb{R}^p\rightarrow \mathbb{R}
f^:Rp→R,输入是
p
p
p维特征向量并产生一维输出。这可以是回归函数,但也可以是给定类别的分类概率或给定聚类的分数(无监督机器学习)。完全分解后,我们可以将预测函数表示为函数分量的总和:
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{aligned} \hat f(x)=&\hat f_0+\hat f_1(x_1)+\dots+\hat f_p(x_p)\\ &+\hat f_{1,2}(x_1,x_2)+\dots+\hat f_{1,p}(x_1,x_p)+\dots+\hat f_{p-1,p}(x_{p-1,x_p})\\ &+\dots\\ &+\hat f_{1,\dots ,p}(x_1,\dots ,x_p) \end{aligned}
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,\dots,p\}
S⊆{1,…,p},这个集合包含了截距项也就是
S
=
∅
S=\emptyset
S=∅,主要的函数效应
(
∣
S
∣
=
1
)
(|S|=1)
(∣S∣=1),以及特征之间的交互项
(
∣
S
∣
≥
1
)
(|S|\ge 1)
(∣S∣≥1)。有了关于这个子集的定义,我们将分解写成如下的形式:
f
^
(
x
)
=
∑
s
⊆
{
1
,
…
,
p
}
f
^
S
(
x
S
)
\hat f(x)=\sum_{s\subseteq\{1,\dots,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
S只包含一个特征则只存在一个主要的函数效应,若
∣
S
∣
≥
1
|S|\ge1
∣S∣≥1则存在特征交互项。
How not to Compute the Components II
到目前为止,我一直避免谈论分解的函数项是如何定义和计算的。我们已经含蓄地谈到的唯一约束是项的数量和维度,并且各项的总和应该产生原始函数。但是如果对项没有进一步的限制,它们就不是唯一的。这意味着我们可以在主效应和交互作用之间,或者低阶交互作用(少数特征)和高阶交互作用(更多特征)之间转换效应。在本章开始的例子中,我们可以将两个主要效果都设置为零,并将它们的效果添加到交互效果中。
这里有一个更极端的例子,说明了对组件进行约束的必要性。假设你有一个三维函数。这个函数看起来像什么并不重要,但是下面的分解总是有效的:
f
^
0
\hat f_0
f^0是0.12。
f
^
1
(
x
1
)
=
2
⋅
x
1
+
number of shoes you own
\hat f_1(x_1)=2\cdot x_1+\text{number of shoes you own}
f^1(x1)=2⋅x1+number of shoes you own。
f
^
2
,
f
^
3
,
f
^
1
,
2
,
f
^
1
,
3
,
f
^
2
,
3
\hat f_2,\hat f_3,\hat f_{1,2},\hat f_{1,3},\hat f_{2,3}
f^2,f^3,f^1,2,f^1,3,f^2,3全是零。为了让这个技巧有效,规定
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,\dots,p\}}\hat f_S(x_S)
f^1,2,3(x1,x2,x3)=f^(x)−∑s⊂{1,…,p}f^S(xS)。因此,包含所有特征的相互作用项简单地吸收了所有剩余的效应,根据定义,这总是有效的,因为所有分量的总和给了我们原始的预测函数。如果你把这作为你的模型的解释,这种分解将不会有很大的意义,而且很容易引起误解。
通过指定进一步的约束或用于计算函数的分解项的特定方法,可以避免模糊性。在本章中,我们将讨论三种以不同方式实现功能分解的方法:
- (Generalized) Functional ANOVA
- Accumulated Local Effects
- Statistical regression models
Hooker (2004)39提出了功能性方差分析。这种方法的一个要求是模型预测函数
f
^
\hat f
f^是平方可积的。与任何函数分解一样,函数方差分析将功能分解为几个函数项:
f
^
(
x
)
=
∑
s
⊆
{
1
,
…
,
p
}
f
^
S
(
x
S
)
\hat f(x)=\sum_{s\subseteq\{1,\dots,p\}}\hat f_S(x_S)
f^(x)=s⊆{1,…,p}∑f^S(xS)
Hooker用公式定义一下函数的每一项:
f
^
S
(
x
)
=
∫
X
−
S
(
f
^
(
x
)
−
∑
V
⊂
S
f
^
V
(
x
)
)
d
X
−
S
\hat f_S(x)=\int_{X-S}(\hat f(x)-\sum_{V\subset S}\hat f_V(x))dX_{-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}(\hat f(x))dX_{-S}-\int_{X_{-S}}(\sum_{V\subset S}\hat f_V(x))dX_{-S}
f^S(x)=∫X−S(f^(x))dX−S−∫X−S(V⊂S∑f^V(x))dX−S
左侧是关于从集合中排除的特征的预测函数的积分 S,表示为
−
S
-_S
−S。例如,如果我们计算特征2和3的双向相互作用分量,我们将对特征1、4、5…进行积分,该积分也可以被视为预测函数关于以下各项的期望值
X
−
S
X − S
X−S 假设所有特性从最小值到最大值都遵循均匀分布。从这个区间中,我们减去子集 S的所有分量。这种减法消除了所有低阶效果的影响,并使效果居中。对于集合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包含所有特征:
f
^
0
(
x
)
=
∫
X
f
^
(
x
)
d
X
\hat f_0(x)=\int_X \hat f(x)dX
f^0(x)=∫Xf^(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}(\hat f(x)-\hat f_0)dX_{-S}
f^1(x)=∫X1(f^(x)−f^0)dX−S
完成
f
^
1
,
2
\hat f_{1,2}
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
)
)
=
∫
X
3
,
4
(
f
^
(
x
)
−
f
^
1
(
x
)
−
f
^
2
(
x
)
+
f
^
0
)
d
X
3
,
X
4
\begin{aligned} \hat f_{1,2}(x)&=\int_{X_{3,4}}(\hat f(x)-(\hat f_0(x)+\hat f_1(x)-\hat f_0+\hat f_2(x)-\hat f_0))\\ &=\int_{X_{3,4}}(\hat f(x)-\hat f_1(x)-\hat f_2(x)+\hat f_0)dX_3,X_4\\ \end{aligned}
f^1,2(x)=∫X3,4(f^(x)−(f^0(x)+f^1(x)−f^0+f^2(x)−f^0))=∫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 , for S不等于V \int \hat f_S(x_S)\hat f_V(x_V)dX=0,\quad\text{for S不等于V} ∫f^S(xS)f^V(xV)dX=0,for S不等于V
- 方差分解: σ f ^ 2 = ∫ f ^ ( x ) 2 d X , then σ f ^ 2 = ∑ S ⊆ { 1 , … , p } σ S 2 ( f ^ S ) \sigma_{\hat f}^2=\int \hat f(x)^2dX,\quad\text{then}\sigma_{\hat f}^2=\sum_{S\subseteq \{1,\dots ,p\}}\sigma_S^2(\hat f_S) σf^2=∫f^(x)2dX,thenσf^2=∑S⊆{1,…,p}σS2(f^S)
零均值定理意味着所有的影响或相互作用都以零为中心。因此,位置x处的解释相对于中心预测,而不是绝对预测。
正交定理意味着函数分解项之间不共享信息。例如,特征的一阶效应
X
1
X_1
X1和的相互作用项
X
1
X_1
X1和 X2没有关联。由于正交性,所有分量都是“纯”的,因为它们不会混合效果。很有意义的是,比如说,函数的分解项
X
4
X_4
X4应该独立于特征之间的交互项
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
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的工作原理是将方差除以变量并将其归因于变量。因此,函数方差分析可以被看作是这一概念对任何函数的扩展。
当特征相关时,函数方差分析出现问题。作为一种解决方案,广义函数方差分析已被提出。
Generalized Functional ANOVA(Analysis of Variance) for Dependent Features
与大多数基于采样数据的解释技术(如PDP)相似,当特征相关时,功能性方差分析会产生误导性结果。如果我们对均匀分布进行积分,而实际上特征是相互依赖的,那么我们会创建一个新的数据集,该数据集会偏离联合分布,并推断出不太可能的特征值组合。
Hooker(2007年)提出了广义泛函方差分析,这是一种适用于从属特征的分解。它是我们前面遇到的函数方差分析的推广,也就是说函数方差分析是广义函数方差分析的特例。分量被定义为f在加法函数空间上的投影:
f
^
S
(
x
S
)
=
a
r
g
m
i
n
g
s
∈
L
2
(
R
S
)
S
∈
P
∫
(
f
^
(
x
)
−
∑
s
⊂
q
g
S
(
x
S
)
)
2
ω
(
x
)
d
x
\hat f_S(x_S)=argmin_{gs}\in L^2(\mathbb{R}^S)S\in P\int(\hat f(x)-\sum_{s\subset q} gS(x_S))^2\omega(x)dx
f^S(xS)=argmings∈L2(RS)S∈P∫(f^(x)−s⊂q∑gS(xS))2ω(x)dx
分解项不满足正交性,而是满足分层正交性条件:
∀
f
^
S
(
x
S
)
∣
S
⊂
U
:
∫
f
^
S
(
x
S
)
f
^
U
(
x
U
)
ω
(
x
)
d
x
=
0
\forall \hat f_S(x_S)|S\subset U:\int \hat f_S(x_S)\hat f_U(x_U)\omega (x)dx=0
∀f^S(xS)∣S⊂U:∫f^S(xS)f^U(xU)ω(x)dx=0
分层正交不同于正交性,对于两个特征集合S和U,他们都不是另外一个的子集(例如S={1,2})和U={2,3},
f
^
S
\hat f_S
f^S,
f
^
U
\hat f_U
f^U函数项的分解不必要是正交的,分解在层级是正交的即可。但是所有的子集的必须正交。因此,解释在相关方面有所不同: 与ALE章节中的M图类似,广义功能方差分析分量可以纠缠相关特征的(边际)效应。 分量是否纠缠边际效应还取决于权重函数的选择
ω
(
x
)
\omega(x)
ω(x). 如果我们选择
ω
\omega
ω作为单位立方体上的均匀度量,我们从上一节中获得函数方差分析。
ω
\omega
ω 的自然选择是联合概率分布函数。 然而,联合分布通常是未知的,并且难以估计。 一个技巧可以从单位立方体上的统一测量开始,并切出没有数据的区域。
估计是在特征空间中的点网格上完成的,并表示为可以使用回归技术解决的最小化问题。 然而,这些分量不能单独计算,也不能分层计算,但必须解决涉及其他分量的复杂方程组。 因此,计算非常复杂且计算密集。