转换分类数据

您的某些特征可能是不具有有序关系的离散值。例如,犬类、字词或邮政编码。这些功能称为分类,每个值称为一个类别。您可以将分类值表示为字符串甚至数字,但不能比较这些数字或将它们相互减法。

通常,您应该用分类数据(而不是数值数据)表示包含整数值的特征。例如,假设某个邮政编码特征的值是整数。如果您错误地用数字表示此特征,则会导致模型查找不同邮政编码之间的数字关系;例如,您希望模型确定邮政编码 20004 是邮政编码 10002 的两倍(或一半)。通过将邮政编码表示为分类数据,您可以让模型为每个邮政编码查找单独的信号。

如果数据字段的类别数量较少(例如周几或颜色调色板有限),则可以为每个类别创建唯一的特征。例如:

调色板中的每种颜色都表示为单独的特征。也就是说,每种颜色都是特征向量中的单独特征。例如,红色表示特征,橙色表示特征,以此类推。 图 1:每个类别的独特功能。

 

然后,模型可以学习每种颜色的单独权重。例如,模型可能会了解到红色汽车比绿色汽车更贵。

这些特征随后可被编入索引。

调色板中的每种颜色现在都属于同一地图项。
也就是说,颜色现在只是特征向量中的单个特征。每种颜色都有一个唯一值。例如,红色的值为 0,橙色的值为 1,以此类推。 图 2:编入索引的功能。

 

这种映射称为词汇。

词汇

在词汇表中,每个值代表一个独特的特征。

Index NumberCategory
0Red
1Orange
2Blue
......

该模型会从字符串中查找索引,将 1.0 分配给特征向量中的相应槽位,将 0.0 分配给特征向量中的所有其他槽位。

将类别映射到特征向量的端到端过程示意图。在该图中,输入特征为黄色、橙色、蓝色、蓝色。系统使用存储的词汇表(红色为 0,橙色为 1,蓝色为 2,黄色为 3,以此类推)将输入值映射到 ID。因此,系统会将黄色、橙色、蓝色、蓝色映射到 3、1、2、2。然后,系统会将这些值转换为独热特征向量。例如,假设某个系统具有七种可能的颜色,则 3 会变为 0.0、0.0、0.0、1.0、0.0、0.0、0.0。 图 3:将类别映射到特征向量的端到端过程。

关于稀疏表示法的说明

例如,如果类别是星期几,则最终可能会使用特征向量 [0, 0, 0, 0, 1, 0, 0] 表示星期五。不过,机器学习系统的大多数实现都会在内存中使用稀疏表示法表示该向量。常见的表示法是非空值及其对应索引的列表 - 例如,1.0 代表值,[4] 代表索引。这样可以减少存储大量 0 的内存,并实现更高效的矩阵乘法。就基本数学而言,[4] 相当于 [0, 0, 0, 0, 1, 0, 0]。

词汇量 (OOV)

就像数字数据包含离群值一样,分类数据也包含离群值。例如,假设某个数据集包含汽车的说明。此数据集的一个特征可以是汽车的颜色。假设此数据集很好地表示了常见的汽车颜色(黑色、白色、灰色等),并将每种颜色划分到一个类别中,以便了解这些不同的颜色如何影响价值。但是,假设此数据集包含少量具有奇怪颜色的汽车(mauve、puce、牛油果)。您无需为每种颜色分别指定类别,而是可以将它们归入名为词外匹配 (OOV) 的综合类别。通过使用 OOV,系统不会浪费时间训练每种稀有颜色。

哈希技术

另一种方法是将每个字符串(类别)哈希处理为可用的索引空间。哈希处理通常会导致冲突,但您依赖于模型学习同一索引中类别的一些共享表示法,这非常适合给定问题。

对于重要术语,哈希可能会比选择词汇更糟糕,因为会发生冲突。另一方面,哈希处理不需要您组建词汇表,如果特征分布随时间发生显著变化,这种方法会非常有用。

显示两个字词列表的示意图。一个列表包含 10 个字词。另一个列表则将 10 个字词分成 8 个哈希分桶。因此,6 个哈希桶包含一个单词,而 2 个哈希桶均包含 2 个单词。每个哈希存储分区由 1 到 8(含 1 和 8)之间的数字标识。 图 4:将项映射到词汇表。

混用哈希和词汇

您可以采用混合方法,并将哈希技术与词汇表相结合。 使用术语表处理数据中最重要的类别,但将 OOV 存储分区替换为多个 OOV 存储分区,并使用哈希技术将类别分配给存储分区。

哈希桶中的类别必须共享一个索引,并且模型可能无法做出良好的预测,但我们已分配了一些内存,以尝试学习词汇表之外的类别。

显示三个字词列表的示意图。一个列表由 10 个字词组成。其他两个列表将这 10 个单词映射到词汇和哈希桶。也就是说,5 个单词直接映射到词汇,而另外 5 个单词映射到两个哈希桶。一个哈希存储分区包含两个单词,另一个哈希存储分区包含三个字词。该词汇包含常见字词;哈希存储分区包含更罕见的字词。 图 5:将词汇和哈希技术相结合的混合方法。

关于嵌入的注意事项

回想一下机器学习速成课程中提到的嵌入是表示为连续值特征的分类特征。深度模型经常将索引从索引转换为嵌入。

显示通过嵌入将类别映射到特征向量的端到端流程的示意图。嵌入表由一组编号的行组成。每行由一个介于 0.0 和 1.0 之间的浮点值组成。如需转换类别,系统会复制嵌入表中的相应行。例如,如果输入类别为 0,则系统会将嵌入表的第一行复制到特征向量。如果输入类别为 1,则系统会将嵌入表的第二行复制到特征向量中。 图 6:通过嵌入稀疏特征向量

我们讨论的其他转换可能会存储在磁盘上,但嵌入不同。由于嵌入经过训练,因此它们不是典型的数据转换,而是模型的一部分。它们使用其他模型权重进行训练,在功能上等同于权重层。

预训练嵌入呢?预训练嵌入在训练期间通常仍然可以修改,因此从概念上讲,它们仍然是模型的一部分。