概述
公众号后台回复“图书“,了解更多号主新书内容
作者:xiaoyi
来源:小一的学习笔记
今天分享一个比较简单的问题:数据集划分的三种方法。
数据集划分算是在数据分析建模中比较重要的,模型的好坏不但和训练数据有关,还和测试数据有关,当然,也和评估指标有关,不过今天先来看前者。
▶什么是数据集和它的划分?
对于模型来说,其在训练集上面的误差我们称之为 训练误差 或者 经验误差,而在测试集上的误差称之为 测试误差。
因为测试集是用来测试学习器对新样本的学习能力,因此我们可以把测试误差作为 泛化误差 的近似(泛化误差:在新样本上的误差)。
对于我们来说,我们更关心的是模型对于新样本的学习能力,即我们希望通过对已有样本的学习,尽可能的将所有潜在样本的普遍规律学到手,而如果模型对训练样本学的太好,则有可能把训练样本自身所具有的一些特点当做所有潜在样本的普遍特点,这时候我们就会出现 过拟合 的问题。
因此在这里我们通常将已有的数据集划分为训练集和测试集两部分,其中训练集用来训练模型,而测试集则是用来评估模型对于新样本的判别能力。
对于数据集的划分,我们通常要保证满足以下两个条件:
训练集和测试集的分布要与样本真实分布一致,即训练集和测试集都要保证是从样本真实分布中独立同分布采样而得;
训练集和测试集要互斥
对于数据集的划分有三种方法:留出法,交叉验证法和自助法,下面挨个介绍
▶留出法
留出法 是直接将数据集 D 划分为两个互斥的集合,其中一个集合作为训练集 S,另一个作为测试集 T
我们需要注意的是在划分的时候要尽可能保证数据分布的一致性,即避免因数据划分过程引入额外的偏差而对最终结果产生影响。
为了保证数据分布的一致性,通常我们采用 分层采样 的方式来对数据进行采样。
假设我们的数据中有 m1 个正样本,有 m2 个负样本,而 S 占 D 的比例为 p,那么 T 占D 的比例即为 1−p,我们可以通过在 m1 个正样本中采 m1∗p 个样本作为训练集中的正样本,通过在 m2 个负样本中采 m2∗p 个样本作为训练集中的负样本,其余的作为测试集中的样本。
注意:样本的不同划分方式会导致模型评估的相应结果也会有差别
例如:
如果我们把正样本进行了排序,那么在排序后的样本中采样与未排序的样本采样得到的结果会有一些不同
因此通常我们都会进行多次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。
缺点:
对于留出法,如果我们的对数据集 D 划分后,训练集 S 中的样本很多,接近于 D,其训练出来的模型与 D 本身训练出来的模型可能很接近,但是由于 T 比较小,这时候可能会导致评估结果不够准确稳定;
如果 S 样本很少,又会使得训练出来的样本与 D 所训练出来的样本相差很大。
通常,会将 D 中大约 2/3~4/5 的样本作为训练集,其余的作为测试集
▶交叉验证法
k 折交叉验证:通常将数据集 D 分为 k 份,其中的 k-1 份作为训练集,剩余的那一份作为测试集,这样就可以获得 k 组训练/测试集,可以进行 k 次训练与测试,最终返回的是 k 个测试结果的均值。
这里数据集的划分依然是依据 分层采样 的方式来进行。
对于交叉验证法,其 k 值的选取往往决定了评估结果的稳定性和保真性,通常 k 值选取 10。
与留出法类似,通常我们会进行多次划分得到多个 k 折交叉验证,最终的评估结果是这多次交叉验证的平均值。
当 k=1的时候,我们称之为留一法
我们可以发现留一法并不需要多次划分,其划分方式只有一种
因为留一法中的 S 与 D 很接近,所以 S 所训练出来的模型应该与 D 所训练出来的模型很接近,因此通常留一法得到的结果是比较准确的
但是当数据集很大的时候,留一法的运算成本将会非常的高以至于无法忍受。
▶自助法
留出法与交叉验证法都是使用 分层采样 的方式进行数据采样与划分,而自助法则是使用 有放回重复采样 的方式进行数据采样
自助法:我们每次从数据集D中取一个样本作为训练集中的元素,然后把该样本放回,重复该行为 m 次,这样我们就可以得到大小为m的训练集,在这里面有的样本重复出现,有的样本则没有出现过,我们把那些没有出现过的样本作为测试集。
进行这样采样的原因是因为在D中约有 36.8% 的数据没有在训练集中出现过(取极限后求得)
这种方法对于那些数据集小、难以有效划分训练/测试集时很有用,但是由于该方法改变了数据的初始分布导致会引入估计偏差。
随机森林算法中用到的就是自助法,具体可看随机森林篇:大话系列 | 集成算法之随机森林
▶总结一下
对于数据量充足的时候,通常采用 留出法 或者 k折交叉验证法 来进行训练/测试集的划分;
对于数据集小且难以有效划分训练/测试集时使用 自助法;
对于数据集小且可有效划分的时候最好使用 留一法 来进行划分,因为这种方法最为准确 『最常用』
当数据集划分完毕后,就需要建立相关模型,具体的模型算法可选的就很多了,前面都有介绍过。
模型建立好之后我们需要对模型的的泛化能力进行衡量,而衡量模型的评价标准有:错误率与精准率、查准率、查全率与F1、ROC与AUC、错误率和代价曲线 等等
下篇将会分享《模型评估指标》
◆ ◆ ◆ ◆ ◆麟哥新书已经在当当上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前当当正在举行活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:
数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。
管理员二维码:
猜你喜欢
● 卧槽!原来爬取B站弹幕这么简单● 厉害了!麟哥新书登顶京东销量排行榜!● 笑死人不偿命的知乎沙雕问题排行榜
● 用Python扒出B站那些“惊为天人”的阿婆主!● 你相信逛B站也能学编程吗
最后
以上就是朴实西牛为你收集整理的数据集划分的三种常见方式!的全部内容,希望文章能够帮你解决数据集划分的三种常见方式!所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复