划分训练集与测试集

在这里插入图片描述

引言

对于模型的评估与选择,我们可以通过实验测试来对学习器的泛化误差进行评估并对模型进行选择,因此我们需要一个测试集来测试学习器对没有见过的新样本的判别能力,并且用学习器在该测试集上的测试误差作为泛化误差的近似。

测试集应该尽可能与训练集互斥,也就是说测试集中的样本尽量不在训练集中出现,也就是尽量不在训练过程中被使用过。

为什么?举个栗子。在大学的期末考试中,老师会选择用平时的作业题来作为期末考试题。如果期末考试题中作业题占了很大一部分,那么这样的期末考试题对于评估大家学习的效果是不理想的,努力的人和摸鱼的人的成绩差别不大,虽然看似是种双赢的结果,但对于选拔人才其实是不利的,因为平时努力的人更具有举一反三的能力,即便不是作业题,他们能够做出来的概率也很高。对于评估分类器也是如此。如果测试样本被用作训练,得到的结果是“乐观的”,并不能很好的区分学习器的泛化能力。

但是我们只有一个包含m个样本的训练集D,既要训练,又要测试,那么如何才能做到这一点呢?其实很容易想到,对D进行适当处理,分出测试集T和训练集S。接下来介绍几种常见的划分测试集和训练集的方法。

留出法(hold-out)

留出法直接将数据集D划分为两个互斥的集合:训练集S与测试集T。满足S∪T=D,S∩T=Ø。用S训练模型,用T评估误差作为对泛化误差的估计。

Note:

  • 训练集和测试集的划分要尽可能保持数据分布的一致性。在分类任务中,至少要保持样本的类别比例相似。从采样角度来说,保留类别比例的采样方式称为分层采样。例如测试集中正例和反例的比例是2:1,那么训练集和测试集中正例和反例的比例都要是2:1。
  • 即便给定了样本比例后,仍然存在多种方式对数据集D进行划分,比如1000个正例中要分到训练集中700个,分到测试集中300个,但这700个和300个具体是哪些?这样不同的划分会导致不同的训练集\测试集。一般采用若干次随机划分、重复实验评估取平均值作为留出法的评估结果。

窘境:

  • 若训练集S包含绝大多数样本,则训练出的模型更接近于直接用D训练出的模型,但由于T较小,评估的结果可能不够稳定准确,我们说此时评估结果的稳定性差。
  • 若测试集T多包含一些样本,则测试集S和训练集D差别就会增大,被评估模型与用D训练出的模型可能有较大差别,我们说此时评估结果的保真性差。

常用比例:

训练集和测试集大小的比例没有完美的解决方案,常见的做法是将约2/3至4/5的样本用于训练,其余用于测试。例如训练集:测试集=7:3。

交叉验证法(cross validation)

交叉验证法先将数据集D分为k个大小相似的互斥子集。每个子集Di都尽可能与整体数据集D保持数据分布的一致性,即从D中分层采样。

这样划分得到k个互斥子集后,则进行k次训练和测试。每次训练取k-1个子集,合起来作为训练集,剩下的那1个子集用作测试集;一共有k种取法。k次训练则是用这k种取法划分的k种训练集和测试集。最终返回k个测试结果的平均值。

Note:

交叉验证法评估结果的稳定性和保真性很大程度上取决于k的取值。k常用的取值是10,又称10折交叉验证。
与留出法类似,交叉验证法对于具体k个子集中有哪些样本同样存在多种划分。k折交叉验证通常要随机使用不同的划分重复p次,最终的评估结果是这p次k折交叉验证结果的均值,例如常见的10次10折交叉验证。

留一法

如果交叉验证法中的k等于数据集D的大小m,那么就得到交叉验证法的一个特例,又称为留一法。

留一法中被实际评估的模型与期望评估的模型很相似,留一法的评估结果往往被认为较准确。

缺陷:

  • 数据集较大时,训练m个模型的计算开销太大。
  • 留一法的估计结果未必永远比其他评估方法准确。

自助法(bootstrapping)

自助法以自主采样法为基础。

具体做法:

给定m个样本的数据集D,从D中进行m次随机采样,每次采样后均放回。于是得到新的数据集D’。D’中存在重复数据。但数据集D和新的数据集D’的大小均为m。

D中有一部分样本会在D’中重复出现,另外一部分样本不会出现。我们知道在一次随机抽样中,m个样本中抽中某个样本的概率为1m,那么不被抽中的概率为1−1m。由二项分布,m次独立采样中某样本一直不被抽中的概率为(1−1m)m。

对上式取极限:

limm➡∞(1−1m)m=1e≈0.368

也就是说,通过自主采样,一个样本始终不出现在D’中的概率大约是0.368,由于D的大小为m,我们可以得到D中大约有0.368 * m个样本始终不会出现在D’中。

于是,我们用D’作为训练集,而D−D′作为测试集。

优点:

自助法在数据集较小、难以有效划分训练集和测试集时很有用。

缺点:

这里给大家整理了一份《软件测试工程师进阶的技术栈》,包含了诸多技术栈,希望能帮助在升级打怪中提供中坚力量

在这里插入图片描述

给大家推荐下我自己建的软件测试交流学习群: 902061117 ,群里都是搞软件测试的,如果你正在学习测试 ,小编欢迎你加入,大家都是测试党,群内不定期分享干货(都是软件测试相关的),包括我自己整理的一份2021最新的进阶自动化资料。

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你

关注我的微信公众号【伤心的辣条】免费获取~

送上一句话:

世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿望,不在等待中拥有,而是在奋斗中争取。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

在这里插入图片描述

好文推荐:

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

测试岗反复跳槽,跳着跳着就跳没了…

软件测试人员该学习 Python 的七个理由

App公共测试用例梳理

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

35岁之后软件测试工程师靠什么养家?我能继续做测试!

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值