机器学习25:《数据准备和特征工程-III》采样和分隔

目录

1.采样和分割数据

1.1 抽样简介

1.2 过滤 PII(个人身份信息)

2.数据不平衡

2.1 下采样和增加权重

3.数据分割示例

3.1 随机分割可能不是最好的方法

4.分割数据

5.随机化

5.1 实际考虑

5.2 散列的注意事项

6.参考文献


1.采样和分割数据-Sampling and Splitting Data

1.1 采样简介

为机器学习项目收集足够的数据通常很困难。然而,有时数据太多,我们必须选择示例子集进行训练。那么,如何选择子集?以 Google 搜索为例,以什么粒度对大量数据进行采样?你会使用随机查询吗?随机会话?随机用户?

最终,答案取决于问题:我们想要预测什么,我们想要什么特征?

  • 要使用上一个查询的特征,需要在会话级别进行采样,因为会话包含一系列查询。
  • 要使用前几天的用户行为特征,则需要在用户级别进行采样。

1.2 过滤 PII(个人身份信息)

如果数据包含 PII(个人身份信息),可能需要将其从数据中过滤掉。例如,策略可能要求你删除不常见的特征。 这种过滤通常会改变数据分布,丢失尾部的信息(分布中值非常低的部分,远离平均值)。

这种过滤很有用,因为非常罕见的特征很难学习。但重要的是要认识到你的数据集将偏向头部查询。在服务时,你可以预期从尾部提供示例会做得更糟,因为这些示例是从训练数据中过滤掉的。尽管这种偏差无法避免,但在分析过程中请注意这一点。


2.数据不平衡-Imbalanced Data

构成数据集大部分的类称为 多数类。所占比例较小的是 少数群体。那么,什么算不平衡?答案可能从温和到极端,如下表所示。

不平衡程度少数群体比例
温和的数据集的 20-40%
缓和数据集的 1-20%
极端<数据集的1%

为什么要注意不平衡的数据?如果你的分类任务包含不平衡的数据集,则可能需要应用特定的采样技术。举个例子,一个检测欺诈的模型,相关数据集如下图所示:数据集中每 200 笔交易就会发生一次欺诈实例,因此在真实分布中,大约 0.5% 的数据是正的。

由于相对于负面例子来说,正面例子很少,因此训练模型将把大部分时间花在负面例子上,而不能从正面例子中学到足够的东西。例如,如果你的批次大小为 128,则许多批次将没有正例,因此梯度的信息量会较少。

在实践中,如果数据集不平衡,需要首先尝试对真实分布进行训练。如果模型运行良好并且具有概括性,那么自然是最好的结果!反之,则需尝试以下下采样和上加权技术。

2.1 下采样和增加权重

处理不平衡数据的有效方法是对多数类进行下采样和增加权重。让我们首先定义这两个新术语:

  • 下采样:意味着对大多数类示例中不成比例的低子集进行训练。
  • 增加权重:意味着向下采样的类添加一个示例权重,该权重等于下采样的因子。

步骤 1:对多数类别进行下采样。还是以上面介绍的欺诈数据集为例,其中 1 个正例到 200 个负例。下采样 10 倍可将平衡性提高到 1 个正例到 20 个负例 (5%)。虽然得到的训练集仍然是不平衡的,但正例与负例的比例比原来极度不平衡的 比例(0.5%)要好得多。

步骤 2:增加下采样类的权重:将示例权重添加到下采样类。由于我们按 10 倍下采样,因此示例权重应为 10。

在之前的文章中,权重一词指代模型参数(例如神经网络中的连接)。在这里,我们讨论的是 示例权重,这意味着在训练过程中更重要的是计算单个示例。示例权重为 10 意味着模型将该示例视为权重为 1 的示例的 10 倍(计算损失时)。

权重应等于您用于下采样的因子:

\text{ \{example weight\} = \{original example weight\} x \{downsampling factor\} }


3.数据分割示例

收集数据并根据需要进行采样后,下一步是将数据分为 训练集、 验证集和测试集。

3.1 随机分割可能不是最好的方法

虽然随机分割是解决许多机器学习问题的最佳方法,但它并不总是正确的解决方案。例如,考虑其中示例自然聚集成相似示例的数据集。如图 1 所示,假设用模型对新闻的主题进行分类,采用随机分割就可能会出现问题。

图 1. 新闻报道是聚集的

原因在于新闻故事一般是成群出现的:关于同一主题的多个故事在同一时间发布。因此,如果我们随机分割数据,测试集和训练集可能会包含相同的故事。实际上,这种方式是行不通的,因为所有故事都会同时进入,所以像这样进行分割会导致倾斜。

图 2. 随机拆分会将集群拆分为多个集合,从而导致倾斜

解决这个问题的一个简单方法是根据故事发布的时间(也许是故事发布的日期)来分割我们的数据。这会导致同一天的故事被放置在同一个分组中。

图 3. 按时间分割可以使集群大部分最终位于同一组中

对于数以万计或更多的新闻报道,一定比例的新闻报道可能会在几天内分配。不过问题不大,事实上,这些故事分布在两天的新闻周期中,或者,我们可以丢弃距离截止点一定范围内的数据,以确保没有任何重叠。例如,可以训练四月份的故事,然后使用五月的第二周作为测试集,周间隙防止重叠。


4.分割数据-Splitting Data

正如上面的 “新闻报道主题分类” 所示,纯粹的随机分割并不总是正确的方法。在线系统的一种常见技术是按时间分割数据,这样就可以:

  • 收集 30 天的数据。
  • 使用第 1-29 天的数据进行训练。
  • 评估第 30 天的数据。

对于在线系统,训练数据比服务数据更旧,因此该技术可确保验证集反映训练和服务之间的滞后。然而,基于时间的分割最适合非常大的数据集,例如具有数千万个示例的数据集。在数据较少的项目中,训练、验证和测试之间的分布最终会有很大不同。

想要为数据设计一种合适的分隔方式,首先需要明确数据代表什么(数据的内涵),只有充分了解数据,才能设计出合适的分隔策略。


5.随机化-Randomization

5.1 实际考虑

假设想要添加一个特征来查看它如何影响模型质量。为了公平的实验,除了这个新特征之外,数据集应该是相同的。如果数据不可重现,则无法制作这些数据集。鉴于此,确保数据生成中的任何随机化都可以是确定性的:

  • 为随机数生成器(RNG) 播种。播种可确保 RNG 在每次运行时以相同的顺序输出相同的值,从而重新创建数据集。
  • 使用不变的哈希键。 散列是分割或采样数据的常用方法。我们可以对每个示例进行散列,并使用生成的整数来决定将示例放置在哪个分割中。每次运行数据生成程序时,哈希函数的输入不应更改。例如,如果想按需重新创建哈希值,请勿在哈希值中使用当前时间或随机数。

5.2 散列的注意事项

想象一下,你正在收集搜索查询并使用散列来包含或排除查询。如果哈希键仅使用查询,则在多天的数据中,将始终包含该查询或始终排除它,而总是包含或总是排除查询是不好的,因为:

  • 训练集将看到一组不太多样化的查询。
  • 评估集与训练集没有重叠。

针对上述问题,可以对查询+日期进行散列,如此一来,每天都有不同的散列。

 小结一下,即保证散列独一无二,以确保系统不会与其他系统发生冲突。

6.参考文献

链接-https://developers.google.cn/machine-learning/data-prep/construct/sampling-splitting/sampling

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时间序列预测 | Matlab自回归差分移动平均模型ARIMA时间序列预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列预测 | Matlab自回归差分移动平均模型ARIMA时间序列预测,单列数据输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清空环境变量 warnin…

Linux开发工具之【vim】

Linux开发工具之【vim】 文章目录&#xff1a; Linux开发工具之【vim】1. Linux软件包管理器yum1.1 查看软件1.2. 下载软件1.3 卸载软件 2. vim编辑器的使用2.1 vim常用模式2.2 vim基本操作2.3 vim命令模式命令集2.3.1 移动光标2.3.2 删除文字2.3.3 复制文本内容2.3.4 替换文本…

UE特效案例 —— 魔法翅膀

一&#xff0c;环境配置 创建默认地形Landscape&#xff0c;如给地形上材质需确定比例&#xff1b;添加环境主光源DirectionalLight&#xff0c;设置相应的强度和颜色&#xff1b;PostProcessVolume设置曝光&#xff0c;设置Min/Max Brightness为1&#xff1b; 与关闭Game Sett…

【SpringBoot3】--01.快速入门、基本框架原理、常用注解、yaml配置文件、日志配置

文章目录 SpringBoot3核心特性1.简介1. 1前置知识1.2 环境要求1.3SpringBoot是什么 2.快速入门2.1开发流程2.1.1创建项目2.1.2导入场景2.1.3 主程序2.1.4 业务2.1.5 测试2.1.6 打包 2.2 特性小结2.2.1 简化整合2.2.2简化开发2.2.3 简化配置2.2.4 简化部署2.2.5 简化运维 2.3 Sp…

macbook安装chatglm2-6b

1、前言 chatglm安装环境还是比较简单的&#xff0c;比起Stable diffusion安装轻松不少。   安装分两部分&#xff0c;一是github的源码&#xff0c;二是Hugging Face上的模型代码&#xff1b;安装过程跟着官方的readme文档就能顺利安装。以下安装内容&#xff0c;绝大部分是…

功夫这个词,西方语言中没有

功夫这个词&#xff0c;西方语言中没有 功夫一种意思是武侠片的武功之意 另一种意思就是【下功夫】 趣讲大白话&#xff1a;只要功夫深&#xff0c;铁棒磨成针 【趣讲信息科技220期】 #非著名IT人安志强的趣味笔记# **************************** 西方词语怎么翻译功夫的&#…

准确率 99.9% 的离线IP地址定位库

Ip2region 是一个离线 IP 地址定位库&#xff0c;准确率高达 99.9%&#xff0c;搜索性能为 0.0x 毫秒。DB 文件只有几兆字节&#xff0c;其中存储了所有 IP 地址。 支持 Java、PHP、C、Python、Nodejs、Golang、C#、lua 等查询绑定。查询算法使用二叉树、B树和内存搜索算法。 …

QT day2

second.h文件&#xff1a; #ifndef SECOND_H #define SECOND_H#include <QWidget> #include <QWidget> #include <QDebug> #include <QIcon> #include <QButtonGroup> #include <QPushButton> #include <QLabel> #include <QLin…

Python+CNN 手写公式识别计算系统

系统&#xff1a;Win10 环境&#xff1a;Pycharm/Vscode Python3.7 效果图&#xff1a; 部分代码如下&#xff1a; import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim from torchvision import datasets,transforms#定义…

尚硅谷Docker实战教程-笔记06【Docker容器数据卷】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址&#xff1a;尚硅谷Docker实战教程&#xff08;docker教程天花板&#xff09;_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【理念简介、官网介绍、平台入门图解、平台架构图解】尚硅谷Docker实战教程-笔…

K8s 内存泄漏处理方法

问题描述&#xff1a; 1. 安装go环境 2. 下载地址: https://golang.google.cn/dl/[rootk8s-master home]# rm -rf /usr/local/go && tar -C /usr/local/ -zxvf go1.17.3.linux-amd64.tar.gz3. 永久配置go 环境[rootk8s-master home]# vim /etc/profile export GOPATH…

Openpose原理总结

Openpose是一种开源的实时多人姿态估计库&#xff0c;由卡耐基梅隆大学开发。它通过分析图像或视频中的人体关键点来估计人体的姿态&#xff0c;识别身体的各个部分&#xff0c;并推断出人体的姿势信息。 Openpose能够同时检测和跟踪多个人的姿态&#xff0c;可以用于人机交互、…