点击下面卡片关注我呀,每天给你送来AI技术干货!

来自:CS的陋室

在现实应用中,看算法效果绝对不是跑完case简单的看看准招就完事的,我们需要明确自己的建模目标,构造适合我们问题的数据集来评估整体效果,保证客观、全面。

明确算法设计的目标

当我们在做一件事之前,都是要明确目标的,对于一个算法的设计,总结上两个点是:

  • 满足功能。例如分类、NER、语义相似度之类的。

  • 特定的效果指标。

前者在现实的算法落地是比较开放的,问题是具有多样性的,我们设计的算法就是要完成特定的功能,给定输入我们要能够给预期的输出就行,问题就在于后者,后者是评估算法的根本,数值的高低就决定了算法的好坏,这些其实都很好理解。

数据集的设计和挖掘

经常做科研或者比赛的人 可能都习惯与给好了评测集,每次优化一个模型直接跑一遍就知道了效果的好坏,我们能把更多精力都放在效果优化上,这肯定是最舒服的,但是实际上,我们需要构建到比较稳定可靠的评测集,才能够我们看的指标是可靠的,真实的,能表现我们的真实情况的,也是能指导我们后续算法优化迭代的。因此,评测集的构建就显得非常重要。

那么,何为一个好的评测集呢:

  • 数据质量高,错误少,这个应该是最基本的条件,但有的时候可能也是很困难的,训练数据尚且可以保留一些作为噪音,但是评测集的数据质量保证不了的话,我们是很难明确当前的算法现状的。

  • 能够尽可能覆盖算法使用场景的各个情况,能协助更快发现问题,就像考试只有考的尽可能全面才能知道学生的全面能力。

  • 数据的分布上能和实际情况尽可能一致,能快速定位未解决的关键(高频)难题,对于高频的,一般是用户更容易遇到的,那这些就应该是我们集中精力观察和实现的。

  • 数据的抽取方式和数量是足够随机的、鲁棒的,即同一个方法抽出了不同的数据,不会对指标产生很大影响。这个点说这比较模糊,但其实最重要的就是要有足够量的数据,试想一下,100条数据,有一条变化就会带来1%的波动,200条就是0.5%,到了1000条的时候就只有0.1%,所以足量的数据其实就很能保证这个鲁棒性了。

  • 如果是针对算法优化,还需要考虑的是,新一版本优化的点是否能体现在这个数据集上。

上面的规则看着都很简单,但实际上其实实践起来的难度很高。举个例子,现在我要做一个划分用户query是否具有天气意图,任务的边界很简单,本身的任务理解也不难,就是个二分类,但是我们要怎么抽数据集,假设已经给定了一批用户的在线query,我们可能就要结合上面的要素考虑下面几个点:

  • 数据是否有标注,标注质量如何,标注是否符合任务的标准,举个例子,可以看看“天气之子”、“明天下雨吗”之类的比较模糊容易分错的样本是否标注对了。

  • 数据是否能够覆盖在线可能出现的大部分情况。笼统的天气状况,特殊疑问句,带有地点的天气问答等。

  • 是否有去重,是否去重差别非常大,去重会导致高频的情况会被弱化成和低频的一致,这样算出的指标就很可能是针对低频的,而高频的query则很有可能被忽略。由于肯定是高频问题尽快解决,因此在高频的达到一定程度后,我们仍然需要关注长尾的,因此去重的指标仍不是说就可以不看了。

  • 数据量如何,是否足够随机。(其实可以把一大份数据拆分几个数据集,看同一个算法求的指标是否接近)

  • 数据对比的时候,我们很可能通过老方法抽出一些数据来对比新方法,这是很容易犯的错,一定要时刻注意,这种方式是会偏向老方法的,因为用老方法抽取的case基本都是老方法做的比较好的数据,新方法不见得能解决的好,而且能被新方法解决但是老方法不能解决的部分无法在这批数据里面体现出来,因此大家切记这点。

指标的设计

说到指标,大家很容易把这个限制在准招F1AUC上,毕竟简单的分类、NER、语义相似度之类的基本任务都是可以轻松用这些分类指标来完成衡量的,虽说这些指标很重要,但实际上我们不能止步于此,我们有可能用不了这些指标,举个例子,推荐系统的准招是否靠谱,在线各种奇怪的现象相信大家都有所耳闻,也有可能有些问题是没法构造这样的指标的,还是推荐系统,我们关注最终的排序,我们能说召回A就对召回B就不对吗?某些产品的端到端效果,例如搜索、语音助手等,更多的是用户的体验和需求的满足情况,准招这种简单严格的指标其实并不一定适合评价这些问题,可能需要用满意度之类的评分才行。

说了这么多,其实就像大家对指标这个事想清楚想明白,我们要用这个指标观测什么内容,而不是简单的一个“效果”来体现。

西瓜书里有一块对准确率和召回率的讲解非常生动,准确率是要保证算法认为的坏瓜里真的是坏瓜的占比更高,召回率是想知道真的坏瓜有多少能被这个算法找到,这是对指标本身的理解,另外还有算法视角的理解,再举个极端的例子,99个健康人1个病人,算法人为所有人都是健康的,对于健康人的判断,算法的准确率是99%,这个数看着很舒服,但是对于病人的判断是(0/0),没法判断,另一方面,在召回率上,健康人视角召回率就会100%,同样看着很舒服,病人视角召回率就是0/1=0了,说明这个算法压根没在干活。

在新冠判定是否感染的这个场景看,即核酸检测,我们要看核酸检测本身的好坏,我们要看的一个是“召回率”,即通过核酸检测,有多少的病人能被找到,视角是病人视角,另一方面也要保证准确率,即判为病人的样本中真的是病人的占比,这两个指标才能够体现核酸检测到底是不是一个好的检测新冠的方法。

说了很多也很泛,我们来总结下有关指标设计需要考虑的点:

  • 能够体现算法的目标,指标要能够判断算法是否真的完成了这个任务或者说完成这个任务的情况。同样是语义相似度,我可以考虑准招的AUC,可以考虑P@1之类的排序效果,也可以是端到端的满意度等,最重要的是要看你希望知道的是什么信息,什么指标能够体现你需要的信息的。

  • 理解所设计的指标的深层含义,明确指标所体现的问题,同时了解指标对应的视角是否是我们任务希望的视角。

  • 判断好坏可以是单独的一个总分,也是可以是多元的,多角度的,要看评价的目标,对于一个大系统想知道现状,那就是一个打分就完事了,但是要拆解问题解决问题,一个指标不够,准招的组合使用就是为了平衡“不敢断案”和“宁可错杀,不要放过”这两种极端情况的,广告系统内不仅考虑收入还要考虑点击率、转化;率之类的因素就是为了避免因为广告多而影响了用户体验。

来举个栗子吧,我们现在需要衡量用户对推荐系统的体验情况,我们能想到的是什么,点击率、单篇文章停留时间,总体停留时间等,点击率一定代表用户体验吗,标题党咋办;单篇文章停留,一定程度上和用户对文章的兴趣就有很大关系,说明我们推荐的内容还是比较准的,但是只优化这个可能会导致长文章、长视频的量会增加,总体停留时间应该是一个比较理想的结果了,但可能也有问题等等。这和评估政府工作是一样的,GDP如果是唯一的指标,可能会导致片面的追求gdp忽略了民生、环境等其他因素。

小结

评价一件事情的好坏本身就是困难的,毕竟很难保证客观、全面,对于一个算法也是,由于算法是针对一个问题的方案,那肯定是需要从动机入手,而由于算法是指标导向,因此我们是需要数量足、质量够且分布合适的数据来估计出指标,实现完整地效果评估,今天的文章主要就是和大家谈评估的思路,以便大家在未来能更好地分析好算法。

说个正事哈

由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方深度学习自然语言处理”,进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心

投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

点击上面卡片,关注我呀,每天推送AI技术干货~

整理不易,还望给个在看!

如何评估一个算法效果相关推荐

  1. 如何去评估一个算法的时间复杂度?

    1.两种算法的比较 你知道数学家高斯那个关于1+2+3+-+100的故事吗? 高斯7岁那年开始上学.10岁的时候,一次一位老师想治一治班上的淘气学生,他出了一道数学题,让学生从1+2+3--一直加到1 ...

  2. 算法效果评估:均方根误差(RMSE)/ 标准误差

    文章目录 1. 评估算法的效果 2. 方差(Variance) 2.1 总体方差 2.1.1 在numpy中计算总体方差 2.1.2 在pandas中计算总体方差 2.2 样本方差 2.2.1 在nu ...

  3. 什么是维度诅咒?如何评估降维算法在当前任务数据集上的效果?

    什么是维度诅咒?如何评估降维算法在当前任务数据集上的效果? 什么是维度诅咒? 随着维数(或特征)个数的增加,任意两个样本或者实例之间的平均距离也会增加,换句话说,在高维空间中,实例往往位于空间的边缘. ...

  4. 评估一个垃圾收集(GC)

    在实践中我们发现对于大多数的应用领域,评估一个垃圾收集(GC)算法如何根据如下两个标准: 吞吐量越高算法越好 暂停时间越短算法越好 首先让我们来明确垃圾收集(GC)中的两个术语:吞吐量(through ...

  5. 生物效应大数据评估聚类算法的并行优化

    生物效应大数据评估聚类算法的并行优化 彭绍亮1,2,杨顺云2,孙哲1,程敏霞1,崔英博2,王晓伟2,李非3,伯晓晨3,廖湘科2 1. 湖南大学信息科学与工程学院&国家超级计算长沙中心,湖南 长 ...

  6. 五、在测试集上评估图像分类算法精度(Datawhale组队学习)

    文章目录 配置环境 准备图像分类数据集和模型文件 测试集图像分类预测结果 表格A-测试集图像路径及标注 表格B-测试集每张图像的图像分类预测结果,以及各类别置信度 可视化测试集中被误判的图像 测试集总 ...

  7. 一个算法工程师的日常是怎样的?

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来自 | 知乎 链接 | https://www.zhihu.com/question/2969281 ...

  8. 评估一个外链价值的18个因素

    搜索引擎算法不断的在调整,对于如今的SEOER而言,决定一个页面排名的因素已不再单一,搜索引擎所考量的指标越来越多元化.现如今外链的价值虽已无法相比过去,但是依然是影响排名的重要因素之一,因此现在我们 ...

  9. 算法效果AB测试中的PV-UV不对称性

    算法效果的AB测试,是指在相同的应用场景下,对比不同算法的效果.通常的做法是,按照PV或UV随机分配流量到算法上,计算算法的CTR或转化率进行对比.为了表述简单,我们假设参与对比的算法有两个,比较的指 ...

  10. 数组分成两组差值最小 python_数组中的数分为两组,让给出一个算法,使得两个组的和的差的绝对值最小,数组中的数的取值范围是0x100,元素个数也是大于0, 小于100 。...

    比如a[]={2,4,5,6,7},得出的两组数{2,4,6}和{5,7},abs(sum(a1)-sum(a2))=0: 比如{2,5,6,10},abs(sum(2,10)-sum(5,6))=1 ...

最新文章

  1. 持续集成之“依赖管理”
  2. WIn10+Anaconda 环境下安装 PyTorch 避坑指南
  3. 台式机电脑配置单_2020年电脑配置单重点硬件参考
  4. mysql添加联合主键
  5. python 列表输入sql_将Python列表传递到SQL查询
  6. 如何实现文件下载进度条呢?
  7. cacti支持中文办法
  8. 【ACL 2021】基于一致性正则的跨语言微调方法
  9. 用友U8 13.0运维及操作手册全版
  10. Arduino蓝牙无线自动下载程序
  11. 法兰克机械手手动操作_学习FANUC机器人编程设定,必懂这2个技巧!
  12. linux 不识别 svg,manjaro/archlinux用yaourt -Syu滚动升级后大量图标主题不能用svg图标不能识别...
  13. Android O新增的关于usb的三个属性 sys.usb.configfs,sys.usb.ffs.ready,sys.usb.ffs.mtp.ready
  14. Layaverse掌舵人谢成鸿在上海静安国际设计节的主题分享
  15. word中套用表格样式在哪里_在Word中,关于“套用表格样式”的用法,下列说法正确的是()...
  16. 从规模走向规模经济,锅圈食汇回归餐饮初心
  17. python可视化图表分析---pyecharts库的使用
  18. TCP滑动窗口协议与流量控制
  19. 怎么在excel中导入ChemDraw结构图
  20. python二级考试题详解

热门文章

  1. python if条件判断语句
  2. Delphi GDI对象之绘制文本
  3. Android 和iOS 比较
  4. 移植u-boot.2012.04.01
  5. luogu P2678 跳石头 二分answer
  6. Mark:SQL Server关于CAST和CONVERT的区别和用法
  7. ae 地理坐标与投影坐标转换 [转]
  8. 59. Spiral Matrix Spiral Matrix II
  9. 福州大学 Problem 2169 shadow
  10. 返回List的分页方法