分类数据:词汇和独热编码

术语“维度”的含义是 特征向量。 一些分类特征是低维度。例如:

特征名称 类别数量 类别示例
snowed_today 2 True、False
skill_level 3 新手、从业者、专家
season 4 冬季、春季、夏季、秋季
day_of_week 7 星期一、星期二、星期三
星球 8 水星、金星、地球

当某个分类特征的可能类别数量较少时,您可以 将其编码为词汇。有了词汇编码,模型将每个 作为单独的特征进行预测。在训练期间, 模型会为每个类别学习不同的权重。

例如,假设您要创建一个模型来预测汽车的价格, 一部分是针对名为 car_color 的分类特征进行训练的。 也许红色汽车比绿色汽车的价值更高。 由于制造商提供的外部颜色数量有限,car_color 低维分类特征。 下图推荐了一个词汇(可能的值) car_color:

图 1. 调色板中的每种颜色都表示为
      功能。也就是说,每种颜色都是特征向量中的一个单独特征。
      例如,“Red”“Orange”是一项单独的功能
      依此类推。
图 1. 每个类别的独特功能。

练习:检查您的直觉

判断对错:机器学习模型可以直接基于以下数据进行训练: 原始字符串值(如 "Red""Black),而不使用 将这些值转换为数值矢量。
正确
在训练期间,模型只能操纵浮点数。 字符串 "Red" 不是浮点数。您 必须将 "Red" 等字符串转换为浮点数。
错误
机器学习模型只能使用 因此您需要将这些字符串转换为 浮点值。

索引编号

机器学习模型只能操控浮点数。 因此,您必须将每个字符串转换为唯一的索引编号,如 如下图所示:

图 2. 每种颜色都与一个唯一的整数值相关联。对于
      例如“红色”与整数 0“Orange”相关联替换为
      整数 1,依此类推。
图 2. 编入索引的特征。

检查您的直觉

模型是否直接根据显示的索引编号进行训练 会发生什么情况?
如果模型使用索引数字进行训练, 将每个字段错误地视为数值, "Black"(索引编号 5)将意义重大的 5 倍 而不是 "Orange"(索引编号为 1)。
您的模型不应根据索引编号进行训练。 如果匹配,模型会将每个索引编号视为一个数值 值并将 "Black"(索引编号 5)视为 对模型有意义的价值是 "Orange" 的 5 倍 (索引编号 1)。

独热编码

构建词汇的下一步是将每个索引编号转换为 其独热编码。 在独热编码中:

  • 每种类别都由 N 个元素的向量(数组)表示,其中 N 是类别的数量。例如,如果 car_color 有八个可能的 则表示独热矢量将有八个元素。
  • 独热矢量中只有一个元素的值为 1.0; 其余所有元素的值均为 0.0

例如,下表显示了 car_color:

功能 红色 Orange 蓝色 黄色 绿色 黑色 紫色 棕色
“红色” 1 0 0 0 0 0 0 0
“橙色” 0 1 0 0 0 0 0 0
“蓝色” 0 0 1 0 0 0 0 0
“黄色” 0 0 0 1 0 0 0 0
“绿色” 0 0 0 0 1 0 0 0
“黑色” 0 0 0 0 0 1 0 0
“紫色” 0 0 0 0 0 0 1 0
“棕色” 0 0 0 0 0 0 0 1

传递的是独热矢量,而不是字符串或索引编号 传递给特征向量。模型会为每个元素学习单独的权重, 特征向量。

下图显示了 词汇表征:

图 3. 将类别映射到的端到端流程图
      特征向量。在上图中,输入特征为“黄色”,
      “橙色”“蓝色”和“蓝色”我们再来一遍系统使用存储的
      词汇表(“红色”为 0,“橙色”为 1,“蓝色”为 2,“黄色”为 3,)
      用于将输入值映射到某个 ID。因此,系统会将“黄色”映射到
      “橙色”“蓝色”和“蓝色”3、1、2、2然后,
      将这些值映射到独热特征向量。例如,假设某个系统
      有八种可能的颜色,3 会变为 0、0、0、1、0、0、0、0。
图 3. 将类别映射到特征向量的端到端流程。

稀疏表示法

值主要为零(或空)的特征称为 稀疏特征。很多 分类特征(例如 car_color)往往是稀疏特征。 稀疏表示法 表示存储 1.0 的位置 输出结果。例如,"Blue" 的独热矢量为:

[0, 0, 1, 0, 0, 0, 0, 0]

由于 1 位于位置 2(从 0 开始计数时),因此 上述独热矢量的稀疏表示法为:

2

请注意,稀疏表示法消耗的内存远远少于 即 8 元素独热矢量。重要的是,模型必须基于 BERT 模型进行训练, 即独热矢量,而不是稀疏表示法。

分类数据中的离群值

与数值数据一样,分类数据也包含离群值。假设 car_color 不仅包含热门颜色,还包含一些很少使用的颜色 离群值颜色,例如 "Mauve""Avocado"。 您不必为每种离群颜色分别指定一个类别, 可以将它们集中到一个“综合”中这个类别叫词汇表外 (OOV)。换句话说,所有离群颜色被分箱到 离群值。系统会学习该离群值存储分区的单个权重。

对高维分类特征进行编码

一些分类特征具有大量维度,例如 下表中的项目:

特征名称 类别数量 类别示例
words_in_english 约 500,000 “快乐”“步行”
US_postal_codes 约 42,000 人 “02114”、“90301”
last_names_in_Germany 约 850,000 “施密特”、“施耐德”

如果类别数量很多,独热编码通常不是好的选择。 嵌入,在单独的 嵌入模块,通常是 更好的选择。嵌入可显著减少 这在两个重要方面让模型受益:

  • 模型的训练速度通常较快。
  • 构建的模型通常可以更快地推断出预测结果。也就是说, 延迟时间较短。

哈希(也称为“哈希”) 技巧)是一种不太常用的方法,用于减少维度数量。