预处理的作用主要在于将难以表达的string或者数组转换成模型容易训练的向量表示,其中转化过程大多是形成一张查询表用来查询。

常见的预处理方式包括:

  • class Discretization: Buckets data into discrete ranges.

  • class Hashing: Implements categorical feature hashing, also known as "hashing trick".

  • class IntegerLookup: Maps integers from a vocabulary to integer indices.

  • class Normalization: Feature-wise normalization of the data.

  • class StringLookup: Maps strings from a vocabulary to integer indices.

接下来,本文将介绍下这些常用的预处理方式的作用和内容

Discretization

离散化层。该层将其输入数据的每个元素放入几个连续的范围之一,并输出一个整数索引,指示每个元素位于哪个范围。这个索引也就是索引编号,通过分桶边界值判断输入的数字属于哪个分桶,以此给出桶号。

换句话说,它的作用在于将连续的数值特征转换为整数分类特征。

在2.5版本的tf当中,该层的入参只有一个分桶边界bins,用法为:

tf.keras.layers.experimental.preprocessing.Discretization(
bins, **kwargs
)

在2.11版本的tf当中,Discretization层被定义为

tf.keras.layers.Discretization(
bin_boundaries=None,
num_bins=None,
epsilon=0.01,
output_mode='int',
sparse=False,
**kwargs
)

其中多了一个epsilon,用来作为误差容忍度,通常是一个接近于零的小分数(例如0.01)。较大的epsilon值会增加分位数近似,从而导致更多不相等的桶,但可以提高性能和资源消耗。

另外还多了一个output_mode:

  • "int":直接返回离散化的bin索引。

  • "one_hot":将输入中的每个元素编码到与num_bins大小相同的数组中,在输入的bin索引处包含一个1。如果最后一个维度的大小为1,则对该维度进行编码。如果最后一个维度的大小不是1,则将为编码后的输出追加一个新维度。

  • "multi_hot":将输入中的每个样本编码到与num_bins大小相同的单个数组中,为样本中出现的每个bin索引索引包含一个1。将最后一个维度作为样本维度,如果输入形状为(…, sample_length),输出形状将是(…, num_tokens)。

  • "count":作为"multi_hot",但int数组包含bin索引在示例中出现次数的计数。

举一个现有的官方的例子:

>>> input = np.array([[-1.5, 1.0, 3.4, .5], [0.0, 3.0, 1.3, 0.0]])
>>> layer = tf.keras.layers.experimental.preprocessing.Discretization(
... bins=[0., 1., 2.])
>>> layer(input)
<tf.Tensor: shape=(2, 4), dtype=int32, numpy=
array([[0, 1, 3, 1],
[0, 3, 2, 0]], dtype=int32)>

在这个例子中,传入的参数 bins=[0., 1., 2.] 代表着该层以0、1、2 作为数值边界进行分桶,所以整体的查询表大概如下所示:

bin <0 0~1 1~2 >2
index 0 1 2 3

结合着官方的例子,处于边界值上的数值,会被归于前一个桶。比如第一行第二个数字数值为1,会被分桶成编号为1。

其中Discretization层调用了bucket进行分桶

要注意的是,这些层是不可训练的。它们的状态在训练期间没有设置;它必须在训练之前设置,或者通过从预先计算的常数初始化它们,或者通过在数据上“调整”它们。

模型预处理层介绍(1) - Discretization的更多相关文章

  1. OSI模型——传输层

    OSI模型——传输层 运输层 运输层概述 运输层提供应用层端到端通信服务,通俗的讲,两个主机通讯,也就是应用层上的进程之间的通信,也就是转换为进程和进程之间的通信了,我们之前学到网络层,IP协议能将分 ...

  2. C++11 并发指南七(C++11 内存模型一:介绍)

    第六章主要介绍了 C++11 中的原子类型及其相关的API,原子类型的大多数 API 都需要程序员提供一个 std::memory_order(可译为内存序,访存顺序) 的枚举类型值作为参数,比如:a ...

  3. ThinkPHP 的模型使用详细介绍--模型的核心(七)

    原文:ThinkPHP 的模型使用详细介绍--模型的核心(七) 注意:本节是ThinkPhp框架对数据操作的核心处理部分 大家还是在这里看清楚可以将其剪切放到代码编辑器中查看 本章节给大家着重介绍模型 ...

  4. 服务器端IO模型的简单介绍及实现

    https://mp.weixin.qq.com/s?src=3&timestamp=1541726441&ver=1&signature=xPSye3v7miF7aVeLHb ...

  5. UIView的层介绍

    UIView的层介绍 subview在西安市到屏幕上时,是位于superview上层的. 同一个view的subview时依照增加的顺序显示相应层的.越晚增加的subview显示在越上层,反之也是如此 ...

  6. Django基础之模型(models)层(上)

    目录 Django基础之模型(models)层 单表查询 必知必会13条 神奇的双下划线查询 多表查询 外键的字段的增删改查 表与表之间的关联查询 基于双下划线的跨表查询(连表查询) 补充知识 Dja ...

  7. 服务器端IO模型的简单介绍及实现 阻塞 / 非阻塞 VS 同步 / 异步 内核实现的拷贝效率

    小结: 1.在多线程的基础上,可以考虑使用"线程池"或"连接池","线程池"旨在减少创建和销毁线程的频率,其维持一定合理数量的线程,并让空闲 ...

  8. 18 网络编程-TCP/IP各层介绍(5层模型讲解)

    1.TCP/IP五层协议讲解 物理层--数据链路层--网络层--传输层--应用层 我们将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议 就 ...

  9. 网络编程-TCP/IP各层介绍(5层模型讲解)

    1.TCP/IP五层协议讲解 物理层--数据链路层--网络层--传输层--应用层 我们将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议 就 ...

  10. caffe学习系列(3):数据层介绍

    一个模型由多个层构成,如Data,conv,pool等.其中数据层是模型的最底层,是模型的入口. 提供数据的输入,也提供数据从Blobs转换成别的格式进行保存输出还包括数据的预处理(如减去 均值, 放 ...

随机推荐

  1. vue项目中,alert使用

    methods:{ sendData() { ··· // 中间省略的代码 alert(`发送成功,连接失败的号码有:${failList}`) // failList里存的是后台返回的数据 } }

  2. SpringCloud -Netflix 总结·

    springcloud 核心组件 Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.智能路由.消息 ...

  3. 【Shell案例】【打印指定行用sed、for循环、head和tail配合使用】4、输出第5行的内容

    描述写一个 bash脚本以输出一个文本文件 nowcoder.txt 中第5行的内容. 示例:假设 nowcoder.txt 内容如下:welcometonowcoderthisisshellcode ...

  4. 12V转5V降压芯片,12V转3.3V稳压芯片电路图

    12V转5V应用中,大多要求会输出电流高的,稳压LDO就不能满足了,需要使用DC-DC降压芯片来持续稳压5V,输出电流1000MA,2000MA,3000MA,5000MA等.不同的输出电流可以选择适 ...

  5. Gepetto:使用chatGPT来对函数功能进行分析并重命名变量的IDA插件

    最近OpenAI的chatGPT很火,chatGPT是一个大型的语言模型,能够生成人类语言的文本,主要用于对话式的问答和聊天,以及模拟人类的对话行为 有关chatGPT的介绍就不多赘述了,相关内容很多 ...

  6. python虚拟环境和venv的使用

    目录 1.环境与虚拟环境 2.查看帮助 3.--system-site-package 命令 4.创建虚拟环境 5.激活/关闭虚拟环境 6.保存和复制虚拟环境 7.改变虚拟环境所指向的真实python ...

  7. LeetCode HOT 100:在排序数组中查找元素的第一个和最后一个位置

    题目:34. 在排序数组中查找元素的第一个和最后一个位置 题目描述: 给你一个递增数组,和一个目标值target,最终返回数组中第一次出现target和最后一次出现target的下标.如果该数组中没有 ...

  8. 网络爬虫之requests模块,自动办公领域之openpyx模块

    一.第三方模块的下载与使用 第三方模块:别人写的模块,一般情况下功能都特别强大    我们如果想使用第三方模块,第一次必须先下载,后面才可以反复使用(等同于内置模块) 下载第三方模块的方式 1. pi ...

  9. mysql数据库(字段约束条件)

    什么是字段约束 字段约束就是将字段的内容定一个规则,我们要按照规则办事 约束 描述 关键字 非空约束 限制该字段的数据不能为null not null 唯一约束 保证该字段的所有数据都是唯一.不重复的 ...

  10. web项目部署上线(无虚拟主机,待学习)

    购买阿里云服务器 阿里云服务器ECS 系统镜像使用Ubuntu 20.04 LTS 使用ssh连接服务器,终端或者CMD中执行:$ssh root@x.x.x(阿里云服务器账号名@公网地址) 输入账号 ...