机器学习入门07
今天继续进行机器学习的入门,主题是处理分类数据。
处理分类数据 (Handling Categorical Data)
数字也可以是分类数据
真实的数值数据可以有特定的含义。例如,假设我们有一个模型,用于根据房屋面积来预测房屋的价值。通常情况下,这种模型依赖于数值特征的能力。然而,在相同条件下,200平方英尺的房屋可能价值是100平方米房屋的两倍。
在处理这类数据时,建议使用数值的指示性表示,而不是直接使用数值本身。例如,假设我们有一个包含整数的邮政编码。如果您将这个邮政编码视为分类特征,您需要找到与其他邮政编码不同的数字。也就是说,您可以将邮政编码10002视为分类数据,并单独计算每个邮政编码的权重。
编码
编码是将分类数据或其他特征转换为模型可以使用的数值形式。这种转换是必要的,因为模型无法直接处理字符,例如"dog"或"maple"。本单元将介绍几种常见的编码方法。
分类数据:词汇和独热编码
维度是特征向量中元素的同义词。有些分类特征的维度较低。例如:
特征名称 | 类别数 | 类别示例 |
---|---|---|
snowed_today | 2 | True, False |
skill_level | 3 | 新手, 从业者, 专家 |
season | 4 | 冬季, 春季, 夏季, 秋季 |
day_of_week | 7 | 星期一, 星期二, 星期三 |
星球 | 8 | 水星, 金星, 地球 |
如果分类特征的可能类别数量较少,您可以将其编码为词汇特征。在训练过程中,模型会将每个类别值视为一个单独的特征。
例如,假设您要创建一个模型,以根据汽车的 car_color 来预测汽车的价格。由于汽车颜色的可能数量有限,car_color 就是一个低维分类特征。
独热编码
独热编码是将每个类别特征转换为其独热编码的下一步。在独热编码中:
- 每个类别都包含一个包含 N 个元素的向量(数组)表示,其中 N 是类别的数量。例如,如果 car_color 有 k 个可能的类别,则表示 car_color 的独热编码将包含 k 个元素。
- 对于一个元素中只有 1 个元素的值为 1.0;其余所有元素的值均为 0.0。
以下表格展示了 car_color 中每个元素的独热编码:
功能 | 红色 | 橙色 | 蓝色 | 黄色 | 绿色 | 黑色 | 紫色 | 棕色 |
---|---|---|---|---|---|---|---|---|
"Red" | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
"Orange" | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
"Blue" | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
"Yellow" | 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 |
在独热编码中(而非字符或索引编码)会传递给特征的每个元素学习独特的权重。
注意:在真正的独热编码中,只有一个元素的值为 1.0。在称为多热编码的变体中,多个值可以为 1.0。
稀疏表示法
值主要为零(或空)的特征称为稀疏特征。许多分类特征(例如 car_color)往往是稀疏特征。稀疏表示法是指在稀疏特征中存储 1.0 的位置。例如,“Blue”的独热编码是:
1 | [0, 0, 1, 0, 0, 0, 0, 0] |
由于 1 位于第 2 个位置(从 0 开始计数),因此上述稀疏特征的稀疏表示为:
1 | 2 |
请注意,稀疏表示法所占用的内存远远少于八元素的 one-hot 向量。请务必注意,模型必须基于一对一的行进行训练,而不是基于稀疏表示进行训练。
注意:多热编码的稀疏表示法显示所有非零元素的位置信息。例如,同时属于“Blue”和“Black”的汽车的稀疏表示为 2, 5。
分类数据中的离群值
与数值数据一样,分类数据也可能包含异常值。假设我们有一个分类特征
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" |
当类别数量较多时,独热编码通常不是一个好的选择。使用高维特征可能会导致以下问题:
- 模型训练会更慢。
- 结构的模型通常可以更快地推理结果。也就是说,模型的推理时间更短。
一种常见的减少维度的方法是使用哈希编码。哈希编码是一种将少量类别映射到较小的维度的方法。
人工评估员
由于人工手动标记的数据通常精确度较高,且数据质量相对较好,因此在训练模型时,标准答案数据比机器标记的数据更受欢迎。
这意味着,标记一组标准的数据集是非常重要的。人工标记可能会引入偏见,偏见可能会影响数据收集过程中的清晰度和处理过程中的引导。任何两个人工评估员的标记可能都不一样。人工评估者之间的评估结果的差异称为评估一致性。您可以通过每个示例使用多名评估员,并衡量评估结果之间的一致性,从而了解评估意见的差异。
机器评估者
机器标记的数据(与由一个或多个类型模型进行标记的标准数据)通常称为银标。机器标记的数据质量在质量上可能会有很大差异。不要轻视机器的能力,机器标记的结果可能是准确的。例如,如果计算机视觉模型将一张图片标记为“狗”,那么它实际上可能是被标记为“猫”的模型类型。
同样,如果您将机器标记的所有语言评分分为0-25(是中性值),则可能会对所有语言评分的数量和数据中实际上不存在的值产生影响。在对数据进行训练之前,请务必了解数据中机器标记的质量和偏差。
高维度
分类数据往往会在高维特征中出现,即包含大量元素的特征。高维度会增加训练成本,并增加训练难度。因此,机器学习领域常常采用降维技术来处理高维特征。
对于自然语言数据,降维的主要方法是将特征向量转换为嵌入向量。
分类数据:特征组合
特征组合是指将两个或多个分类特征组合成一个新特征。类似于多项式变换,特征组合允许对特征进行线性处理。
例如,假设某个数据集中有以下分类特征:
- edges,包含值
smooth
、toothed
和lobed
- arrangement,包含值
opposite
和alternate
假设上述顺序是独热编码特征的顺序:一个具有 smooth
边和
opposite
排列的项可以表示为 ({(1, 0, 0), (1, 0)})。
这两个特征的特征组合(即笛卡尔积)为:
\[ \{Smooth\_Opposite, Smooth\_Alternate, Toothed\_Opposite, Toothed\_Alternate, Lobed\_Opposite, Lobed\_Alternate\} \]
其中每一项的值是基于特征值的派生:
- Smooth_Opposite =
edges[0] * arrangement[0]
- Toothed_Opposite =
edges[1] * arrangement[0]
- Lobed_Alternate =
edges[2] * arrangement[1]
对于数据集中的任何给定条件,仅当满足条件时,特征组合才会等于
1。也就是说,具有特定顺序的特征组合中有 Lobed_Alternate
的值为 1,则上述特征组合为:
\[ \{0, 0, 0, 0, 0, 1\} \]
此数据集可用于按特征种类进行分析,因为这些特征组合是因物种而异的。
何时使用特征组合
领域知识可以提供有关何时使用特征组合的指导。如果没有相关领域知识,就可能难以确定有效的特征组合或多项式转换。您通常可以通过计算销售量、神经网络等在训练过程中自动查找和应用的特征组合。
请注意,组合两个稀疏特征会生成一个均匀稀疏的新特征之间的差异。例如,如果特征 A 为 200 元素稀疏特征,特征 B 为 100 元素稀疏特征,A 和 B 的特征组合会生成 2 万个元素的稀疏特征。