独热编码
一.原理
(为什么使用one-hot编码来处理离散型特征?
在回归,分类,聚类等机器学习算法中,特征之间距离的计算或相似度的计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,基于的就是欧式空间。而我们使用one-hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。将离散型特征使用one-hot编码,确实会让特征之间的距离计算更加合理。
比如,有一个离散型特征,代表工作类型,该离散型特征,共有三个取值,不使用one-hot编码,其表示分别是x_1 = (1), x_2 = (2), x_3 = (3)。两个工作之间的距离是,(x_1, x_2) = 1, d(x_2, x_3) = 1, d(x_1, x_3) = 2。那么x_1和x_3工作之间就越不相似吗?显然这样的表示,计算出来的特征的距离是不合理。那如果使用one-hot编码,则得到x_1 = (1, 0, 0), x_2 = (0, 1, 0), x_3 = (0, 0, 1),那么两个工作之间的距离就都是sqrt(2).即每两个工作之间的距离是一样的,显得更合理。)
独热编码(哑变量 dummy variable)使用N位状态寄存器对N个状态进行编码,每个状态由其独立的寄存器位表示,并且任意时刻只有一位是有效的(即设置为1)。将离散特征(分类变量)转换为机器学习算法易于处理的二进制格式,提高了算法对离散特征的处理能力。
二.适用条件及缺点
独热编码的特点如下:
- 针对具有明确分类值的数据:
独热编码特别适用于处理那些具有明确、有限且通常不带有数值意义的分类值的数据。例如,在性别这一特征中,我们有“男”和“女”这两个分类值,它们之间没有数值上的大小或顺序关系。同样,在颜色特征中,“红”、“绿”和“蓝”也是纯粹的分类标签,没有隐含的数值含义。
- 每个唯一分类值转换为二进制向量:
在独热编码中,每个唯一的分类值都被赋予一个唯一的二进制向量,也被称为“独热”向量,因为在这个向量中,只有一个位置的元素是1(表示该类别的存在),其余所有位置的元素都是0。例如,如果三个颜色类别,那么“红”可能被编码为[1, 0. 0],“绿”被编码为[0, 1, 0],“蓝”被编码为[0, 0, 1]。
- 避免数值关系误解
使用独热编码的一个重要原因是,它可以防止机器学习模型错误地解释类别之间可能存在的数值关系。如果直接使用原始的分类标签(如整数或字符串),某些模型(特别是基于数值计算的模型,如线性回归)可能会尝试在这些标签之间建立数值上的联系。通过转换为独热编码,每个类别都是完全独立的。模型不会受到这种潜在误导的影响。从而避免了算法基于这些关系做出不准确的预测。
独热编码的缺点:
-
维度增加:当类别数量较多时,独热编码会显著增加特征空间的维度,可能导致计算复杂性和过拟合问题。一般可以用PCA来减少维度。而且one hot encoding+PCA这种组合在实际中也非常有用。
-
信息损失风险:独热编码将每个序数类别转换为独立的二进制向量,这导致原始数据中的顺序信息丢失。对于依赖类别间顺序关系的模型或分析,这种信息损失可能会影响结果的准确性和解释性。
注:有些基于树的算法在处理变量时,并不是基于向量空间度量,数值只是个类别符号,即没有偏序关系,所以不用进行独热编码。
与其他预处理技术的结合:
独热编码通常与其他数据预处理技术一起使用,如缺失值处理、特征缩放和特征选择。
在应用独热编码之前,可能需要先处理缺失值,因为独热编码通常不适用于包含缺失值的分类特征。此外,在应用独热编码后,可能还需要进行特征选择以减少维度和冗余。