在前一篇笔记中介绍了一些机器学习中的基本概念,其中提到了“模型”和“假设空间”的概念,也说过“统计学习首先要考虑的问题是学习什么样的模型,模型确定了,模型的假设空间自然就确定了,后面要做的就是从假设空间子搜索最优的假设”。那么,大家可能就会提出这样的问题“哪一种模型能提出最好的假设空间,从而得到性能最好的假设函数?”或者“有没有一个最强大的模型,使用它就可以解决所有的问题”或者更具体的“传统的机器机器学习技术和现在正火热的深度学习哪个更好?”。答案很简单:不结合具体的问题去比较哪个模型更好没有意义!接下来我们来看一个叫“没有免费午餐”(NFL,No Free Lunch)的理论,它会告诉我们为什么是这个答案。在接下来的讨论中我们不区分模型、策略和算法,将它们统称为“算法”或“机器学习算法”,将由“算法”最终训练出的最佳假设称为“模型”。
首先看一个简单例子(来源:周志华《机器学习》):
假设我们有6个样本点(xi, yi)组成的训练集,分布如下图:
假设我们选择了两种不同的机器学习算法La和Lb在这个训练集上作训练,它们各自搜索出了各自假设空间中最佳的假设函数A和B,对应上图中的A和B两条曲线。那么对于A和B这两个模型到底哪一个对未来的新的数据的预测更好呢?
我们也许倾向于结构更简单的A。好吧,如果我们的实际问题的数据分布如下图所示,那么A的性能的确比B好,A与训练集外的样本更一致,预测的比B准确:
上图中,白点为测试样本,黑点为训练样本。
但是,现实的问题也有可能是这样的:
在上面的这种情况下,B的性能比A好。
上面的例子说明了,不结合具体问题的情况下,对于一个学习算法La,若它在某个问题上比学习算法Lb好,则必然存在另一些问题,在那里Lb比La好。这个结论对任何算法都成立,哪怕La是一个非常先进的算法,而Lb只是“随机胡猜”算法。
周志华《机器学习》中给出了一个简单的形式化的证明,我会在其基础上增加一些解释来说明某些式子的意义。
周志华《机器学习》原文:
我解释下为什么使用(1.1)式作为“训练集之外的所有样本上的误差”。
首先,我们是这样定义一个假设函数h对一个样本点x的预测误差的:预测值h(x)与真实值f(x)一致则误差为0,不一致则误差为1,即I(h(x)≠f(x))
由于x是一个随机变量,那么这个误差值也是一个随机变量,取值为0或1,其在训练集之外的所有样本上的期望可以看作假设函数h在训练集之外的所有样本上预测的错误率,即:
我们就把这个错误率作为假设函数h在训练集之外的所有样本上的误差。
然后,在算法La的假设空间中可能会存在多个假设函数与训练集一致,最终产生哪一个是有概率的(这一点我们在以后介绍具体算法时就会看到),令算法La在训练数据集X上产生某个假设h的概率为P(h|X, La),那么,我们接下来要做的是定义算法La在“训练集之外的所有样本上的误差”,而不只是La产生的一个假设h的误差。
我们已经定义了假设函数h在训练集之外的所有样本上的误差,由于h是算法La以概率P(h|X, La)产生的,那么我们可以定义算法La的误差为所有可能的h的误差的期望,即:
上面的说明就是(1.1)是的含义了。
再解释下(1.2)式的推导:
首先,这里考虑的是二分类问题,而且假设真实目标函数f可以是任何输入空间X到输出空间{0, 1}的映射,那么整个函数空间的大小就应该是2^|X|。
然后,这里假设在整个函数空间中所有可能的目标函数f是均匀分布的(即所有真实的问题是均匀出现的)。
在二分类问题中,对于一个样本点x,假设函数h(x)的预测值要么是0要么是1,不妨假设为0,那么由于f是均匀分布的,所有将x映射为0的真实函数f的数量和所有将x映射为1的真实函数f的数量应该是一样的,那么,在函数空间中就有一半数量的可能的f于假设函数h的预测不一致,于是就有:
等于
另外对P(x)的求和的x范围不包括训练集X,所以说它不等于1,小于1,只有当x的求和范围是整个样本空间时,对概率P(x)的求和才是1。
上面是对于NFL的简化推导的说明。我们现在来看看这个NFL的结论。结论很有意思,总误差与学习算法无关,任意两个学习算法它们的期望性能是相同的。既然所有学习算法的期望性能都和随机胡猜差不多,那还有什么好学的?
我们需要注意到,NFL定理有一个主要的前提:所有“问题”出现的机会相同,或所有问题同等重要。但实际情况并不是这样。很多时候,我们只关注自己正在试图解决的问题(例如某个具体应用任务),希望为它找到一个解决方案,至于这个解决方案在别的问题、甚至在相似的问题上是否为好方案,我们并不关心。所以,NFL定理最重要的寓意,是让我们清楚地认识到,脱离具体问题,空泛地谈论“什么学习算法更好”毫无意义,因为若考虑所有潜在的问题,则所有学习算法都一样好。要谈论算法的相对优劣,必须要针对具体的学习问题;在某些问题上表现好的学习算法,在另一些问题上却可能不尽如人意。
可行的做法是,针对我们要解决的问题,比较可能的模型的预测性能,选出针对该问题最好的模型。
最后,加一点我的理解,不一定正确,仅供参考。在《机器学习中》只对f按均匀分布算了误差总和,其实我们可以算一下学习算法La在所有问题按均匀分布出现时的期望误差,这个期望误差其实就是学习算法La在均匀分布的所有问题上的不准确率,它的结果是:(相当与除以2^|x|的真实目标函数空间得每个函数的期望)
其中X是样本空间,D是训练数据集,x∈X-D就是训练集之外的所有样本。式子中求和的部分是对x的概率求和,因为对P(x)的求和的x范围不包括训练集X,所以说它不等于1,小于1,只有当x的求和范围是整个样本空间(几乎无训练数据集)时,对概率P(x)的求和才是1。所以有E<=1/2, 也就是说这个不准确率是有上界的。训练数据集越小,这个不准确率越接近1/2,即当训练数据不足时,学习算法想给均匀出现的所有二分类问题提供一个通用的模型其准确率和瞎猜差不多接近一半一半;但是如果能有充足的训练数据,虽然学习算法之间的性能无法评估,但是学出来的模型的准确率高于50%,学习总比不学强。
没有免费的午餐定理(No Free Lunch Theorem),这个定理说明
若学习算法 L a L_a La 在***某些问题***上比学习算法 L b L_b Lb 要好,
那么必然存在***另一些问题***,
在这些问题中 L b L_b Lb 比 L a L_a La 表现更好。
这里说的表现好就是前面所说的泛化能力更强。然后出现了下面这个公式
E o t e ( L a ∣ X , f ) = ∑ h ∑ x ∈ χ − X P ( x ) I ( h ( x ) ≠ f ( x ) ) P ( h ∣ X , L a ) E_{ote}(L_a|X,f) = \sum_{h}\sum_{x\in\chi-X}P(x)\mathbb{I}(h(x)\neq f(x))P(h|X,L_a) Eote(La∣X,f)=∑h∑x∈χ−XP(x)I(h(x)̸=f(x))P(h∣X,La)
令人生畏的长公式,不过我们来依次解读它。
留坑,周末更
好了,周六了,今天终于看懂了这个定理的证明,下面我们一字一句地来解读书中的证明:
首先,定义好符号
χ \chi χ:样本空间,什么是样本空间呢?就是你的样本的属性张成的空间,书的前文有介绍
还是以他书中的西瓜来举例吧:
西瓜的属性和每个属性的取值是
色泽= 青绿||乌黑||浅白 x= 0 || 1 || 2
根蒂= 蜷缩||稍蜷||硬挺 y= 0 || 1 || 2
敲声= 浊响||沉闷||清脆 z= 0 || 1 || 2
你把色泽、根蒂、敲声想想成x,y,z轴。取值的范围都是0,1,2。怎么样,是不是像一个正方体的三维空间,当然属性可能有多种,那就上升到多维空间去了,不好想像了。
H H H:假设空间,什么是假设空间呢?
什么是假设呢,前面说也叫学得模型,这里我们不搞那些概念。请看这篇博主的文章http://blog.csdn.net/VictoriaW/article/details/77686168,看完应该就能理解假设空间和版本空间。(此处9月1日更新,这里的假设其实就是学得的一个用来判断的模型,或者说函数,或者说映射也行,反正经过学习,就得到这样一个假设,用来判断西瓜的好坏(笑)。)
L a L_a La:学习算法,学习算法有其偏好性,对于相同的训练数据,不同的学习算法可以产生不同的假设,学得不同的模型,因此才会有那个学习算法对于具体问题更好的问题,这里这个没有免费的午餐定理要证明的就是:若对于某些问题算法 L a L_a La学得的模型更好,那么必然存在另一些问题,这里算法 L b L_b Lb学得的模型更好.这里的好坏在下文中使用算法对于所有样本的总误差表示
P ( h ∣ X , L a ) P(h|X,L_a) P(h∣X,La): 算法 L a L_a La基于训练数据 X X X产生假设 h h h的概率
这里我说一下自己的理解,既然是 L a L_a La基于 X X X产生假设 h h h的概率,那么就说明假设不止一个(你说这不是废话吗?上面都说有假设空间了,假设当然不止一个),这里要注意的是这里的假设是一个映射,是 y = h ( x ) y=h(x) y=h(x),是基于数据 X X X产生的对于学习目标(判断好瓜)的预测。因数据 X X X不一样,所以可能产生不一样的假设 h h h,既然假设假设有可能不一样,那么对每一种假设都有其对应的概率即 P ( h ∣ X , L a ) P(h|X,L_a) P(h∣X,La).而且所有假设 h h h加起来的概率为1,这个不难理解,概率总和为1
f f f:代表希望学得的真实目标函数,要注意这个函数也不是唯一的,而是存在一个函数空间,在这个空间中按某个概率分布,下文证明中采用的是均匀分布。
好,上面那个公式到了
E o t e ( L a ∣ X , f ) = ∑ h ∑ x ∈ χ − X P ( x ) I ( h ( x ) ≠ f ( x ) ) P ( h ∣ X , L a ) E_{ote}(L_a|X,f) = \sum_{h}\sum_{x\in\chi-X}P(x)\mathbb{I}(h(x)\neq f(x))P(h|X,L_a) Eote(La∣X,f)=∑h∑x∈χ−XP(x)I(h(x)̸=f(x))P(h∣X,La)
首先看这个 E E E,这个 E E E是期望,expectation的意思,这个下标 o t e _{ote} ote,是off-training error,即训练集外误差(忘了是在哪篇博客上看到的了,错了我不负责哈嘻嘻)。
E o t e ( L a ∣ X , f ) E_{ote}(L_a|X,f) Eote(La∣X,f): 算法 L a L_a La学得的假设在训练集外的所有样本上的误差的期望
P ( x ) P(x) P(x): 对于这个,我的理解是样本空间中的每个样本的取得概率不同,什么意思呢?拿西瓜来说,(色泽=浅白,根蒂=硬挺,敲声=清脆)的西瓜可能比(色泽=浅白,根蒂=稍蜷,敲声=沉闷)的西瓜更多,取到的概率更大。所以有 P ( x ) P(x) P(x)这个概率。
I ( h ( x ) ≠ f ( x ) ) \mathbb{I}(h(x)\neq f(x)) I(h(x)̸=f(x)):看前面的符号表把这个叫做指示函数,这个很好理解,就像if语句括号里的表达式一样,为真就=1,为假就=0。
P ( h ∣ X , L a ) P(h|X,L_a) P(h∣X,La): 前面说过了,再复习一下,算法 L a L_a La基于训练集 X X X产生假设 h h h的概率。
其实这里最开始最令我困惑的是什么呢?是两个求和符号,因为这里求和符号感觉不规范啊!有木有,不过后来觉得理解了意思就大概行了.
第一个求和符号:
∑ h \sum_h ∑h: 这里的这个对假设的求和其实我也不是很理解,我的理解主要是不知道这个对假设求和的空间到底是:同一个算法对于不同训练集产生不同的假设,每个假设有不同的概率,还是算法对于同一个训练集会产生不同的假设,每个假设有不同的概率。不过这个不重要,群里有人说前三章看看就好,具体结合后面的算法来理解就行了,先往后面看着吧。(此处9月1日更新,这里是因为学习算法对于训练数据 χ {\chi} χ是可能产生多个假设的。且对不同的假设有不同的产生概率,所以有 P ( h ∣ X , L a ) P(h|X,L_a) P(h∣X,La)这个表达式。)
第二个求和符号:
∑ x ∈ χ − X \sum_{x\in{\chi-X}} ∑x∈χ−X:对于样本空间中每一个训练集外的数据都进行右边的运算。
好了,公式的每一部分都说清楚了,来整体理解一下,这个公式就是说:
对于算法 L a L_a La产生的每一个不同的假设 h h h,进行训练外样本的测试,然后测试不成功(因为求的是误差)指示函数就为1,并且两个概率相乘,最后所有的结果加起来,就是该算法在训练集外产生的误差。
然后下面考虑二分类问题,先要说明,对于我们想要求得的真实目标函数 f f f可能也不止一个,这个好理解,因为满足版本空间中的假设的函数都可以是真实目标函数,然后这些不同的 f f f有着相同的概率(均匀分布),函数空间为 { 0 , 1 } \left \{ 0,1 \right\} {0,1},那么有多少个这种函数呢?我们来看对于同一个样本的这个预测值,对于样本空间 χ \chi χ中的某个样本 x x x,如果 f 1 ( x ) = 0 f_1(x)=0 f1(x)=0, f 2 ( x ) = 1 f_2(x) = 1 f2(x)=1, 那么这就是两个不同的真实目标函数,所以对于某个样本可以区分出两个真实目标函数,一共有 ∣ χ ∣ \left | \chi \right| ∣χ∣个样本,所以一共有 2 ∣ χ ∣ 2^{\left | \chi \right |} 2∣χ∣个真实目标函数,这些真实目标函数是等可能分布的(均匀分布),所以对于某个假设 h ( x ) h(x) h(x)如果 h ( x ) = 0 h(x) = 0 h(x)=0那么就有 1 2 \frac{1}{2} 21的可能与真实目标函数相等。
所以下面来看这个公式推导
$\sum_f E_{ote}\left ( L_a|X,f\right) $
= ∑ f ∑ h ∑ x ∈ χ − X P ( x ) I ( h ( x ) ≠ f ( x ) ) P ( h ∣ X , L a ) = \sum_f\sum_h\sum_{x\in\chi-X}P(x)\mathbb{I}(h(x)\neq f(x))P(h|X,L_a) =∑f∑h∑x∈χ−XP(x)I(h(x)̸=f(x))P(h∣X,La)
= ∑ x ∈ χ − X P ( x ) ∑ h P ( h ∣ X , L a ) ∑ f I ( h ( x ) ≠ f ( x ) ) =\sum_{x\in\chi-X}P(x)\sum_hP(h|X,L_a)\sum_f\mathbb{I}(h(x)\neq f(x)) =∑x∈χ−XP(x)∑hP(h∣X,La)∑fI(h(x)̸=f(x)) ①
= ∑ x ∈ χ − X P ( x ) ∑ h P ( h ∣ X , L a ) 1 2 2 ∣ χ ∣ =\sum_{x\in\chi-X}P(x)\sum_hP(h|X,L_a)\frac{1}{2}2^{\left | \chi \right |} =∑x∈χ−XP(x)∑hP(h∣X,La)212∣χ∣ ②
= 1 2 2 ∣ χ ∣ ∑ x ∈ χ − X P ( x ) ∑ h P ( h ∣ X , L a ) =\frac{1}{2}2^{\left | \chi \right |}\sum_{x\in\chi-X}P(x)\sum_hP(h|X,L_a) =212∣χ∣∑x∈χ−XP(x)∑hP(h∣X,La) ③
= 2 ∣ χ ∣ − 1 ∑ x ∈ χ − X P ( x ) ⋅ 1 =2^{\left | \chi \right |-1}\sum_{x\in\chi-X}P(x)\cdot 1 =2∣χ∣−1∑x∈χ−XP(x)⋅1 ④
第一步是怎么推导出来的呢?这里涉及到一个求和运算
假设
a i ∈ { a 1 , a 2 , . . . , a m } a_i\in \left\{ a_1,a_2,...,a_m \right\} ai∈{a1,a2,...,am}
b j ∈ { b 1 , b 2 , . . . , b n } b_j\in \left\{ b_1,b_2,...,b_n \right\} bj∈{b1,b2,...,bn}
c k ∈ { c 1 , c 2 , . . . , c o } c_k\in \left\{ c_1,c_2,...,c_o \right\} ck∈{c1,c2,...,co}
那么
∑ i m ∑ j n ∑ k o a i b j c k \sum_i^m\sum_j^n\sum_k^oa_ib_jc_k ∑im∑jn∑koaibjck
= ∑ i m a i ∑ j n b j ∑ k o c k =\sum_i^ma_i\sum_j^nb_j\sum_k^oc_k =∑imai∑jnbj∑kock
这个很容易理解,你想
( a 1 + a 2 + . . . + a m ) ( b 1 + b 2 + . . . + b n ) ( c 1 + c 2 + . . . + c o ) (a_1+a_2+...+a_m)(b_1+b_2+...+b_n)(c_1+c_2+...+c_o) (a1+a2+...+am)(b1+b2+...+bn)(c1+c2+...+co)
是不是等于
a 1 b 1 c 1 + a 2 b 1 c 1 + . . . a m b 1 c 1 + . . . + a m b n c o {a_1}{b_1}{c_1}+{a_2}{b_1}{c_1}+...{a_m}{b_1}{c_1}+...+{a_m}{b_n}{c_o} a1b1c1+a2b1c1+...amb1c1+...+ambnco
看懂了上面那个你再看第一步也就看懂了
第二步
主要是
∑ f I ( h ( x ) ≠ f ( x ) ) = 1 2 2 ∣ χ ∣ \sum_f\mathbb{I}(h(x)\neq f(x)) =\frac{1}{2}2^{\left | \chi \right |} ∑fI(h(x)̸=f(x))=212∣χ∣
这个其实也很好理解,因为一共有 2 ∣ χ ∣ 2^{\left | \chi \right |} 2∣χ∣个 f f f,且均匀分布,所以 f ( x ) = 1 f(x) = 1 f(x)=1和 f ( x ) = 0 f(x)=0 f(x)=0的 f f f个数相等,对于每一个 h ( x ) h\left( x \right) h(x)来说,不管 h ( x ) = 0 h(x)=0 h(x)=0还是 1 1 1,都有一半 f ( x ) f(x) f(x)与之相等,即 1 2 2 ∣ χ ∣ \frac{1}{2}2^{\left | \chi \right |} 212∣χ∣
所以就得出第二步
第三步到第四步就更好理解了
概率求和为1,就是这么简单
经过这么一通推导后,发现得出期望的表达式中关于没有具体算法的,所以是算法无关的!
如果错误,望指出共交流,共学习!
转自: