机器学习24:《数据准备和特征工程-II》收集数据

news2024/11/27 16:29:09

构建数据集常用的步骤如下所示: 

  1. 收集原始数据。
  2. 识别特征和标签来源。
  3. 选择抽样策略。
  4. 拆分数据。

这些步骤在很大程度上取决于你如何构建 ML 问题。本文主要介绍——数据收集-Collecting Data。

目录

1. 数据集的大小和质量

1.1 数据集的大小

1.2 数据集的质量

1.3 特征表示-Feature Representation

1.4 训练与预测

2.连接数据日志

2.1 日志类型

2.2 加入日志源

2.3 预测数据源 - 在线与离线

3.识别标签和来源

3.1直接 vs 派生标签

3.2 标签来源

3.2.1 事件的直接标签

3.2.2 属性的直接标签

3.3 注意事项

3.3.1 直接标签需要过去行为的日志

3.3.2. 如果没有要记录的数据怎么办?

3.3.3 为什么要使用人工标记数据?

3.3.4 提高质量

4.参考文献


1. 数据集的大小和质量

“垃圾进垃圾出”

这句话非常适用于机器学习。毕竟,模型的好坏取决于数据。但是如何衡量数据集的质量并改进它呢?我们需要多少数据才能获得有用的结果?答案取决于我们要解决的问题的类型。

1.1 数据集的大小

根据粗略的经验法则,模型应该在比可训练参数多至少一个数量级的示例上进行训练。大数据集上的简单模型通常会击败小数据集上的奇特模型。谷歌在大数据集上训练简单线性回归模型取得了巨大成功。那么,什么算作“大量”数据?这取决于项目。考虑这些数据集的相对大小——如下表所示的项目:数据集有多种大小。

数据集大小(示例数量)
鸢尾花数据集150
MovieLens(20M数据集)20,000,263
谷歌 Gmail 智能回复238,000,000
谷歌图书 Ngram468,000,000,000
谷歌翻译数万亿

1.2 数据集的质量

如果数据不好,那么再多的数据也是没有用的;质量也很重要。但什么才算“质量”呢?这是一个模糊的术语。考虑采用实证方法并选择产生最佳结果的选项。有了这种心态,高质量的数据集就可以让我们成功解决所关心的业务问题。换句话说,如果数据完成了预期的任务,那么它就是好的。

然而,在收集数据时,对质量有一个更具体的定义是有帮助的。质量的某些方面往往对应于性能更好的模型:

  • 可靠性
  • 特征表示
  • 最小化偏差

1.2.1 可靠性

可靠性是指我们可以信任数据的程度。在可靠数据集上训练的模型比在不可靠数据上训练的模型更有可能产生有用的预测。在测量可靠性时,必须确定:

  • 标签错误有多常见?例如,如果数据是由人类标记的,有时人类会犯错误。
  • 特征有噪音吗?例如,GPS 测量值会波动。有些噪音是可以的。你永远无法清除数据集中的所有噪音。
  • 数据是否针对问题进行了正确过滤?例如,数据集是否应该包含来自机器人的搜索查询?如果我们正在构建垃圾邮件检测系统,那么答案可能是肯定的,但如果你正在尝试改善人类的搜索结果,那么答案可能是否定的。

是什么导致数据不可靠?回顾一下 《机器学习工程落地注意事项-II(公平-Fairness)》 一文的内容:可知,以下一个或多个原因是不可靠的来源:

  • 省略的值。例如,某人忘记输入房屋的年龄值。
  • 重复的例子。例如,服务器错误地将相同的日志上传了两次。
  • 不好的标签。例如,有人将橡树的图片错误地标记为枫树。
  • 不良特征值。例如,有人输入了额外的数字,或者温度计被留在阳光下。

谷歌翻译注重可靠性,以选择其数据的“最佳子集”;也就是说,某些数据具有比其他部分更高的质量标签。

1.3 特征表示-Feature Representation

回想一下《机器学习7:特征工程》一文,表示(Representation)——是指将数据映射到有用的特征。需要考虑以下问题:

  • 数据如何向模型显示?
  • 需要 标准化 数值吗?
  • 如何处理 异常值?

本文的“转换数据” 部分将重点关注特征表示。

1.4 训练与预测

如果离线获得了很好的结果,但在线实验中,这些结果却变差了。可能的原因是什么?

问题表明存在训练/服务偏差,即在训练时与服务时为指标计算出不同的结果。偏差的原因可能很微妙,但会对结果产生致命的影响。在实践中,我们必须谨慎选择模型使用的数据,在训练期间,仅使用在服务中可用的特征,并确保训练集能够代表真实服务流量。

黄金法则:像预测一样对待训练。也就是说,训练任务与预测任务越匹配,机器学习系统的性能就越好。



2.连接数据日志

组装训练集时,有时必须连接多个数据源。

2.1 日志类型

可以使用以下任何类型的输入数据:

  • 事务日志
  • 属性数据
  • 汇总统计

事务日志——记录特定事件。例如,事务日志可能会记录进行查询的 IP 地址以及进行查询的日期和时间。事务事件对应于特定事件。

属性数据——包含信息快照。例如:用户人口统计、查询时的搜索历史记录。

属性数据并不特定于某个事件或某个时刻,但仍然可用于进行预测。对于与特定事件无关的预测任务(例如,预测用户流失,涉及一系列时间而不是单个时刻),属性数据可能是唯一的数据类型。

属性数据和事务日志是相关的。例如,可以通过聚合多个事务日志、创建聚合统计信息来创建一种属性数据。在这种情况下,可以查看许多事务日志来为用户创建单个属性。

汇总统计数据——从多个事务日志创建属性。例如:用户查询频率、特定广告的平均点击率。

2.2 加入日志源

每种类型的日志往往位于不同的位置。为机器学习模型收集数据时,我们必须将不同的源连接在一起以创建数据集。一些例子:

  • 利用事务日志中的用户 ID 和时间戳来查找事件发生时的用户属性。
  • 使用事务时间戳来选择查询时的搜索历史记录。

查找属性数据时使用事件时间戳至关重要。如果获取到最新的用户属性,训练数据将包含数据收集时的值,这会导致训练/服务偏差。如果你忘记对搜索历史记录执行此操作,则可能会将真实结果泄漏到训练数据中!

2.3 预测数据源 - 在线与离线

在 《机器学习21:机器学习工程落地注意事项-I》中 ,笔者介绍了在线服务与离线服务。两种不同的服务形式下,系统收集数据的方式也不一样,如下所示:

  • 在线——延迟是一个问题,因此系统必须快速生成输入。
  • 离线——可能没有计算限制,因此可以执行与训练数据生成类似的复杂操作。

例如,属性数据经常需要从其他系统查找,这可能会带来延迟问题。同样,动态计算聚合统计数据的成本可能很高。如果延迟是一个阻碍因素,一种可能性是预先计算这些统计数据。


3.识别标签和来源

3.1直接 vs 派生标签

当标签定义明确时,机器学习会更容易。最好的标签是你想要预测的内容的直接标签。例如,如果你想预测用户是否是周杰伦的粉丝,则直接标签就是“用户是周杰伦的粉丝”。

一个更简单的粉丝度测试——用户是否在 QQ 音乐上听过周杰伦的歌曲。标签“用户在 QQ 音乐上收听了周杰伦的歌曲”是一个派生标签,因为它不直接衡量要预测的内容。这个派生标签是用户喜欢周杰伦的可靠指标吗?应该是,但无论如何,需要明确的是——模型只能与派生标签和所需预测之间的连接一样好,换言之,派生标签与预测之间的关联越紧密,预测效果就越好。

3.2 标签来源

模型的输出可以是事件或属性。这会产生以下两种类型的标签:

  • 事件的直接标签,例如“用户是否单击了顶部搜索结果?”
  • 属性的直接标签,例如“广告商下周的支出是否会超过 X 美元?”

3.2.1 事件的直接标签

对于事件,直接标签通常很简单,因为你可以记录事件期间的用户行为以用作标签。当标记事件时,问自己以下问题:

  • 日志是如何构造的?
  • 日志中什么被视为“事件”?

例如,系统是否记录用户点击搜索结果或用户何时进行搜索?如果你有点击日志,请注意,如果没有点击,你将永远不会看到展示(本质是确认日志的有效性)。你需要其中事件为展示次数的日志,以便涵盖用户看到热门搜索结果的所有情况。

3.2.2 属性的直接标签

假设标签是:“广告客户下周将花费超过 X 美元。” 通常,我们会使用前几天的数据来预测接下来几天会发生什么。例如,下图显示:使用 10 天训练数据训练模型,而后对随后 7 天进行预测。

在实践中,需要考虑季节性或周期性影响;例如,广告商可能会在周末花费更多,因此可能更愿意使用 14 天的窗口;或者使用日期作为特征以便模型可以学习每年的影响。

3.3 注意事项

3.3.1 直接标签需要过去行为的日志

在前面的情况下,请注意我们需要有关真实结果的数据。无论是广告商花费了多少,还是哪些用户收听了周杰伦的音乐,我们都需要历史数据来使用监督机器学习。机器学习根据过去发生的事情进行预测,因此,如果没有过去的日志,则需要获取它们。

3.3.2. 如果没有要记录的数据怎么办?

也许你的产品尚不存在,因此你没有任何可记录的数据——俗称 “冷启动”。在这种情况下,你可以采取以下一项或多项操作:

  • 首次启动时使用启发式方法,然后根据记录的数据训练系统。
  • 使用类似问题的日志来引导您的系统。
  • 使用人工评分者通过完成任务来生成数据。

3.3.3 为什么要使用人工标记数据?

使用人工标记数据有优点也有缺点。

优点

  • 估者可以执行广泛的任务。
  • 数据可以清晰地定义问题。

缺点

  • 对于某些领域来说,数据是昂贵的。
  • 好的数据通常需要多次迭代。

3.3.4 提高质量

经常检查人工评估者的工作。例如,你自己标记 1000 个示例,然后查看你标记的结果与评分者的结果是否匹配。(自己标记数据也是了解数据的一个很好的练习。)如果出现差异,避免盲目预判你的评级是正确的,尤其是在涉及价值判断的情况下。如果人工评分者引入了错误,需要考虑添加说明来帮助他们,然后重新标注。

无论你如何获取数据,手动查看数据都是一个很好的练习。

4.参考文献

链接-https://developers.google.cn/machine-learning/data-prep/construct/collect/data-size-quality

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/720106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

.NET Core webapi 从零开始在IIS上面发布后端接口

文章目录 原因环境配置windows环境.NET Core安装开发端安装服务端安装 新建ASP.NET项目 原因 .NET core是以后.NET未来的趋势,虽然我感觉Java在web后端的主导地位10年内不会动摇,因为Java占据了先发优势。 不过C#的特点就是,简单&#xff0…

mysql三大日志之我对Binlog的理解

mysql 我们先来看一下MySQL的基本架构,从大的方面来讲,一个server层,一个引擎层。server层就像一个接口,可以对接任何符合规定的引擎。具体的细节可以参考我之前写过的文章mysql的这些坑你踩过吗?快来看看怎么优化mys…

Blazor 自定义可重用基础组件之 带标头排序的Table

实现点击标头按所在列值进行排序,是一个非常有用的功能,其他的UI一般搞得非常复杂,添加标志图标什么的,使得本就不宽裕的表格更加拥挤。我的思路是,点击所在列的标头部位,传递标头值,然后根据标…

裸机搭建k8s报错记录

安装教程参考 修复一、 cd /etc/kubernetes/manifests vim kube-scheduler.yaml注释掉 重启 systemctl restart kubelet.service问题二、 https://github.com/kubernetes/kubernetes/issues/70202 一直处于创建中状态 网络原因 cat << EOF > /run/flannel/subnet.…

golang 结构体struct转map实践

1、反射 type sign struct { Name string json:"name,omitempty" Age int json:"age,omitempty" } var s sign s.Name "csdn" s.Age 18 //方式1 反射 var data make(map[string]interface{}) t : reflect.TypeOf(s) v : …

第五步:STM32F4端口复用

什么是端口复用&#xff1f; STM32有很多的内置外设&#xff0c;这些外设的外部引脚都是与GPIO复用的。也就是说&#xff0c;一个GPIO如果可以复用为内置外设的功能引脚&#xff0c;那么当这个GPIO作为内置外设使用的时候&#xff0c;就叫做复用。 例如串口 1 的发送接收引脚…

【C++11】移动语义,完美转发

1.移动语义 1.为什么要有移动语义&#xff1f; C中有拷贝构造函数和拷贝复制运算符&#xff0c;但是这需要占用一定的空间 class MyClass { public:MyClass(const std::string& s): str{ s }{};MyClass(const MyClass& m){strm.str;}private:std::string str; };int …

NSS [NSSRound#7 Team]ec_RCE

NSS [NSSRound#7 Team]ec_RCE 源码如下&#xff1a; <?PHPif(!isset($_POST["action"]) && !isset($_POST["data"]))show_source(__FILE__);putenv(LANGzh_TW.utf8); $action $_POST["action"];$data "".$_POST["…

代理IP,如何助力大数据时代

代理IP&#xff0c;如何为大数据助力 华科云商助力大数据 近年来&#xff0c;我国互联网商业保持持续发展的状态。大环境的优化&#xff0c;各项相关政策的出台&#xff0c;也为互联网经济的发展&#xff0c;提供了强有力的支持。大大小小的企业都想乘风起势&#xff0c;大展宏…

Django核心

安装django pip install django # pip install django3.1.6创建django项目 在一个项目中可以包含多个应用程序。 django-admin startapp app_name #创建一个应用程序 django-admin startproject project_name #创建一个项目运行django项目 python manage.py runserver 80…

REST风格讲解

1.REST风格简介 优点&#xff1a;隐藏资源访问的行为&#xff0c;无法通过地址得知对资源的操作&#xff0c;并且简化了书写 rest风格大概将请求方式分成了Get Post Put Delete四种操作方法。上述行为是约定的方式并不是规范。 RequestMapping注解里面value值存储访问的路…

Docker 中的 .NET 异常了怎么抓 Dump (转载)

一、背景 1. 讲故事 有很多朋友跟我说&#xff0c;在 Windows 上看过你文章知道了怎么抓 Crash, CPU爆高&#xff0c;内存暴涨 等各种Dump&#xff0c;为什么你没有写在 Docker 中如何抓的相关文章呢&#xff1f;瞧不上吗&#xff1f; 哈哈&#xff0c;在DUMP的分析旅程中&a…

【前端学JAVA】基础语法

作为一个前端程序员&#xff0c;其发展前途是远不及后端程序员的。因此&#xff0c;只有了解后端&#xff0c;才能让自己更加具备核心竞争力。本系列教程将以一个前端程序员的角度快速学习JAVA。 新建项目 开发JAVA程序&#xff0c;我们第一步是使用IDEA新建一个项目&#xf…

紫光展锐携手中国联通共建数字世界

6月28日&#xff0c;2023上海世界移动大会&#xff08;MWC上海&#xff09;首日&#xff0c;联通华盛总经理李立新、联通华盛副总经理陈丰伟一行莅临紫光展锐展台参观&#xff0c;紫光集团高级副总裁、紫光展锐CEO任奇伟博士&#xff0c;紫光展锐执行副总裁、工业电子事业部总经…

如何提高OAK相机在树莓派和JETSON上的运行帧率?

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手君。 最…

Lim接口测试平台-接口测试功能详解

一、接口测试 项目地址&#xff1a;Gitee/Github 接口测试模块是整个Lim平台的核心&#xff0c;左侧是接口的模块树&#xff0c;右侧顶部是用例操作功能区&#xff0c;列表展示接口用例信息&#xff1a; 文章目录 一、接口测试 二、维护接口用例 各步骤类型详解 1&#x…

picard的安装

最近在通过GATK所介绍的best practice流程来call SNP流程 1.流程 1.1 BWA比对&#xff0c;获得sam文件 1.2 准备用picard来压缩排序sam文件为bam文件&#xff0c;并对bam文件进行去重复&#xff08;duplicates marking&#xff09; 这是就需要用到picard软件 按照教程网页上…

Mac使用Puppeteer,并启动chromium

Mac使用Puppeteer&#xff0c;并启动chromium Puppeteer官网 chromium下载地址 通过chrome://version 可查询 Chromium 浏览器信息 const puppeteer require(puppeteer);(async () > {const browser await puppeteer.launch({executablePath: 上图可执行文件路径,headl…

爬取12306上所有城市的站台信息

0. 需求 爬取所有城市下的站台信息保存到Excel中: 效果: 1. 定位数据源 在12306随便一个车票查询页面上,通过F12控制台获取网站请求车站数据的URL 博主当前获取的URL为: https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version1.9270*注意…

服务器数据恢复-raid10重建为raid6的数据恢复案例

服务器故障&#xff1a; 一台IBM V7000存储中的vdisk丢失&#xff0c;Solaris操作系统中的部署的Oracle数据库不可用。经过和工作人员的沟通得知故障原因&#xff1a;工作人员进行重建MDisk的操作&#xff0c;将原先的raid10重建为raid6&#xff0c;然后又再次重建为raid10&…