K折交叉验证
模块 |
---|---
sklearn.model_selection.KFold |
sklearn.model_selection.GroupKFold |
sklearn.model_selection.StratifiedKFold |
核心思想
- 将全部训练集S划分成k个不相交的子集,假设S中训练样例的个数为m,那么每一个子集有m/k个训练样例,相应的子集成为{s1, s2, s3...,sk}。
- 每次从分好的子集里面,拿出一个作为测试集,其他k-1个作为训练集。
- 在k-1个训练集上训练处学习器模型。
- 把这个模型放到测试集上,得到分类率。
- 计算k次求得的分类率的平均值,作为该模型或者假设函数的真实分类率。
这个方法充分利用了所有的样本,但是计算繁琐,需要训练k次,测试k次。
留一法
模块 |
---|---
sklearn.model_selection.LeaveOneOut |
sklearn.model_selection.LeaveOneGroupOut |
sklearn.model_selection.LeavePOut |
sklearn.model_selection.LeavePGroupsOut |
核心思想
留一法验证(Leave-one-out,L00):假设有N个样本,将每一个样本作为测试样本,其他N-1个样本作为训练样本。这样得到N个分类器,N个测试结果。用这N个结果的平均值来衡量模型的性能。
如果LOO与k-fold CV比较,LOO在N个样本上简历N个模型而不是K个。更进一步,N个模型的每一个都是在N-1个样本上训练得,而不(k-1)n/k。两种方法中,假定k不是很大并且k<<N。LOO比k-old更加耗时。
留P法验证(Leave-p-out):有N个样本,将每p个样本作为测试样本,其他N-P个样本作为训练样本,这样得到Cnp个训练测试对。当P>1时,测试集将会发生重叠,当P=1时,就变成了留一法。
随机划分法
模块 |
---|---
sklearn.model_selection.ShuffleSplit |
sklearn.model_selection.GroupShuffleSplit |
sklearn.model_selection.StratifiedShuffleSplit |
核心思想
ShuffleSplit迭代器产生指定数量的独立的train / test 数据集划分。首先对样本全体随机打乱,然后在划分出 train / test 对。可是使用随机数种子randon_state来控制随机数序列发生器使得运算结果可重现。
ShuffleSplit是KFold交叉验证的比较好的替代,它允许更好的控制迭代次数和train / test样本比例。
StratifiedShuffleSplit是ShuffleSplit的一个变体,返回分层划分,也就是在创建划分的时候要保证每个划分中类的样本比例与整体数据集中的原始比例保持一致。