转载于:机器学习-->期望风险、经验风险与结构风险之间的关系
在机器学习中,通常会遇到期望风险、经验风险和结构风险这三个概念,要区分这三个概念,首先要引入一个损失函数的概念。损失函数是期望风险、经验风险和结构风险的基础。
损失函数
损失函数表示的是模型预测的值与样本真实值之间的差距,一般指单个样本。
常见的损失函数见我的另一个博客常见的损失函数
一些资料认为损失函数是针对单个样本而言的,代价函数是对于训练集所有样本而言的,是将所有训练集所有样本的损失相加再求平均,并且认为代价函数就是经验风险,经验风险最小化就是代价函数最小化。在这里我们沿用这一说法,但是但是本人认为不用过分纠结于是针对单个样本还是针对整个训练数据集,在大部分情况下,损失函数和代价函数没有明显的区分。
经验风险
那么如果想知道模型f(X)对训练样本中所有的样本的预测能力应该怎么办呢?显然只需所有的样本点都求一次损失函数然后进行累加就好了。如下式。经验风险的定义就是:模型f(X)关于训练数据集的的平均损失。
这就经验风险,所谓的经验风险最小化便是让这个式子最小化,注意这个式子中累加和的上标N表示的是训练样例集中样本的数目。 在我们过分强调损失函数是针对单个样本的话,经验风险是是对整个训练集的样本而言,实际就等价于代价函数。
期望风险
可以看出经验风险是对训练集中的所有样本点损失函数的平均最小化。经验风险越小说明模型f(X)对训练集的拟合程度越好,但是对于未知的样本效果怎么样呢?
由于未知样本数据是不确定的,所以就没有办法罗列所有的样本,进而求所有样本损失函数平均值的最小化这个方法,那么怎么来衡量这个模型对所有的样本(包含未知的样本和已知的训练样本)预测能力呢?熟悉概率论的很容易就想到了用期望。即假设X和Y服从联合分布P(X,Y).那么期望风险就可以表示为:
这就是期望风险,期望风险表示的是全局的概念,表示的是决策函数对所有的样本<X,Y>预测能力的大小,而经验风险则是局部的概念,仅仅表示决策函数对训练数据集里样本的预测能力。理想的模型(决策)函数应该是让所有的样本的损失函数最小的(也即期望风险最小化),但是期望风险函数往往是不可得到的,即上式中,X与Y的联合分布函数不容易得到(因为我们不可能罗列所有的X,Y)。现在我们已经清楚了期望风险是全局的,理想情况下应该是让期望风险最小化,但是呢,期望风险函数又不是那么容易得到的。怎么办呢?那就用局部最优的代替全局最优这个思想吧。这就是经验风险最小化的理论基础。
通过上面的分析可以知道,经验风险与期望风险之间的联系与区别:
- 经验风险是局部的,基于训练集所有样本点损失函数最小化的。
- 期望风险是全局的,是基于所有样本点的损失函数最小化的。
- 经验风险函数是现实的,可求的;
- 期望风险函数是理想化的,不可求的;
结构风险
只考虑经验风险的话,会出现过拟合的现象,过拟合的极端情况便是模型f(x)对训练集中所有的样本点都有最好的预测能力,但是对于非训练集中的样本数据,模型的预测能力非常不好。怎么办呢?这个时候就引出了结构风险。
结构风险是对经验风险和期望风险的折中。在经验风险函数后面加一个正则化项(惩罚项)便是结构风险了。如下式:
相比于经验风险,结构风险多了一个惩罚项,其中是一个lamada是一个大于0的系数。J(f)表示的是是模型f的复杂度。结构风险可以这么理解:
经验风险越小,模型决策函数越复杂,其包含的参数越多,当经验风险函数小到一定程度就出现了过拟合现象。也可以理解为模型决策函数的复杂程度是过拟合的必要条件,那么我们要想防止过拟合现象的方式,就要破坏这个必要条件,即降低决策函数的复杂度。也即,让惩罚项J(f)最小化,现在出现两个需要最小化的函数了。我们需要同时保证经验风险函数和模型决策函数的复杂度都达到最小化,一个简单的办法把两个式子融合成一个式子得到结构风险函数然后对这个结构风险函数进行最小化。
三者的关系
- 经验风险是模型f(X)关于训练数据集所有样本的平均损失。由于训练数据集是有限的,所以经验风险是可以求得的,是局部概念。
- 经验风险仅仅表示模型对训练数据集里样本的预测能力。理想的模型应该让满足相同分布的所有的样本的损失都最小,这就是期望风险。其定义是模型f(X)关于联合分布P(X,Y)的平均损失。由于X与Y的联合分布函数不容易得到,因此期望风险往往是不可求的,是全局概念。当样本容量N趋于无穷时,经验风险趋于期望风险。
- 既然期望风险不可求,我们又希望模型拥有更好的泛化能力,对数据拟合较好,因此就提出了结构风险。结构风险是经验风险和正则化相加。通过正则项的引入可以降低模型的复杂度,从而解决过拟合的问题。
结构风险 = 经验风险 + 正则化项
目标函数
对于目标函数的定义,借用一段话(下面没有过度区分损失函数与代价函数):
为了优化模型,得有一个研究目标吧,这就得选取一个目标函数,这个目标函数必须能体现模型的优劣。那么损失函数(代价函数)就能体现体现模型的好坏,从这个角度看,我们求得损失函数(代价函数)最小的时候,即经验风险最小化不就是模型优化得最好吗?这个时候的经验风险就是目标函数了。但是目标函数还需要容易优化才行,并且还需要限制模型的复杂度,防止过拟合,所以我们还会给损失函数(代价函数)添加一个修正项,即结构风险。也就是说,目标函数可以选损失函数(代价函数),也可以是损失函数(代价函数)的变体,如果有其它能够很好描述模型优劣并且能够容易优化的函数,我觉得也可以成为目标函数。
简言之,目标函数指的是我们最终选择优化的函数,可以是经验风险(例如不带正则项的LR),也可以是结构风险(经验风险+正则项,如线性SVM),但一般情况下,为了防止过拟合,大多为结构风险,未来也能有更好的形式。