当前位置: 首页 > >

机器学*之模型检验

发布时间:

模型检验的目的

随着学*算法种类,特征转换方式,正则化方式等等的增加,在不同的组合之下我们就会得到种类非常多的学*模型。而在实务上我们通常想要的就是那个Eout最小的模型,所以我们在面临众多的学*模型的时候需要作出选择,而模型检验结果的好坏正是我们作出选择的依据。下图为一个学*模型的不同组成方式:




模型选择问题

通过Eout选择模型?


这是不可行的。我们希望在得到的模型中选择一个做的最好的模型g要使得它的Eout变得很小,但是在机器学*的一开始就讲Eout是不可知的所以我们没有办法去通过Eout去选择一个模型。


通过视觉去选择模型?


这也是不可行的。①我们的视觉只能检查低维度的模型分割情况高维度的我们难以想象 。②我们在选择模型的时候用到了自己的的大脑这不是机器学*这是人脑学*在数据量大的时候将不靠谱。


通过Ein去选择模型?


这也是不可行的。①单纯的通过Ein去选择模型会出现过拟合的现象。②Ein的选择会带来模型复杂度的增大。每一个Ein最小的模型都是来自于不同的假设集合。比如对于一个具体的问题,演算法A1在假设集合H1中得到的最优模型是g1,演算法A2在假设集合H2中得到的最优模型是g2,当我们从g1和g2中选择一个最优解的时候我们已经付出了H1∪H2的复杂度。③我们用做出Ein最低的资料去训练然后又用相同的资料做测试这样的结果毫无意义。


通过测试资料去选择模型?


这也是不可行的。① 乍一看我们可以通过测试资料的检测拿到去选择犯错误低的模型,但是我们在测试的时候由于我们使用了测试的资料做训练所以这些测试资料早就受到了污染所以我们的检测结果毫无意义!我们做了一件自欺欺人的事情。②事实上我们根本拿不到测试资料。



测试的方法

在遭受到以上问题的困扰下我们决定使用一种新的策略它满足以下几点。


①我们的测试资料是没有经过污染的(测试资料不用来做训练)。


②我们的测试资料不能从外界额外的获取。


所以我们将以前全部用来训练的资料分割一步分出来,这样的话我们就能够在上述条件下得到模型的测试。


测试集

测试集要求


无论是训练还是面对实务上的数据我们遇到的资料都是独立同分布的,所以我们的测试集也需要在以前的训练集上进行独立同分布的抽样获取。


测试集的VC保障




假设我们总共有N笔资料其中的K笔用来做测试N-K笔资料用来做训练,现在训练出来的模型为g- 。现在要从有限多个假设模型中通过测试资料去选择一个最佳的模型g-会得到如下保证:




这就是我们在有限多个h(x)的情况下霍夫丁不等式的保证。


测试后的优化



在以前的学*中我们知道了在其它条件不变的情况下增大数据量N的时候会使得Eout减小。得益于这个结论我们将N-K笔资料训练出来且Eval(测试错误)最小的g-再次丢到整个资料N中进行训练我们会得到更为精确地g。测试的流程图与保障如下:



模型测试在实务上的表现



①只是经过样本训练没有进行测试的K永远为0,所以它犯的错误不会因为K的变化而改变。同时有较高的Eout。


②通过测试资料来训练的K永远为0,所以它犯的错误不会因为K的变化而改变。在但是由于它已经看过了测试资料所以会表现的很好,但是这种做法是不可能的(所以为虚线)。


③经过N-K笔资料训练过的同时经历了K笔资料验证的会随着K的变化而变化,在K较小的时候Eout会表现的较好。


④经过③步骤的筛选之后又经过全部资料的训练之后的模型表现的最好。


测试集的大小


通过上图我们会发现在K很大的时候由于训练集数据太小不足以训练一个合格的模型所以g-会很差,但是由于测试集较大所以测试的结果够准确这时Eval(g-)≈Eout(g-)。当K很小的时候我们的训练集的资料较多,会训练出更加准确的模型这时g-会更好一些,但是由于测试集较小所以测试的结果与实际结果会相差很远。如下图:



在实务上K=N/5是一个不错的选择。


Leave One Out 检测法

leave one out的定义


在上述的例子中我们很难*衡K的大小,所以我们启用leave one out的检测法。该算法是指在所有的资料中依次拿出每一笔资料来作为验证资料(既K=1)最后按照模型在每一笔验证资料上犯错误的*均值的大小选择模型的检测方法。也称之为去1交叉验证法。




上图中en就是模型在第n笔资料作为验证资料的所犯的错误,Eloocv就是模型在这笔资料上交叉验证的*均错误。我们希望的是


Eloocv≈Eout。


leave one out的错误衡量


在不同的错误衡量下我们会得到不同的Eloocv下图为两个例子:




在上图中使用的资料是同一个样本,上方的三幅图在较差验证的时候使用的是*方错误验证,而下方的图使用的常数的错误衡量。很显然Eloocv(linear)>Eloocv(constant)而我们会选择Eloocv的最小的那个错误衡量


leave one out理论上的保证




通过一系列的计算我们会得到Eloocv的期望值与交叉验证的Eout(N-1)的*均值相同。


leave one out实务上的表现




在实务上loocv会有效的避免过拟合通常会做出一个*滑的曲线来。




在错误检测方面会与Eout有很高的相似性。



Cross Validation

loocv遇到的问题


①整个过程的计算量十分大,如1000样本容量下我们的loocv会有1000次的训练与1000次的校验。


②整个过程中由于每次都在单个点上做错误的衡量,会出现错误曲线的波动明显不够稳定。


loocv的改进


我们不在将1000样本容量的样本分成是1000份而是分成V份(比如说是10份)。依次拿每一份当做是验证资料来进行交叉验证进而选择最好的模型。如下图:



这样会使得我们的运算量减小,我们的错误曲线更为稳定而且效率还不错。顺便指出在*常的交叉验证中通常将资料分为10份来进行交叉验证。


validation的选择


①cross validation在实际上一般比单次的validation要做的好,但是要付出大量计算的代价。如果再计算允许的情况下一般使用corss validation。


②在一般情况下5分cv或者是10分的cv就已经会得到很好的模型检测效果了所以一般不会使用loocv来做检测。


validation其他的一些细节


①如果说Ein是初赛的结果(从不同的假设集合中分别选择出Ein最小的模型),那么Eval就是复赛的结果(从已经选好的几个模型中再次选拔)。


②通过validation选择出来的模型从犯错误的结果上来看相比真正的测试的时候还是较为乐观的,毕竟所有的资料都当过训练资料与测试资料。








友情链接: hackchn文档网 营销文档网 爱linux网 爱行业网 时尚网