本集内容
1. VC维
2. 交叉验证
3. 特征选择
VC维和关于无限假设类的情况
上一节推导了由ERM选择出来的假设的一般误差与最好假设的一般误差的关系,即下面这个不等式,成立的概率至少是1-δ
但是这一系列的推导都是假设我们的假设类是有限的,大小为k,待会儿会把一些结论推广到无限类情况。现在先假设一个假设类H有d个参数,就是某个h∈H有d个参数,假设都是双精度浮点数,每一个参数在计算机中是64位,那么d个参数共有64d位,那么H所包含的假设共有2^64d,即上面的k = 2^64d,如果固定 δ,γ,在保证
成立的概率至少是1-δ,我们得到样本复杂度
从这里看出为了让我们的模型从ERM中选择的假设的一般误差够小的话,我们需要的样本数应该与假设的参数个数呈线性关系。但这个结论是不严格的, 因为H的个数依赖于H的参数,我们举一个例子就能看出一个问题:
假设H有d个参数,其中![]()
,当然d = n + 1,按照上面的该H包含假设2^64d个,同样的![]()
有2d个参数,它所定义的H和前面是相同的,但是按照这样算它包含2^128d个假设,同样的H表述形式不一样得到的假设个数不同,所以上面的结论并不严格。为此有下面讨论一个严格的结论,先定义下面的分散的概念,然后引出VC维概念。
给定一个点集![]()
,这里每一个x^(i)对应一个标签y^(i),我们说如果H可以实现任何s上的标记,那么称H分散S。这个定义是说对于S中的点对应的任意标记![]()
,都存在 h ∈ H,使得
,对于所有i都成立,即H可以实现任何s上的标记的意思是对任何一种s上的标记方式,你都可以从假设类H中找到一个假设将正负样本完美分开。我们举例说明,假设一个假设类 ![]()
, 点集S含有3个点的例子,3个点对应的标记情况有2^3 = 8种,每种情况都可以从H中找到合适的h分开它们,如图:
这表明H分散S,但是当S是4个点时,上面的线性分类器就不能分散S了,如下图,找不到一个h能够把下面4个点分开,即H不能分散S
另外我们看一下VC维的定义,一个假设类集H,定义它的VC维,写作 VC(H),表示它能分散的最大集合的大小,如果能够分散任意大的集合,则VC(H) = ∞。可以看到上面举例有VC(H) = 3,但是注意3个点的也有H不能分开的,比如:
或者如果3个点都重合的话,也是没法分的,我们只要存在一个大小为m的点集能够被H分散即可。另外这里做一个推广,n维线性分类器的VC维是n+1,比如前面举例的是2维线性分类器,它的VC维是2+1 = 3。定义好了VC维,下面看一个很著名的机器学习理论:
假设H给定,并且 d = VC(H),则对于所有 h ∈ H,下面等式成立的概率至少为 1 − δ:
和前面一样,从ERM出发,我们能够将该不等式推导如下:
注意这里H是无限假设类,它可以包含无限个假设,另外这个不等式是基于ERM的,里面的加^的h是由ERM选出来的,我们再推出一个样本复杂度的引理:对于所有 h ∈ H,![]()
,即有
成立,该不等式以 1 − δ成立,则![]()
下面讲这个引理的一下理解,假设有一个学习算法,试图尝试最小化训练误差,那么直观的理解就是你需要的样本数量和假设类的VC维呈线性关系。对大多数合理的假设类,实际上他们的VC维差不多。比如用逻辑回归进行线性分类,维度为n的逻辑回归需要n+1个参数,前面说过n维的线性分类器的VC维是n+1。这是说对于大多数的合理的假设类,VC维常常和参数个数成正比。这里样本复杂度的上界是由VC维给定的。( 下面是现在还不理解的一些课堂笔记:*当训练样本的数目的阶和VC维相同时,在最坏的情况样本的复杂度也是VC维,如果有一个非常差的学习问题,训练样本的数量小于VC的阶,那么也不会跑出上面那个不等式的界,所以你寻找的的样本数的数量级的上下界都是有vc维界定的*),所以我们可以大致得到结论,对于最小化训练误差(ERM)的学习算法,所需要的样本数常常和假设类的参数个数线性相关。
下面要看一下ERM和前面的学习算法的联系,注意一下,前面这些推导是基于ERM的,即目标是使取值为1或0的训练误差最小化。现在提出一个问题:SVM为什么不是这样来最小化的,它将特征映射到无限维即n为无穷大,按前面说的VC维=n+1,为无穷大,上一节介绍过模型过于复杂,就会过拟合,它为什么不过拟合? 这里有一个关于最大间隔线性分类器的结论,大概描述一下,SVM的vc维存在上限,且不依赖于x的维度。这表明仅仅包含较大间隔的线性分类器的假设类的VC维是有上界的,SVM会自动尝试具有较小VC维的假设类,而不至于过拟合。
现在我们看一下ERM所要优化的函数图形:
但事实上,线性分类器使训练误差最小是一个NP难问题,逻辑回归在尝试最小化的是一个近似,即ERM的一种近似,SVM也是,它们所要优化的图形如下:
模型选择
偏差和方差之间存在着平衡,从前面我知道模型过于简单即偏差过大,过于复杂即方差过大,都是不合适的模型。为了使训练误差最小(ERM),比如对于线性分类,你选择有多少个参数的假设呢? 又比如局部加权线性回归里面控制权值下降速度的带宽参数为多少能够使训练误差最小呢 又比如软间隔SVM中的参数C选取多少比较合适?这些都是模型选择的具体例子,下面要介绍一些方法。
假设可供我们选择的模型集合M = {M 1 ,...,M d },我们先想一种方法,为了得到训练误差最小化的模型,我们对每一个Mi单独训练,然后比较其训练误差,选择一个训练误差最小的作为我们的模型,但遗憾的是这样是不行的,假设M1到Md的模型是越来越复杂的,那么肯定Md训练得到的模型训练误差最小,但过拟合了,所以我们用下面的方法进行选择,称为交叉验证。
交叉验证
1. 随机将样本集S分为训练集和测试集两部分,一般前者是70%,后者是30%,测试集也叫做保留交叉验证集
2. 在训练集上分别选择Mi进行训练
3. 选择在测试集中有最小训练误差的模型作为结果
一般的在第三步中,也可以将选择的模型再在整个样本中重新训练一次作为最终的模型结果。这种也称为简单交叉验证,缺点是模型是在70%的数据上训练的,不是全部。并且测试集需要用30%的数据,不能克服样本数据不足的情况,下面讨论k重交叉验证解决该问题。
k重交叉验证
1.随机的将样本集分成k个不相交的子集,即有m/k个子集,记作 S 1 ,...,S k
2.对每个模型,分别将其中的子集作为测试集,其他集合作为训练集,这样得到k个训练误差,并将这k个训练误差的平均值作为模型的训练误差。
3.比较每个模型训练误差,选择最小的模型
4.将选出来的模型在这个数据集上训练一次得到最终的模型
这种方式k=10比较常见,缺点就是要经过很多次的训练。特别当k=m,叫留1交叉验证,样本非常少时用,当然训练的次数以及计算量也非常大了
特征选择
通常特征有时的维度非常高,比如前面讲的垃圾邮件分类问题,词典大小为5000,则特征的维度就是5000,特征维度过大,可能存在着过拟合的风险,如果能够有减少特征,我们选择的假设类也会简单一些,有助于降低过拟合的风险。现假设n个特征,那么n个特征所包含的子集个数为2^n,相当大,所以是不可能每一个都去搜索时间代价太高了,有一些能够找到比较好的特征的集合的方法,介绍如下。
前向搜索算法
1. F是所选特征的集合,初始化F = ∅
2. 重复如下步骤:
a. 对 i = 1,...,n,如果 特征i不在F中,则令 F i = F ∪ {i},并且使用交叉验证的方式来评估此时的所选的特征集合F,比如评估此时Fi特征的一般误差,这一步就会计算n次,得到n个一般误差
b. 选取上面一般误差最小的的Fi,令F = Fi
3. 输出F
上面算法的结果可能是F将全部特征加入了进来,也可能是设置了阈值,比如让F中特征数达到某个值就不再加入特征。这类算法是封装模型的特征选择的一个例子,封装的意思指不断的重复的加入特征到学习算法,并对其进行评估。另外一种方法叫做后向搜索算法,即一开始令F = {1,...,n},然后令Fi = F - {i},评估n个减去特征后的一般误差,选取最小的Fi,并令F = Fi,这样每次减掉一个特征,知道最后为空或者达到一个阈值,此时的F作为最后的结果。这两种都属于启发式搜索,虽然并不会保证找到最好的特征集,但是效果还是不错的,但是计算量有点大,我们看到复杂度为O(n^2)。比如尤其对于文本分类问题,往往特征维度非常高,用向前搜索或向后搜索计算代价太高了,下面要讲一种一般误差可能不会太低,但计算量小的方法。
过滤特征选择算法
过滤特征选择的基本思想是找到某个量来衡量特征xi与标记y之间相互关联的程度,记作S(i),然后从大到小排序选择前k个作为特征集。其中用互信息来表示S(i),如下:
p(x i ,y), p(x i ) 和 p(y)都是通过训练集来计算的,现将MI表示为KL距离来理解:
KL距离也叫相对熵,来衡量不同的概率分布之间的差异,如果相对熵为0则表示两个概率分布相同, 相对熵越大,则差异越大,在NLP中,可以比较常用词的概率分布以判断是否同义词。这里如果xi,y是相互独立的随机变量即p(x i ,y) = p(x i )p(y),那么KL结果为0,表示两个概率分布完全相同,如果xi与y相关紧密,则值则会比较大,利用这种方式来对特征进行过滤。
最后我们确定k的值,仍然可以用交叉验证的方式,让k从1取到n,分布用交叉验证评估误差,选择误差最小对应的k值即可,这个时候计算量比前向搜索要小很多。