本文作者:王 歌
文字编辑:戴 雯
技术总编:张 邯
前面我们在举例时,通常是将所使用的数据集按照75%和25%的比例划分为训练集和测试集,这主要是为了我们举例方便,同时划分后的数据量也依然符合大样本的要求。其实在机器学习中还有其他划分数据集的方法,可以在本身数据总量就比较小时使模型达到很好的效果,我们今天介绍的交叉验证法就是比较常用的方法,它在我们将要介绍的集成学习的Stacking算法中经常使用到。
1方法介绍
我们往往会得到多个模型,而最终选择的模型必定是泛化能力强,也就是在未知的新数据上效果最好的模型,因此我们在训练模型前就要将我们所掌握的数据进行划分,严格来说一般会划分为训练集、验证集和测试集,在训练集上进行训练模型,在验证集上试验效果、调整参数设置,在测试集上进行最终的测试。为了保证最终的效果,这三个集合不能有交集,常见的比例是8:1:1。当然,通常我们只有训练集和测试集也是可以的,前面我们使用的样例数据集只有几百个,因此也没有划分验证集。我们所使用的train_ test_split属于留出法,也就是随机将一部分数据作为训练集,剩下的作为测试集。但对样本信息的利用往往不充分,并且需要的样本量较大。如果我们本身样本量有限,并且想充分利用数据集中的信息,我们可以采用交叉验证法。
交叉验证法是将数据集划分为k个大小相似的互斥子集,并在划分时保持数据分布的一致性,每次用k-1个子集的并集作为训练集,剩余的做测试集,进行k次训练,最后取k次结果的均值。该方法依赖于k值的选取,通常取10,因此也称为k折交叉验证(k