您的某些特征可能是不具有有序关系的离散值。例如,犬类、字词或邮政编码。这些功能称为分类,每个值称为一个类别。您可以将分类值表示为字符串甚至数字,但不能比较这些数字或将它们相互减法。
通常,您应该用分类数据(而不是数值数据)表示包含整数值的特征。例如,假设某个邮政编码特征的值是整数。如果您错误地用数字表示此特征,则会导致模型查找不同邮政编码之间的数字关系;例如,您希望模型确定邮政编码 20004 是邮政编码 10002 的两倍(或一半)。通过将邮政编码表示为分类数据,您可以让模型为每个邮政编码查找单独的信号。
如果数据字段的类别数量较少(例如周几或颜色调色板有限),则可以为每个类别创建唯一的特征。例如:
图 1:每个类别的独特功能。
然后,模型可以学习每种颜色的单独权重。例如,模型可能会了解到红色汽车比绿色汽车更贵。
这些特征随后可被编入索引。
图 2:编入索引的功能。
这种映射称为词汇。
词汇
在词汇表中,每个值代表一个独特的特征。
Index Number | Category |
---|---|
0 | Red |
1 | Orange |
2 | Blue |
... | ... |
该模型会从字符串中查找索引,将 1.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,系统不会浪费时间训练每种稀有颜色。
哈希技术
另一种方法是将每个字符串(类别)哈希处理为可用的索引空间。哈希处理通常会导致冲突,但您依赖于模型学习同一索引中类别的一些共享表示法,这非常适合给定问题。
对于重要术语,哈希可能会比选择词汇更糟糕,因为会发生冲突。另一方面,哈希处理不需要您组建词汇表,如果特征分布随时间发生显著变化,这种方法会非常有用。
图 4:将项映射到词汇表。
混用哈希和词汇
您可以采用混合方法,并将哈希技术与词汇表相结合。 使用术语表处理数据中最重要的类别,但将 OOV 存储分区替换为多个 OOV 存储分区,并使用哈希技术将类别分配给存储分区。
哈希桶中的类别必须共享一个索引,并且模型可能无法做出良好的预测,但我们已分配了一些内存,以尝试学习词汇表之外的类别。
图 5:将词汇和哈希技术相结合的混合方法。
关于嵌入的注意事项
回想一下机器学习速成课程中提到的嵌入是表示为连续值特征的分类特征。深度模型经常将索引从索引转换为嵌入。
图 6:通过嵌入稀疏特征向量
我们讨论的其他转换可能会存储在磁盘上,但嵌入不同。由于嵌入经过训练,因此它们不是典型的数据转换,而是模型的一部分。它们使用其他模型权重进行训练,在功能上等同于权重层。
预训练嵌入呢?预训练嵌入在训练期间通常仍然可以修改,因此从概念上讲,它们仍然是模型的一部分。