这篇文章尤其适合平时用通用数据集进行实验比较多而没有自己根据现实场景构造过数据集的同学,可以看看测试集深层次的含义。

背景

所谓的测试集,其实是针对算法而言,用于评估算法效果的样本集合,说白了,就是考题,考考模型他的能力咋样,因此题出的好坏直接影响我们对模型的实际判断,那么如何构造一个好的测试集,就很关键了。

什么好的测试集

要构造好的数据集,首先需要知道的就是什么样的数据集是好的,而要知道什么数据集是好的,那就需要知道测试集的核心目标。

之所以要构造测试集,就是要查看一个算法的综合效果,我们需要足够的case分析出算法在具体场景中的综合效果,从这个解释来看,其实能拆解出这些要求:

  • 测试集要和具体场景的分布要一致,测试集结果才能和真实场景场景结果接近。

  • 测试集规模要足够,一方面才能覆盖更多具体场景的特殊情况,另一方面统计指标才足够准确。

  • case质量,准确率要足够高,测试集算的指标才正确。

因此,我们要围绕这些角度来设计和构造数据集。

案例

来举个栗子吧,开放域搜索的意图识别场景,要评估准确率,看好,此处只评估正类的准确率,应该怎么构造数据集。

首先,明确问题,开放域搜索场景,那我们的数据分布应该是要根据在线情况,最简单的方式,就是在线随机query抽样。第二,我们只需要评估准确率,准确率的分母是算法认为是正类的数量,分子是分母中实际是正类的数量。从这里可以看到,我们需要的数据最大的范围就是算法人为是正类的部分,这种范围的缩小,可以降低我们标注数据的成本,而且这个测试集的规模,就是分母的大小就已经足够。

值得注意的是,里面有一些细节,我们考虑开放域的搜索场景,搜索的大部分情况是用户打字输入,这种输入方式的特点就是字数可能不是很多,说法也比较严谨,口语化的说法会有但是占比肯定不会很高,我们更应该关注的就是这些字数不是很多,说法严谨的部分,这部分在测试集的占比应该是比较高的,我们必须有这样的一些基本的业务和数据判断。

据此,我们来构造数据集。我给的方案是这样的:

  • 首先,从日志中随机拿出足量query。

  • 然后,用先有待测的算法进行跑这批query。

  • 抽取算法认为是正类的部分,就是测试集。

  • 跟进标注,完成准确率评估。

这里可以看到,虽然我们在线拿到了很多query,但我们最终只用了算法认为是正类的部分,因为我们根据目标反推来看,只需要这部分,这个测试集才是我们需要的。

构造原则

总结一下构造原则吧,可以作为构造测试集的checklist。

  • 符合功能预期。测试集要真的可以测得到自己希望测到的东西。

  • 服从具体场景。真实场景常见的东西,数据集里也要对应高频。

  • 统计意义。要求数据集的绝对量要足够,具体地,要求指标计算下每个数的绝对数都要比较大。

  • 可靠性。数据标注和数据质量的保证。

其他细节问题

大家可能会有一些疑问,这里预判一下,给大家回答。

去重和不去重的问题

根据28法则,在线的问题分布一定是集中的很集中,分散的很分散,在这个基础下,数据的去重和不去重差别会非常大。

  • 不去重测试集,会更关注比较关键、高频的问题,这些问题一旦没有解决,指标会骤降。

  • 去重测试集,高频信息会被稀释,所有信息都是均匀出现的,相对的其实低频长尾的信息相对被增强了,加上低频长尾的情况本身就更复杂多样,所以在数据集中复杂的信息,所以此时的指标会更关注低频长尾。

这里没有好坏之分。一般而言我们是希望这两者下的指标都比较高的,前者是符合真实使用情况,所以必须不低,而后者其实是一种鲁棒性、稳定性的体现,所以也不希望低,只是两者关注点不同而已,通过一些差异是可以分析出不同的问题的。

测试集规模

在前面,我提到了一个说法,足量,什么叫足量,其实非常模糊,是根据实际情况来确定的。同样以上面的问题为例,如果是自测,其实自己标一百两百条,做自测评估是足够了,而如果要做上线前的评估,我希望是能尽量达到一两千条的水平,可以结合标注人力和自己的时间来判断,我们都知道,对统计指标,数据越多指标越精准,但是这个和人力时间是矛盾的,这里需要自己权衡。

和训练集的关系

在实验室做得比较多的都知道,训练集和测试集在开放数据集下是一致的,一般的构造方式就是直接从训练集里面抽一部分出来做测试集,这个和我今天聊的文章好像不太一样,测试集并没有从训练集里面抽,这里的测试集甚至和训练集没有什么关系,这到底是怎么回事。

首先,先聊通用数据集的问题。通用数据集常用于测算法的具体学习和训练能力,在一定情况下能尽可能学到训练集里的信息而避免产生过拟合,而不具有非常明确的现实场景,所以此时,这种构造方式非常合理。

然后,再聊聊现实场景应用的时候测试集和训练集的一致性的问题。我的答案是,不需要一致。首先,测试集是依赖于现实场景的,所以相对固定,但是在学习过程中,我们其实通过一些数据手段是可以提升最终效果的,那训练集和测试集自然不需要拘泥于分布一致性问题;其次,我们回想学习考试,简单的题目一般占题目大多数,而难题只是一小部分,但是我们学习的时候,是简单的题目学的时间长还是难的学的长,我们一般需要更多的时间关注难题才能把难题做出来,哪怕她的比例其实不高,从这个角度看,我们其实需要更多的数据才能让模型学习到这个更难学习的东西,但有难度的东西往往在数据集里并不常见,从这个例子来看,其实测试集和训练集不一致可能更加正常。

小结

最近一连几篇,或多或少,或直接或间接地聊了这个数据集的问题,应该是到此为止了,这个东西很琐碎也很细小,不好聊,但是真的挺希望给大家说明白的,我理解算法工程师的功力其实很体现在这些地方,对数据的理解把控,对结果的分析和问题发现等等,这比多懂几个模型或者策略似乎还要重要的多。


欢迎大家关注CS的陋室,一个非常不错的技术朋友。

推荐阅读:

我的2022届互联网校招分享

我的2021总结

浅谈算法岗和开发岗的区别

互联网校招研发薪资汇总

2022届互联网求职现状,金9银10快变成铜9铁10!!

公众号:AI蜗牛车

保持谦逊、保持自律、保持进步

发送【蜗牛】获取一份《手把手AI项目》(AI蜗牛车著)

发送【1222】获取一份不错的leetcode刷题笔记

发送【AI四大名著】获取四本经典AI电子书

机器学习之测试集构造思考相关推荐

  1. 如何爬升用于机器学习的测试集

    爬坡测试集是一种在不影响训练集甚至开发预测模型的情况下,在机器学习竞赛中实现良好或完美预测的方法.作为机器学习竞赛的一种方法,这是理所当然的,大多数竞赛平台都对其施加了限制,以防止出现这种情况,这一点 ...

  2. 今日学习内容--机器学习的测试集选择方法

    机器学习测试集选择方法 目录 机器学习测试集选择方法 留出法 多次留出法选择 交叉验证法 留一法交叉验证 自助法 总结 目前来说总共有三种测试集选择方法: 留出法 交叉验证法 自助法 以下分别对三种方 ...

  3. 机器学习典型步骤以及训练集、验证集和测试集概念

    1. 机器学习典型步骤 数据采集和标记 数据清洗 特征选择 如房子的面积.地理位置.朝向.价格等. 模型选择 有监督还是无监督,问题领域.数据量大小.训练时长.模型准确度等多方面有关. 模型训练和测试 ...

  4. python可视化多个机器学习模型在独立测试集(test data set)上面的AUC值、可视化模型效能

    python可视化多个机器学习模型在独立测试集(test data set)上面的AUC值.可视化模型效能 # x_lables为模型名称列表,包括,逻辑回归.朴素贝叶斯.支持向量机.随机森林.xgb ...

  5. 【入门篇】如何正确使用机器学习中的训练集、验证集和测试集?

    [注] ·本文为转载文章,原文作者是王树义老师,原文链接为 https://zhuanlan.zhihu.com/p/71961236 训练集.验证集和测试集,林林总总的数据集合类型,到底该怎么选.怎 ...

  6. 机器学习中训练集、验证集和测试集的区别

    通常,在训练有监督的机器学习模型的时候,会将数据划分为训练集.验证集合测试集,划分比例一般为0.6:0.2:0.2.对原始数据进行三个集合的划分,是为了能够选出效果(可以理解为准确率)最好的.泛化能力 ...

  7. [机器学习] 训练集(train set) 验证集(validation set) 测试集(test set)

    在有监督(supervise)的机器学习中,数据集常被分成2~3个即: 训练集(train set) 验证集(validation set) 测试集(test set) 一般需要将样本分成独立的三部分 ...

  8. 1.7 开发集和测试集的大小-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 1.6 开发集合测试集的大小 回到目录 1.8 为什么是人的表现 什么时候改变开发和测试集评估指标 (When to change dev/test sets and met ...

  9. 1.6 开发集和测试集的大小-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 1.5 训练/开发/测试集划分 回到目录 1.7 什么时候该改变开发_测试集和指标 开发集和测试集的大小 (Size of Dev and Test Sets) 在上一个视频 ...

最新文章

  1. Hadoop 1.2.1 集群安装一
  2. 9读书1-我在义务发财(1)
  3. b站的服务器在哪个位置,b站用的是哪个云服务器
  4. 支付系统设计:对账处理(二)
  5. 信息学奥赛C++语言:最大数max(x,y,z)
  6. Hadoop集群启动时NameNode未启动解决方法
  7. 用CSS画一些多边形状
  8. Apache从入门到精通
  9. oracle exp执行失败,EXP-00056: 遇到 ORACLE 错误 25153
  10. 北京游戏开发学习路线:花多少钱才能成为游戏开发?
  11. Linux下安装gcc和g++
  12. flex sdk中mx_internal function getTextField() 这种函数如何调用?
  13. 图书排行:计算机书籍每周销量排行榜
  14. 机器学习、数据挖掘、神经网络、人工智能和模式识别之间,主要是什么关系
  15. 【吐血整理】一份完备的集成学习手册!(附Python代码)
  16. css大图切割,利用CSS切割图片技术来动态显示图片
  17. 跟谁学盈利神话已破,烧钱大战没有赢家
  18. 镁客网每周硬科技领域投融资汇总(12.24-12.30),未来医疗占比猛增,阿里两项亿级投资...
  19. 电脑双屏下如何设置鼠标移动方向
  20. 《数据结构与算法》(二十)- 散列表查找

热门文章

  1. 广州的11个辖区_广东省广州市有哪些区?
  2. 利用GF-1 WFV数据估算西北地区地表反照率
  3. 易联云打印机 php
  4. 基于HTML(服装商城)电商项目项目的设计与实现(html前端源码和论文设计)
  5. 什么情况下JVM内存中的一个对象会被垃圾回收
  6. 植物大战僵尸花园花盆种类
  7. unix 文件清理一例
  8. Day01.HTML5
  9. mysql rds 迁移_数据库迁移:如何将数据库从本地MySQL迁移到服务器RDS上?
  10. 大华网络摄像头,查看视频闪烁严重