最近在啃 Shai Shalev-Shwartz and Shai Ben-David 的 Understanding Machine Learning: From Theory to Algorithms,实在是太硬核。只看懂了这一个小小的部分所以先记下来吧。部分参考 Shai Shalev-Shwartz 的 Lecture notes(讲义本身写的很不错,可惜没有英文的在线课程。如果有这方面更好的在线资源欢迎交流分享。)
定义
VC 维度(Vapnik-Chervonenkis 维度)是衡量一个假设类(hypothesis class) H \mathcal{H} H 的表达能力的关键概念,它与shattering密切相关。
设 C = { x 1 , … , x ∣ C ∣ } ⊂ X C = \{x_1, \dots, x_{|C|}\} \subset \mathcal{X} C={x1,…,x∣C∣}⊂X,其中 X \mathcal{X} X为样本集。
设
H
C
\mathcal{H}_C
HC 为
H
\mathcal{H}
H 在
C
C
C 上的限制,即
H
C
=
{
h
C
:
h
∈
H
}
\mathcal{H}_C = \{ h_C : h \in \mathcal{H} \}
HC={hC:h∈H}
其中,
h
C
:
C
→
{
0
,
1
}
h_C: C \to \{0,1\}
hC:C→{0,1},可以将C中的所有样本
x
i
x_i
xi映射到一个二元分类。并且,
h
C
h_C
hC满足对所有
x
i
∈
C
x_i \in C
xi∈C,
h
C
(
x
i
)
=
h
(
x
i
)
h_C(x_i) = h(x_i)
hC(xi)=h(xi)。
观察发现,我们可以将每个
h
C
h_C
hC 表示为向量
(
h
(
x
1
)
,
…
,
h
(
x
∣
C
∣
)
)
∈
{
0
,
1
}
∣
C
∣
(h(x_1), \dots, h(x_{|C|})) \in \{0,1\}^{|C|}
(h(x1),…,h(x∣C∣))∈{0,1}∣C∣
因此,
∣
H
C
∣
≤
2
∣
C
∣
|\mathcal{H}_C| \leq 2^{|C|}
∣HC∣≤2∣C∣
当且仅当 ∣ H C ∣ = 2 ∣ C ∣ |\mathcal{H}_C| = 2^{|C|} ∣HC∣=2∣C∣时,我们说 H \mathcal{H} H shatter C C C 。
VC 维度(Vapnik-Chervonenkis 维度)定义为:
VCdim
(
H
)
=
sup
{
∣
C
∣
:
H
shatters
C
}
\text{VCdim}(\mathcal{H}) = \sup \{|C| : \mathcal{H} \text{ shatters } C\}
VCdim(H)=sup{∣C∣:H shatters C}
即,VC 维度是使得
H
H
H 对
C
C
C 没有任何先验约束的最大集合大小。
概念解释
我们通过一些限制来定义假设类
H
\mathcal{H}
H,这个假设类
H
\mathcal{H}
H中有一系列的函数
h
h
h,可能是有限数量的,也可能是无限数量的。下面的部分提供了一些关于
H
\mathcal{H}
H的具体的例子。
数据集
C
C
C是从实例空间
X
\mathcal{X}
X中随机取样的一个数据集。目前我们讨论的是二分类问题,数据集
C
C
C中的每一个
x
i
x_i
xi都被分类到
{
0
,
1
}
\{0,1\}
{0,1}两个类别中的一个。
我们一开始只确定了了数据集
C
C
C,数据集中每个
x
i
x_i
xi对应的分类并没有给出,它可能取
{
0
,
1
}
\{0,1\}
{0,1}中的任一个。
H
\mathcal{H}
H shatter
C
C
C则意味着,不管每个
x
i
x_i
xi取
{
0
,
1
}
\{0,1\}
{0,1}中的哪一个,在
H
\mathcal{H}
H中总能找到一个分类函数
h
C
h_C
hC,满足
∀
x
i
∈
C
,
h
C
(
x
i
)
=
y
i
\forall x_i \in C,h_C(x_i)=y_i
∀xi∈C,hC(xi)=yi。
而VC 维度则是
H
\mathcal{H}
H能 shatter 的最大数据集的大小。换句话说:
- 如果某个集合 C C C 被 H \mathcal{H} H shatter,说明 H \mathcal{H} H 能在这个集合上实现所有可能的分类。
- H \mathcal{H} H 的 VC 维度是它能 shatter 的最大集合的大小。
VC 维度衡量的是模型的复杂度——它表示模型类能够“自由”拟合多少个点的所有可能分类,而不受任何限制。
VC维度的概念对无限假设类的PAC可学习的定义上有重要意义。VC维度高的模型代表“过于自由”的假设类。可是自由拟合太多点的假设类并不好,虽然它能应对更为复杂的变化,它更有可能导致过拟合,从而在实际的应用中表现并不好。而VC维度低的模型则更受限制,导致欠拟合。
VC 维度在统计学习理论中至关重要,它帮助我们理解模型的表达能力和泛化能力!
假设集 H \mathcal{H} H的VC维度的证明方法
为了证明 VCdim ( H ) = d \text{VCdim}(\mathcal{H}) = d VCdim(H)=d,也就是 d = sup { ∣ C ∣ : H shatters C } d=\sup \{|C| : \mathcal{H} \text{ shatters } C\} d=sup{∣C∣:H shatters C},我们需要证明:
- 存在一个大小为 d d d的集合 C C C 能被 H \mathcal{H} H shatter。(注意,此处存在即可,下面才是对所有。)
- 所有大小为 d + 1 d+1 d+1的集合都不能被 H \mathcal{H} H shatter。
几种常见假设类的VC维度
单个阈值分类器(1D)
假设我们在一维数轴上进行二分类,使用单个阈值作为分类边界:
h
(
x
)
=
{
1
,
x
≥
θ
0
,
x
<
θ
h(x) = \begin{cases} 1, & x \geq \theta \\ 0, & x < \theta \end{cases}
h(x)={1,0,x≥θx<θ
那么:
- 对于 1 个点:可以 shatter(两种分类都能实现)。
- 对于 2 个点:可以 shatter(任何 0-1 组合都能找到阈值实现)。
- 对于 3 个点:不能 shatter(某些 0-1 组合无法由单个阈值实现)。例如,两个在边界的点分类为1,而中间的点分类为0时,则无法区分。
所以,单个阈值分类器的 VC 维度是 2。
二位空间中的矩形分类器
设输入空间
X
=
R
2
\mathcal{X} = \mathbb{R}^2
X=R2。假设集合
H
=
{
h
(
a
1
,
a
2
,
b
1
,
b
2
)
∣
a
1
<
a
2
and
b
1
<
b
2
}
\mathcal{H} = \{ h_{(a_1,a_2,b_1,b_2)} \mid a_1 < a_2 \text{ and } b_1 < b_2 \}
H={h(a1,a2,b1,b2)∣a1<a2 and b1<b2},其中判别函数定义为:
h
(
a
1
,
a
2
,
b
1
,
b
2
)
(
x
1
,
x
2
)
=
{
1
iff
x
1
∈
[
a
1
,
a
2
]
and
x
2
∈
[
b
1
,
b
2
]
0
else
h_{(a_1,a_2,b_1,b_2)}(x_1, x_2) = \begin{cases} 1 & \text{iff } x_1 \in [a_1, a_2] \text{ and } x_2 \in [b_1, b_2] \\ 0 & \text{else} \end{cases}
h(a1,a2,b1,b2)(x1,x2)={10iff x1∈[a1,a2] and x2∈[b1,b2]else
该假设空间描述了平面直角坐标系中,所有边与坐标轴平行的矩形区域所构成的分类器集合。它的VC维度是4,原因见图:
只存在四个点时,我们可以选取矩形在每个维度上的两条边的取值选择包含/不包含四个点中的任意组合。然而第五个点在中间时,假设新加入的这个点和其余所有点的取值相反,那么矩形无法做到排除这个点在矩形外而包含其他四个点在矩形内。
有限假设类
设
H
\mathcal{H}
H 为有限假设类。显然,对于任意点集
C
C
C,有
∣
H
C
∣
≤
∣
H
∣
|\mathcal{H}_C| \leq |\mathcal{H}|
∣HC∣≤∣H∣。因此当
∣
H
∣
<
2
∣
C
∣
|\mathcal{H}| < 2^{|C|}
∣H∣<2∣C∣ 时,
C
C
C 必然无法被shatter。因此,
VCdim
(
H
)
≤
log
2
(
∣
H
∣
)
\text{VCdim}(\mathcal{H}) \leq \log_2(|\mathcal{H}|)
VCdim(H)≤log2(∣H∣)。
以上我们只是证明了
VCdim
(
H
)
≤
log
2
(
∣
H
∣
)
\text{VCdim}(\mathcal{H}) \leq \log_2(|\mathcal{H}|)
VCdim(H)≤log2(∣H∣),但实际上
VCdim
(
H
)
\text{VCdim}(\mathcal{H})
VCdim(H)可能会远小于
log
2
(
∣
H
∣
)
\log_2(|\mathcal{H}|)
log2(∣H∣)。例如,设输入空间
X
=
{
1
,
2
,
.
.
.
,
k
}
\mathcal{X} = \{1,2,...,k\}
X={1,2,...,k}(其中
k
k
k为任意正整数),考虑上面定义的阈值函数类,此时
∣
H
∣
=
k
|\mathcal{H}| = k
∣H∣=k 但
VCdim
(
H
)
=
1
\text{VCdim}(\mathcal{H}) = 1
VCdim(H)=1。由于
k
k
k可取任意大值,
log
2
(
∣
H
∣
)
\log_2(|\mathcal{H}|)
log2(∣H∣) 与
VCdim
(
H
)
\text{VCdim}(\mathcal{H})
VCdim(H) 之间的差距也可以任意扩大。