预处理的作用主要在于将难以表达的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. Halocn双目相机标定

    [Halcon]Halcon双目标定 相机标定(4)---基于halcon的双目立体视觉标定 双目立体视觉:四(双目标定matlab,图像校正,图像匹配,计算视差,disparity详解,) 双目测距 ...

  2. beego-orm-sqlite

    dao.go ``` package daoimport ( "fmt" "github.com/astaxie/beego/orm" "html&q ...

  3. SQL-GROUP BY语句在MySQL中的一个错误使用被兼容的情况

    首先创建数据库hncu,建立stud表格. 添加数据: create table stud(sno varchar(30) not null primary key,sname varchar(30) ...

  4. Bugku 字符?正则?

    打开是一段中规中矩的php代码 先读一下代码 高亮文件2.php 定义变量key 定义变量IM其值是一个正则表达式匹配的结果 如果IM是真就输出key 所以这道题的关键也就是IM正则匹配的结果了,我们 ...

  5. Selenium4+Python3系列(十一) - Page Factory设计模式

    写在前面: Page Object模式,目的是将元素定位和元素操作分层,只接触测试内容,不写基础内容,便于后续对自动化测试用例体系的维护,这是中心思想,也是核心. 那么我们继续将简洁延续,这里沿用Ja ...

  6. (java 实现开箱即用基于 redis 的分布式锁

    项目简介 lock 为 java 设计的分布式锁,开箱即用,纵享丝滑. 开源地址:https://github.com/houbb/lock 目的 开箱即用,支持注解式和过程式调用 基于 redis ...

  7. Qt对象跨线程出现的问题记录,以及解决方案

    Qt在跨线程开发的时候可能会出现不少问题,在这里记录一下 Qt目前用下来还是非常强大的,虽然只是用在桌面端程序开发上,但是其强大的桌面开发库真的挺好用的(Layout除外,你妈死了). Qt除了UI, ...

  8. before-after-hook钩子函数

    before-after-hook 最近看别人的代码,接触到一个插件,before-after-hook,百度搜一圈也没有看到什么地方有教程,看这个字面意思是一个hook,和axios里面的拦截器,v ...

  9. SQL语句查询关键字:where筛选、group by分组、distinc去重、order by排序、limit分页、操作表的SQL语句布补充

    目录 SQL语句查询关键字 前期数据准备 编写SQL语句的小技巧 查询关键字之where筛选 查询关键字之group by分组 查询关键字之having过滤 查询关键字值distinct去重 查询关键 ...

  10. 【世界杯黑技术专题】「原理探索专题」一文解读一下“卡塔尔世界杯”的先进技术之半自动越位技术SAOT+比赛用球Al Rihla

    盘点卡塔尔世界杯的先进黑科技 归纳总结一下目前世界杯的先进的黑科技有哪些?大致可以划分为以下几点. 半自动化越位技术 比赛用球Al Rihla 球场智能空调 可持续利用的体育场 便利的数字设施和App ...