[FML]学习笔记一Cross-validation交叉验证
在实际的工程中,有时labeled data的数量不足以留出validation sample(验证样本)否则会导致training sample(训练样本)的数量太少。为了解决这个问题,我们引入一种叫做 n-fold cross-validation(n重交叉验证)的方法。

图片1.1
如图1.1所示,n-fold cross-validation的步骤如下:
1.首先随机的将大小为m的总标记样本分为n个fold(子样本),通常每个子样本的大小相同为mi=m/n。
2.对于每一个子样本mi,算法在除了该子样本的所有子样本上训练,得到一个hypothesis,将得到的hypothesis在该子样本mi上进行test得到error。
3.最终在所有的hypothesis中选择error最小的hypothesis。
这里的error为cross-validation error,不是只在mi上test,而要在所有的fold中进行test并得到平均值:

那么,如何选择n的值也就是子样本fold的数量呢?这里涉及到了一个bias和variance权衡的问题:
bias和variance的定义:
bias:a learner's tendency to consistently learn the same wrong thing.即度量了某种学习算法的平均估计结果所能逼近学习目标的程度。
variance:the tendency to learn random things irrespective of the real signal.即度量了在面对同样规模的不同训练集时,学习算法的估计结果发生变动的程度。
用stanford机器学习讲义上的一张图就能很好的解释二者的区别:

图片1.2
当n取的很大时,validation fold的大小很小,相应的training sample的大小就很大,那么算法就有可能会出现small bias high variance的情况,也就是对于training sample出现了过拟合,而对于不在training sample中的点并不能做很好的预测。
当n取的很小时,相应的validation fold的大小很大,training sample的大小很小,也就会出现small variance high bias的情况。
通常在实际的工程中,n取5或者10。
在实际的工程中,首先要将sample分为training sample和test sample,再在training sample中跑n-fold cross validation,得到的cross-validation error最小的Θ并不是直接得到hypothesis,而是作为θ0再在所有的training sample中再次train,并将最终的结果在test sample上测试。
[FML]学习笔记一Cross-validation交叉验证的更多相关文章
- cross validation交叉验证
交叉验证是一种检测model是否overfit的方法.最常用的cross validation是k-fold cross validation. 具体的方法是: 1.将数据平均分成k份,0,1,2,, ...
- Spring学习笔记2——表单数据验证、文件上传
在上一章节Spring学习笔记1——IOC: 尽量使用注解以及java代码中,已经搭建了项目的整体框架,介绍了IOC以及mybatis.第二节主要介绍SpringMVC中的表单数据验证以及文件上传. ...
- SpringMVC学习笔记七:SpringMVC的数据验证
SpringMVC支持JSR(Java Specification Requests, Java规范提案)303-Bean Validation数据验证规范,该规范的实现者很多,其中较常用的是 Hib ...
- <转>ASP.NET学习笔记之MVC 3 数据验证 Model Validation 详解
MVC 3 数据验证 Model Validation 详解 再附加一些比较好的验证详解:(以下均为引用) 1.asp.net mvc3 的数据验证(一) - zhangkai2237 - 博客园 ...
- 前端MVC学习笔记(二)——AngularJS验证、过滤器、指令
一.验证 angularJS中提供了许多的验证指令,可以轻松的实现验证,只需要在表单元素上添加相应的ng属性,常见的如下所示: <input Type="text" ng-m ...
- Yii学习笔记之四(表单验证 api 翻译)
1.表单验证 对于用户输入的全部数据,你不能信任,必须加以验证. 全部框架如此.对于yii 能够使用函数 yii\base\Model::validate() 进行验证 他会返回boolean值的 ...
- [FML]学习笔记三 Rademacher Complexity
该章节证明用到的不等式:Hoeffding不等式,McDiarmid不等式以及jensen不等式 Hoeffding's: McDiarmid不等式是Hoeffding不等式的一个推广,用f(S)代替 ...
- easyui学习笔记14-拓展的基本验证规则
/** * 扩展的基本校验规则, */ $.extend($.fn.validatebox.defaults.rules, { minLength : { // 判断最小长度 validator : ...
- angular学习笔记(二十)-表单验证
本篇主要介绍angular中的表单验证: 表单验证主要有以下一些内容: 1. required指令: 相当于html5的required属性,验证不能为空 2. ng-maxlength属性: 验证内 ...
随机推荐
- 基类方法的反隐藏 反private 秘籍
class GoodStudent:private Mentor,private Student { public : using Mentor::GetInfo; ///------------ ...
- DataTables语言国际化
$('#example').DataTable({ language: { "sProcessing": "处理中...", ...
- MySQL binlog_rows_query_log_events
当binlog_format=statement的时候进制日志只记录的是SQL语句,当binlog_fromat=row的时候记录的是event,如果想要在row模式的情况下 也记录SQL语句:bin ...
- C语言里面关于数组的一个容易忽视的小细节
ginobili@VM_44_28_sles10sp1:~/code> cat test3.cpp #include <stdio.h> int main(){ char a[5] ...
- 【转】精简深拷贝ArrayList实例
原文网址:http://gghhgame51333.blog.51cto.com/138362/289383 精简深拷贝ArrayList实例(包括递归和序列化方法) 2007-07-12 16:50 ...
- Oracle查询死锁&杀死会话
select object_name,machine,s.sid,s.serial# from v$locked_object l,dba_objects o ,v$session s where ...
- [转载]date命令时间转换
Linux时间戳和标准时间的互转 在LINUX系统中,有许多场合都使用时间戳的方式表示时间,即从1970年1月1日起至当前的天数或秒数.如/etc/shadow里的密码更改日期和失效日期,还有代理服务 ...
- Spring Ldap 的增删改查
package ldap.entity; /** * 本测试类person对象来自schema文件的core.schema文件 * objectClass为person,必填属性和可选属性也是根据该对 ...
- python scrapy 基础
scrapy是用python写的一个库,使用它可以方便的抓取网页. 主页地址http://scrapy.org/ 文档 http://doc.scrapy.org/en/latest/index.ht ...
- SRM 588 D2 L2:GUMIAndSongsDiv2,冷静思考,好的算法简洁明了
题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12707 算法决定一切,这道题目有很多方法解,个人认为这里 ve ...