NFL(没有免费的午餐)
@(周志华·机器学习)
1、诠释
NFL全称:No Free Lunch Theorem;意思是,所有的学习算法的期望性能是相同的。
NFL的前提是,所有“问题出现的机会相同”、或所有的问题同等重要。
NFL的寓意是,让我们清楚的认识到,脱离具体问题,空泛地谈论“什么学习算法更好”毫无意义,因为若考虑所有潜在的问题,则所有的学习算法都一样好。要谈论算法的相对优劣,必须要针对具体的学习问题;在某些问题上表现好的学习算法,在另一些问题上却可能不尽如人意,学习算法自身的归纳偏好与问题是否相配,往往会起到决定性的作用。
2、证明
为简单起见,假设样本空间
χ
\chi
χ和假设空间?都是离散的.
令
P
(
h
∣
X
,
ε
a
)
P(h|X,ε_a)
P(h∣X,εa)代表算法
ε
a
ε_a
εa基于训练数据
X
X
X产生假设
h
h
h的概率.
再令
f
f
f代表我们希望学习的真实目标函数.
那么
ε
a
ε_a
εa的“训练集外误差”,即
ε
a
ε_a
εa在训练集之外的所有样本上的误差,为:
E
o
t
e
(
ε
a
∣
X
,
f
)
=
∑
h
∑
x
∊
χ
−
X
P
(
x
)
ⅼ
(
h
(
x
)
≠
f
(
x
)
)
P
(
h
∣
X
,
ε
a
)
E_{ote}(ε_a|X,f)=\sum_h\sum_{x∊\chi-X}P(x)ⅼ(h(x)≠f(x))P(h|X,ε_a)
Eote(εa∣X,f)=h∑x∊χ−X∑P(x)ⅼ(h(x)̸=f(x))P(h∣X,εa)
这是一个长公式,下面诠释一下这条公式:
E o t e : E 代 表 e x p e c t a t i o n , E_{ote}:E代表expectation, Eote:E代表expectation,期望的意思; o t e 代 表 ote代表 ote代表 off-training error,训练集外误差的意思。
E o t e ( ε a ∣ X , f ) : E_{ote}(ε_a|X,f): Eote(εa∣X,f):基于训练集 X X X和希望学习的真实目标函数 f f f的算法 ε a ε_a εa的训练集外误差。
P ( x ) P(x) P(x):样本 x x x出现的概率;在现实生活中,每一种样本都有其出现的概率,例如二子花生就比三子花生出现的概率大。
ⅼ ( h ( x ) ≠ f ( x ) ) ⅼ(h(x)≠f(x)) ⅼ(h(x)̸=f(x)):指示函数,为真时取值1,否则取值0.
P ( h ∣ X , ε a ) P(h|X,ε_a) P(h∣X,εa):前面已经介绍过,代表算法 ε a ε_a εa基于训练数据 X X X产生假设 h h h的概率.但这个要如何理解呢?我们知道根据算法和训练集可以产生版本空间,版本空间里的假设可能有多条也可能只有1条,假设自然也就有概率了,但不管怎么说,所有的假设的概率加起来肯定等于1.
P ( x ) ⅼ ( h ( x ) ≠ f ( x ) ) P ( h ∣ X , ε a ) P(x)ⅼ(h(x)≠f(x))P(h|X,ε_a) P(x)ⅼ(h(x)̸=f(x))P(h∣X,εa):单个样本和单个假设 h h h的期望。这里可以回顾一下高中知识,数学期望的计算公式
E ( x ) = ∑ i n x i . p ( x i ) E(x) = \sum_i^nx_i.p(x_i) E(x)=i∑nxi.p(xi)
∑ h ∑ x ∊ χ − X \sum_h\sum_{x∊\chi-X} ∑h∑x∊χ−X:上述介绍过, h h h和 x x x都是有多个的,所以要对它们进行求和,我们计算的是训练集外的误差,所以 x ∊ χ − X x∊\chi-X x∊χ−X.
接下来就是公式推导了,推导前先介绍一下公式推导的前提。这里讨论二分类问题,且真实目标函数可以是任何函数Font metrics not found for font: . {0,1},函数空间为{0,1}Font metrics not found for font: .,其中Font metrics not found for font: .是样本数。对所有可能的 f f f按均匀分布对误差求和有:
∑
f
E
o
t
e
(
ε
a
∣
X
,
f
)
\sum_fE_{ote}(ε_a|X,f)
∑fEote(εa∣X,f)
=
∑
f
∑
h
∑
x
∊
χ
−
X
P
(
x
)
ⅼ
(
h
(
x
)
≠
f
(
x
)
)
P
(
h
∣
X
,
ε
a
)
=\sum_f\sum_h\sum_{x∊\chi-X}P(x)ⅼ(h(x)≠f(x))P(h|X,ε_a)
=∑f∑h∑x∊χ−XP(x)ⅼ(h(x)̸=f(x))P(h∣X,εa)
=
∑
x
∊
χ
−
X
P
(
x
)
∑
h
P
(
h
∣
X
,
ε
a
)
∑
f
ⅼ
(
h
(
x
)
≠
f
(
x
)
)
=\sum_{x∊\chi-X}P(x)\sum_hP(h|X,ε_a)\sum_fⅼ(h(x)≠f(x))
=∑x∊χ−XP(x)∑hP(h∣X,εa)∑fⅼ(h(x)̸=f(x))
=
∑
x
∊
χ
−
X
P
(
x
)
∑
h
P
(
h
∣
X
,
ε
a
)
1
2
2
∣
χ
∣
=\sum_{x∊\chi-X}P(x)\sum_hP(h|X,ε_a)\dfrac{1}{2}2^{|\chi|}
=∑x∊χ−XP(x)∑hP(h∣X,εa)212∣χ∣
=
1
2
2
∣
χ
∣
∑
x
∊
χ
−
X
P
(
x
)
∑
h
P
(
h
∣
X
,
ε
a
)
=\dfrac{1}{2}2^{|\chi|}\sum_{x∊\chi-X}P(x)\sum_hP(h|X,ε_a)
=212∣χ∣∑x∊χ−XP(x)∑hP(h∣X,εa)
=
2
∣
χ
∣
−
1
∑
x
∊
χ
−
X
P
(
x
)
=2^{|\chi|-1}\sum_{x∊\chi-X}P(x)
=2∣χ∣−1∑x∊χ−XP(x)
让我们来看看这公式是如何推导的:
第一行应该都能看明白,就是在上一条公式中添加了 ∑ f \sum_f ∑f。但为什么要对真实目标函数进行求和呢?因为这个函数不是唯一的,而是存在着一个函数空间;在现实中,我们为了某个目的而寻求唯一的真实目标函数,但在这里,我们没有目标、没有具体的问题,所以要对所有的真实目标函数进行求和。
第二行是怎么得到的?这个很容易理解,我们使用具体的变量表示出来:
$
a_1b_1c_1+a_2b_1c_1+…a_mb_1c_1+…+a_mb_nc_o =
(a_1+a_2+…+a_m)(b_1+b_2+…+b_n)(c_1+c_2+…+c_o)
$
第三行对真实目标函数进行求和:Font metrics not found for font: .。|?|个样本,每个样本对真实目标函数 f f f来说都可能取两个值0和1,那么真实目标函数的个数是所有样本可能取值的组合 C 2 1 ﹒ C 2 1 ﹒ ﹒ ﹒ C 2 1 C_2^1﹒C_2^1﹒﹒﹒C_2^1 C21﹒C21﹒﹒﹒C21,共|?|个 C 2 1 C_2^1 C21相乘,即Font metrics not found for font: .,若 f f f均匀分布,则有一半的 f f f对 x x x的预测与 h ( x ) h(x) h(x)不一致,指示函数为假时取值为0(零乘以任何数都得零),所以我们不需要对 h ( x ) h(x) h(x)一致的值求和。
第四行只是换位而已。
第五行对假设进行求和,上面说过,所有的假设加起来是等于1的。
显然,总误差与学习算法无关,也就是对于作意的学习算法,它们的期望都是一样的。对于作意的学习算法
ε
a
ε_a
εa和
ε
b
ε_b
εb都有:
∑
f
E
o
t
e
(
ε
a
∣
X
,
f
)
=
∑
f
E
o
t
e
(
ε
b
∣
X
,
f
)
\sum_fE_{ote}(ε_a|X,f) = \sum_fE_{ote}(ε_b|X,f)
f∑Eote(εa∣X,f)=f∑Eote(εb∣X,f)