机器学习基石HOW BETTER部分(3)
2015-12-18 11:01
204 查看
机器学习基石HOW BETTER部分(3)
标签:机器学习基石第十五章
(crossly) reserve validation data to simulate testing procedure for model selection模型选择问题
做二元分类,可以有的选择真的好多啊。每一种的选择就多,最后实现,还是选择的组合。
把模型选择问题一般化一下,就是如下的定义:有M个模型,每个模型有其对应的Hypothesis set以及学习算法A,希望选出某一个模型得到的g,它的Eout(g)E_{out}(g)是最小的。但是EoutE_{out}不知道,无法以其作为标准。
根据Ein(g)E_{in}(g)最小来选择模型也是行不通的。一方面容易造成overfitting;另一方面,假设有两个模型PK:算法A1在H1上让EinE_{in}最小;算法A2在H2上让EinE_{in}最小。最后选出来的g的效果是在H1∪H2上让EEinE_{in}最小,也就说假设空间变成了H1+H2,额外增加了model complexity,容易造成bad generalization。
如果能找到一些测试数据,来看看哪一个模型的表现更好就选择哪个。如果用这样的方式,可以得到Hoeffding的理论保证如下图。看起来很棒,可是问题是我们找不到测试数据,测试数据就像考卷,不可能说考试之前就发下来的。
将这两者结合一下:把训练数据留一部分下来作为测试数据,用其他的训练数据来训练模型,然后用测试数据来测试模型的表现好坏。这是合理的作弊,这样就可以有测试资料了(测试资料一定要留着,不能收到污染。也就是说,不能参与任何选出模型的工作。)
验证(Validation)
原来的训练数据分割出一部分作为测试数据,也被叫做validation set。
同样,也会有Hoeffding不等式的保证。¥E_{test}就是以前的就是以前的E_{in}$.
为了和原来的EoutE_{out}作比较,我们知道更多的训练数据一般来说会有更好的EoutE_{out}。所以很大程度上来说也就有以上的保证。
那Validation Set的大小K应该如何选择?选择的K应该尽可能地让下面这三个Error约等式成立。
通常情况下,K取N/5。
Leave-One-Out Cross Validation
k要足够小,让Eout(g)E_{out}(g)和Eout(g−)E_{out}(g-)很接近。又要很大,让Eout(g−)E_{out}(g-)和Eval(g−)E_{val}(g-)很接近。考虑一个极端的情形,取非常小的K = 1。k足够小,让Eout(g)E_{out}(g)和Eout(g−)E_{out}(g-)很接近。但是,这个时候,Eout(g−)E_{out}(g-)和Eval(g−)E_{val}(g-)就很不接近了。
下面的ene_n表示取第n笔数据作为validation data,所得到的Eval(g−)E_{val}(g-)。ene_n到底能不能告诉我们Eout(g)E_{out}(g)有多好呢?一个ene_n当然不行,那把每笔数据都作为一次validation data然后平均起来,选择平均Error最小的作为最后的g,这样的方式叫做cross validation。
Leave-one-out Cross Validation看起来很厉害,那问题是Leave-one-out Cross Validation能不能告诉我们最在乎的事情Eout(g)E_{out}(g)有多好。
假设有一个算法和1000笔数据拿来做Leave-one-out Cross Validation,然后对各式各样的1000笔数据来做取一个平均。等一下要证明跟Eout(N−1)E_{out}(N-1)的平均值是可以连接的。因为Eout(g−)E_{out}(g-)与Eout(g)E_{out}(g)几乎是一样的,前者是1000笔数据做出来的,后者是999笔数据做出来的。
所以,我们得到了一个几乎完全没有偏见的针对Eout(g)E_{out}(g)的衡量方式。也就是说,Leave-one-out Cross Validation在选择模型上会比EinE_{in}来的更有效。
V-fold Cross Validation
1000笔数据,你需要有1000遍,把999个数据放进去算,后面还要做平均。很明显,Leave-One-Out Cross Validation大大增加了计算的复杂度,实际应用上上可能不太行。另一方面,对于二元分类来说,分类结果在0与1之间跳动,Leave-One-Out求一个平均值。对这个平均值来说,这些0与1的跳动是很大的,希望用平均的方式把这些很大的跳动消掉,其实还是不太容易。
为了降低计算复杂度,将训练资料分为V份,取其中V-1做训练,另外1份做validation。这种方式通常叫做V-fold Cross Validation。实际上,就是把1000份资料分成100份。
实际上V通常取5或者10。
Traning就像初赛,各个模型都从Hypothesis Set中选出最合适的h;Validation就像复赛,从多种模型的scheme中选出一个最优的。这两步都是在进行模型选择,之后的testing methods都只是在对模型进行estimate了。也因为Validation还是在做选择,只要做选择就会有数据的污染等等,所以Validation仍然比testing要乐观。对于模型来说,testing的表现才是真正要看重的,不是最好的validation的表现。
相关文章推荐
- Hibernate中 一 二级缓存及查询缓存(1)
- 关于alasset读取fullscreen引起的内存问题
- 骑行应用开发《四》通讯录
- iOS 关闭布局向四周延伸
- 揭秘当下App推广的7个惊人黑幕:刷假用户月百万收入
- NSLog直接写入文件的方法
- 机器学习基石HOW BETTER部分(1)
- jquery改变链接移上光标时的颜色实例
- 修改linux内核启动logo
- 一个别人问我的多叉树的问题....
- 【转】debian下的update-rc.d的使用
- 真机调试出现Could not find Developer Disk Image问题解决办法
- 坐标系问题
- .NET Remoting 最简单示例
- 上传文件至远程服务器
- 机器学习基石HOW部分(3)
- 机器学习基石HOW部分(4)
- 页游 《大皇帝》
- html5高价值的android屏幕适配精华教程(HTML5+CSS3)!
- 修改用户属主属组 chown