预处理的作用主要在于将难以表达的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. Lession1 写在机器学习之前
  2. Full Gc经历分析
  3. 【原】浅谈KL散度(相对熵)在用户画像中的应用
  4. 关于Entity Framework使用的简单例子
  5. 使用面向 iOS 的本机插件扩展 PhoneGap
  6. Java注解处理器--annotation学习四
  7. Kettle计算器的使用以及字符串格式化
  8. short-path problem (Dijkstra) 分类: ACM TYPE 2014-09-01 23:51 111人阅读 评论(0) 收藏
  9. [转]SQL快速入门
  10. Python学习笔记四,dict和set
  11. 深入子元素的width与父元素的width关系
  12. [Selenium With C#学习笔记] Lesson-06 单选按钮
  13. Visual Studio 无法记忆标签页、断点等的解决办法
  14. Python机器学习(基础篇---监督学习(朴素贝叶斯))
  15. ASP.NET Core MVC+EF Core从开发到部署
  16. ThinkPHP3.2.3中使用smarty模板引擎循环
  17. 2018.10.31 NOIP模拟 一些情报(倍增)
  18. django模板系统(上)
  19. vue中使用特殊字体
  20. Qt环境配置 + Qt使用教程

热门文章

  1. 打不开 github 的方法与推荐基于Vue3与Element plus的后台管理系统
  2. Inventor 2021保姆级安装教程
  3. MySQL JDBC驱动版本与数据库版本的对应关系及注意事项
  4. js拓展-Dom与事件,字符串,数组方法,object对象,作用域
  5. CentOS Linux 的安装
  6. 【Shell案例】【awk匹配、grep查找文件内的字符串】6、去掉空行(删除空行)
  7. 【每日一题】【递归实现、自下而上、优化】-2022年1月12日-NC68 跳台阶
  8. cs231n__4.2 神经网络 Neural networks
  9. vue 项目引入 echarts折线图
  10. 重学c#系列—— 反射深入一点点[三十三]