维度一词是特征向量中元素数的同义词。有些分类特征的维度较低。例如:
特征名称 | 类别数 | 类别示例 |
---|---|---|
snowed_today | 2 | True、False |
skill_level | 3 | 新手、从业者、专家 |
season | 4 | 冬季、春季、夏季、秋季 |
day_of_week | 7 | 星期一、星期二、星期三 |
星球 | 8 | 水星、金星、地球 |
如果分类特征的可能类别数量较少,您可以将其编码为词汇。使用词汇表编码时,模型会将每个可能的分类值视为一个单独的特征。在训练过程中,模型会为每个类别学习不同的权重。
例如,假设您要创建一个模型来预测汽车的价格,在一定程度上根据名为 car_color
的分类特征预测汽车价格。也许红色汽车的价值高于绿色汽车。
由于制造商提供的外部颜色数量有限,因此 car_color
是一种低维分类特征。下图展示了 car_color
的词汇(可能值):
练习:检查您的直觉
"Red"
不是浮点数。您必须将 "Red"
等字符串转换为浮点数。
编号
机器学习模型只能处理浮点数。因此,您必须将每个字符串转换为唯一的索引编号,如下图所示:
练习:检查您的直觉
"Black"
(索引编号 5)对模型有意义的意义是 "Orange"
(索引编号 1)的 5 倍。"Black"
(索引编号 5)对模型有意义的意义是 "Orange"
(索引编号 1)的 5 倍。独热编码
构建词汇的下一步是将每个索引编号转换为其独热编码。在独热编码中:
- 每个类别都由一个包含 N 个元素的向量(数组)表示,其中 N 是类别的数量。例如,如果
car_color
有八个可能的类别,则表示car_color
的独热向量将包含八个元素。 - 独热矢量中只有一个元素的值为 1.0;其余所有元素的值均为 0.0。
例如,下表显示了 car_color
中的每个元素的独热编码:
功能 | 红色 | Orange | 蓝色 | 黄色 | 绿色 | 黑色 | 紫色 | 棕色 |
---|---|---|---|---|---|---|---|---|
“Red” | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
“橙色” | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
"Blue" | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
“黄色” | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
“Green” | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
"Black" | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
“Purple” | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
“Brown” | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
是独热矢量(而非字符串或索引编号)会传递给特征向量。模型会为特征向量的每个元素学习单独的权重。
下图展示了词汇表征中的各种转换:
稀疏表示法
值主要为零(或空)的特征称为稀疏特征。许多分类特征(如 car_color
)往往是稀疏特征。稀疏表示法是指在稀疏矢量中存储 1.0 的位置。例如,"Blue"
的独热向量为:
[0, 0, 1, 0, 0, 0, 0, 0]
由于 1
位于第 2 个位置(从 0 开始计数),因此上述独热矢量的稀疏表示为:
2
请注意,与八元素的 one-hot 矢量相比,稀疏表示法占用的内存要少得多。重要的是,模型必须基于一对一向量进行训练,而不是基于稀疏表示进行训练。
分类数据中的离群值
与数值数据一样,分类数据也包含离群值。假设 car_color
不仅包含流行颜色,还包含一些鲜少使用的离群颜色,例如 "Mauve"
或 "Avocado"
。您可以将这些离群颜色归入一个名为“不在词汇表中 (OOV)”的单个“万能”类别,而不是为每种离群颜色单独设置一个类别。换句话说,所有离群颜色都会归入到一个离群分桶中。系统会为该离群值存储桶学习单个权重。
对高维分类特征进行编码
一些分类特征具有大量维度,如下表所示:
特征名称 | 类别数 | 类别示例 |
---|---|---|
words_in_english | 约 500,000 | “happy”“walking” |
US_postal_codes | 约 42,000 | “02114”“90301” |
last_names_in_Germany | ~850,000 | “Schmidt”“Schneider” |
当类别数量较多时,独热编码通常不是一个好选择。嵌入(详见单独的嵌入模块)通常是更好的选择。嵌入可以显著减少维度数量,这对模型有两个重要好处:
- 模型通常会更快地训练。
- 构建的模型通常可以更快地推理出预测结果。也就是说,模型的延迟时间更短。
哈希(也称为哈希技巧)是一种不太常见的减少维度数量的方法。