在实践中,采样是非常重要的,本质上它是利用少量的样本来近似总体的分布,从特定的分布中抽取相应样本的过程。

同时,不仅是推荐、搜索、广告实际中需要,任何机器学习模型,这都是一个不得不去重视的知识点。

高斯分布(正态分布)的采样方法有逆变换法、拒绝采样法等。

  • 构造马尔科夫链,使其分布即为带采样目标的分布。其中构造马尔科夫链是该采样法的核心,根据构造方法的不同,对应不同的采样方法;
  • 从任一初始状态,沿着马尔科夫链进行状态转移;
  • 得到收敛于目标分布的状态转移序列的一系列样本;

根据有向图的顺序,对节点进行采样,包括最简单的祖先采样、参考重要性的似然加权采样和采用Metropolis Hastings方法的采样等。

1.1 数据收集机制理解

关于我们的数据收集形式对我们进行后续数据的使用和预处理起到非常关键的作用,我承认这块我做得不是很好,导致在实验的过程中无脑的把数据直接丢入模型,看上去模型的效果变差了,带来了非常多错误的结论。从而使得后期又不得不重复进行实验。

:公司的数据一般非常大,做大模型的话,在机器资源不够的情况下,跑一轮得到的结果是极其浪费时间的,关于这块,个人最大的建议就是在直接将数据丢到模型之前,至少检查以下几点东西。

  • 重复数据观测:查看相同的id是否存在较为严重的重复,即出现了较多的重复数据,这些重复的数据会使得模型训练变差,从而带来幻觉,这些数据是没有意义的,但其实把重复的数据删去之后可能结论就完全相反了;
  • 收集的数据丢失率检测:好的meta数据是建模有效的前提之一,如果数据收集的策略有问题,最差的情况是数据收集出错了,那就没必要建模了;不过最常见的讨论的问题还是丢失率的问题,就是理想情况下可以收集到100条数据,实际只能收集到60条,这种情况的话也没什么好说的,最简单的就是询问工程端能否提升数据的收集率,这是最简单的,数据多了准了,模型自然也会有提升的;
  • 标签是如何来的:在电商中,用户点击完商品并不会立即就购买,所以购买的信息要和前面用户的用户点击记录相关联,这种关联机制也很重要,了解这些对数据预处理能带来非常大的参考。
  • 其它的很多很多坑。

1.2 数据字段理解

这边不想吐槽太多,目测很多公司很多业务都是类似的,尤其是当业务发展多年的情况下,会遗留下一大堆数据表,这些表有非常多的字段,但是表的负责人已经离职了,很多数据字段也都没有写备注,但是这张表又和后面的很多关键表相关联,这是非常头疼的事情。

为什么说字段的理解非常重要呢?举个例子来说,商品ID(ItemID),比如iphone12的ID,

  • 情况1:在不同的国家,iphone12都是使用同一个ItemID来表示的;
  • 情况2:在不同的国家,iphone12都是使用不同的ItemID来表示的;

这样两种不同的数据字段携带的信息量是完全不一样的,

  • 对于情况1,iphone12是只能反映在全局情况下的情况;
  • 但是对于情况2,iphone12却反映的是在国家细粒度下的情况;

我们知道,不同国家的iphone12的销量可能是完全不一样的,在贫穷的国家可能销量就低;在富有的国家则销量很高,所以说数据字段的理解是至关重要的,相同的字段在不同设计情况下统计的特征可能完全是两码事。

数据清洗:我们的数据中,存在非常多的脏数据,这些数据的处理可以帮助我们更好地提效,使得模型训练得到的结果更为良性;这一块没有做太多的工作,可能反欺诈等团队做的工作会多一些,典型的就是:

  • 刷单的数据;
  • 刷好评的数据等等;
  • 爬虫的信息过滤等;
  • 其它;

对这些数据的清洗可以更为真实的反映用户的习惯。

数据采样:因为大模型这块数据量非常大,很多时候数据经过各种merge操作之后,都可以达到上PB级别,所以模型的训练经常需要有合理的采样策略;而目前最为常见的采样策略是基于随机的,基于启发式的(也就是大家经常会使用的基于规则的),也有一些基于最新的一些论文的方式:

3.1 负样本随机采样

这个基本所有的公司和数据竞赛中在样本规模达到一定比例的时候都会有碰到,将全部的负样本全部丢入到模型中进行训练,会浪费非常多的资源,而且常常因为类别不平衡等原因经常获得的效果往往还不如经过随机采样来的效果好。在我们的实验中,我们发现:

  • 负样本的采样比例影响还是较大的,随机采样10%的负样本和随机采样20%的负样本得到的效果可能会相差一个点,而且较为稳定;
  • 如果有特征工程的融入,在做负样本采样的时候我们需要先做特征,然后再对负样本进行随机采样,否则效果会很差;

注意,这边仅仅是对负样本进行随机采样,正样本的量非常少,一般都是全部保留的。

3.2 基于某些规则的启发式采样

在电商等应用中,很多用户对于position位置可能比较敏感,而这些position也具有非常大的参考价值,很多用户可能就只浏览了前面部分的商品,后面的曝光商品根本就没有看,尤其是末尾的商品,但是这些信息我们又没法捕捉,这块很多时候需要和工程讨论数据埋点的问题;而我们经常会使用下面的策略去进行尝试,几个典型的例子:

  • 基于曝光位置的规则:在曝光页面,用户只点击了搜索之后的第二个曝光商品,对于后面的商品基本都是没有处理的;这些商品用户有没有细细浏览都得打个问号?所以在很多的博客中,有些公司会尝试将曝光位置大于最后一个点击商品的位置的商品去掉,在采样的过程中不再使用这些商品,而我们在实验过程中发现模型效果略有损失;后来我们将曝光位置大于最后一个点击商品的位置+某个阈值的商品去掉,在实验中可以看到细微的效果提升;
  • 基于浏览/滑动时长的规则:用户在浏览的过程中,由于疲劳或者不感兴趣或者其它原因在某些页面会快速滑动浏览页,我们就可以基于端上收集的用户的滑动停留时长等信息对负样本进行过滤,认为这些样本用户是没有仔细观察的;
  • 误点击样本过滤:上面的两种贪心式规则都是基于负样本进行采样的,当然在大家所熟知的问题中还存在一些噪音正样本,例如误点击的样本,这些样本普遍是较难判断的,而对于模型训练带来的影响也较难判断。一般我们可以通过删除那些点击进入之后直接就跳出的用户(即在详情页停留时间极短的样本的数据),而实践中,我们发现对这些样本进行过滤,效果并没有太大的变化,可能不同的场景会有些许差别。

上面的这三种策略基本都是可以尝试的,但是别指望可以带来巨大的提升,不过微弱的提升还是可以期待一下的。除此之外,我看到还有非常多其它值得尝试的,此处仅列举在下方,并没有什么具体的结论。(下面这两个来源于引文[31])

  • 基于用户的活跃度分布采样,用户的活跃度一般都是一个长尾分布,越活跃的用户对应的人数越少,但是其所占的行为越多。这种情况下,如果不考虑用户活跃度去筛选正负样本,难免活跃用户所占的权重就会增大,此时有效的解决办法是针对每个用户提取相同的正负样本。
  • 针对同一个内容在不同时间对同一个用户曝光多次的情况,这时候训练集中可能会出现同一用户对同一内容点击与不点击并存的情况,如果多次曝光的间隔非常短,考虑只使用其中的一次曝光数据。
  • 其它....

3.3 基于最新技术的方案

好像也有听说最新的论文有使用一些最新的技术,来自动选择好的负样本,这块没有继续研究下去了。

炼丹知识点 往期回顾

炼丹知识点:模型评估里的陷阱

炼丹知识点:那些决定模型上限的操作

模型的燃料,数据采样的秘密相关推荐

  1. 基于深度学习的脑电图识别 综述篇(二)数据采样及处理

    作者|Memory逆光 本文由作者授权分享 导读 脑电图(EEG)是一个复杂的信号,一个医生可能需要几年的训练并利用先进的信号处理和特征提取方法,才能正确解释其含义.而如今机器学习和深度学习的发展,大 ...

  2. 水环境模型与大数据技术融合研究

    点击上方蓝字关注我们 水环境模型与大数据技术融合研究 马金锋1, 饶凯锋1, 李若男1,2, 张京1, 郑华1,2 1 中国科学院生态环境研究中心城市与区域生态国家重点实验室,北京 100085 2  ...

  3. 持续学习常用6种方法总结:使ML模型适应新数据的同时保持旧数据的性能

    来源:Deep IMBA 本文约4800字,建议阅读9分钟 本文将讨论6种方法,使模型可以在保持旧的性能的同时适应新数据,并避免需要在整个数据集(旧+新)上进行重新训练. 持续学习是指在不忘记从前面的 ...

  4. 不平衡数据采样_过度采样不平衡数据的5种打击技术

    不平衡数据采样 Imbalance data is a case where the classification dataset class has a skewed proportion. For ...

  5. 需求工程:第五章 确定项目的前景和范围-目标分析第六章 涉众分析与硬数据采样

    第五章 确定项目的前景和范围-目标分析 目标分析 为什么需要目标?业务需求不够严谨,无法形成方法学支持(建模) 目标: 是系统被开发的目的,有着明确的定义方式,名称.类型.关注.定义(正式,非正式). ...

  6. R语言构建文本分类模型:文本数据预处理、构建词袋模型(bag of words)、构建xgboost文本分类模型、基于自定义函数构建xgboost文本分类模型

    R语言构建文本分类模型:文本数据预处理.构建词袋模型(bag of words).构建xgboost文本分类模型.基于自定义函数构建xgboost文本分类模型 目录

  7. R语言构建文本分类模型:文本数据预处理、构建词袋模型(bag of words)、构建xgboost文本分类模型、xgboost模型预测推理并使用混淆矩阵评估模型、可视化模型预测的概率分布

    R语言构建文本分类模型:文本数据预处理.构建词袋模型(bag of words).构建xgboost文本分类模型.xgboost模型预测推理并使用混淆矩阵评估模型.可视化模型预测的概率分布 目录

  8. R语言dplyr包sample_n函数、sample_frac函数数据采样实战

    R语言dplyr包sample_n函数.sample_frac函数数据采样实战 目录 R语言dplyr包sample_n函数.sample_frac函数数据采样实战 #导入dplyr包

  9. 如何判断你的数据集是否适合使用深度学习模型?如果数据量太小有什么解决办法?

    如何判断你的数据集是否适合使用深度学习模型?如果数据量太小有什么解决办法? deep learning is a data hungry problem 数据集太小,数据样本不足时,深度学习相对其它机 ...

最新文章

  1. 【机器视觉案例】(13) 脸部和摄像机间的距离测量,自适应文本大小,附python完整代码
  2. R语言效用分析 ( 效能分析、Power analysis)确定样本量、假设检验与两类错误、pwr包进行效用分析 ( 效能分析、Power analysis)的常用函数列表
  3. 独家 | 提速20倍!3个细节优化Tableau工作簿加载过程(附实例)
  4. 深度学习网络图的绘制
  5. 文曲星猜数游戏,无测试代码
  6. 马斯克用二手火箭送宇航员上天,还成功避撞碎片!接下来载普通人,建月球基地...
  7. 【LeetCode OJ 136】Single Number
  8. 民生银行马坡数据中心基础设施Uptime Mamp;O运营管理体系建立与实施
  9. 【python数据挖掘课程】二十一.朴素贝叶斯分类器详解及中文文本舆情分析
  10. jQuery 学习笔记(三)——事件与应用
  11. python获取类的类属性_在python中获取类和实例的属性
  12. mysql 树形结构_结合RBAC模型讲解权限管理系统需求及表结构创建
  13. 【Git/Github学习笔记】Git常用命令(代码冲突)
  14. android快速充电实现_Android 8.0 慢充和快充提示语的实现原理
  15. 华大MCU在IAR下的调试环境搭建及相关补丁包(百度网盘链接)
  16. ntoskrnl.exe文件丢失或损坏的问题解决方法
  17. html弹出div弹窗
  18. 【贪心策略】区间选点问题
  19. linux.x64_11gR2_database.zip下载
  20. 大数据分析案例-基于KNN算法对茅台股票进行预测

热门文章

  1. Node,Document,HTMLDocument,HTMLCollection解析
  2. 第二次作业:王者荣耀软件分析
  3. codeforces 767C - Garland
  4. sql 2012中获取表的信息,包含字段的描述
  5. UploadHandleServlet
  6. 和quot;分别是什么?
  7. C#中的接口 (转自吕振宇老师的blog)
  8. New beginning
  9. c语言用double最大,C语言里double类型的最大值和最小值是多少?
  10. 如何有效完成医学科研课题设计?