交叉验证 Cross validation
简单交叉验证 hold-out cross validation
- 从全部训练数据S中随机选择s个样例作为训练集training set,剩余的作为测试集testing set;
- 通过对测试集训练 ,得到假设函数或者模型;
- 在测试集中对每一个样本根据假设函数或者模型,得到训练集的类标,求出分类正确率;
- 选择具有最大分类率的模型或者假设。
测试集和训练集分开,避免过拟合现象。
k折交叉验证 k-fold cross validation
- 将全部训练数据S分成k个不相交的子集,假设S中的训练样例个数为m,那么每一个子集有m/k个训练样例,相应的子集为 {s1,s2,…,sk};
- 每次从分好的子集中中拿出一个作为测试集,其它k-1个作为训练集;
- 根据训练训练出模型或者假设函数;
- 把这个模型放到测试集上,得到分类率;
- 计算k次求得的分类率的平均值,作为该模型或者假设函数的真实分类率。
这个方法充分利用了所有样本。但计算比较繁琐,需要训练k次,测试k次。
留一法 leave-one-out cross validation
留一法就是每次只留下一个样本做测试集,其它样本做训练集,如果有k个样本,则需要训练k次,测试k次。留一法即k=1的k折交叉验证。
留一法计算最繁琐,但样本利用率最高。适合于小样本的情况。