946 字
5 分钟
One-Hot编码

前言#

One-Hot编码(独热编码)是机器学习数据预处理中的一种方法1,其目的就是将分类变量转换成二进制向量,简化神经网络的输入。

定义: One-Hot编码,又称一位有效编码。其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。

One-Hot编码的实现#

案例1#

举个例子:

Feature_1Feature_2Feature_3Feature_4
Sample_10420
Sample_21020
Sample_32351
Sample_43300

上表中有4组数据,并且每组数据在4个特征上都有不同的状态,例如:特征1有4个不同的状态[0、1、2、3],特征2、3有3种不同的状态[4、0、3],特征4有2种不同的状态[0、1](按出现顺序进行排列)。

以特征1为例,进行 One-Hot编码 时,含有4种不同状态,所有最终的编码有4位,并且One-Hot编码要保证单个特征只有1位处于状态1,其他的都是0,因此,特征1在4种状态时的编码分别为 0001、0010、0100、1000。

所有上表中的4组数据经过 One-Hot编码 后的结果如下:

Feature_1Feature_2Feature_3Feature_4
Sample_1000100100101
Sample_2001001000101
Sample_3010010001010
Sample_4100010010011

案例2 词袋模型#

One-Hot编码 在特征提取上属于词袋模型,所以除了对有具体分类的特征数据进行编码外,One-Hot编码 另一种常用之处是语言库2

  • 我爱中国
  • 爸爸妈妈爱我
  • 爸爸妈妈爱中国

首先将以上语言进行拆分并进行编号:[1:我,2:爱,3:中国,4:爸爸:5:妈妈]。

然后通过 One-Hot编码 对上述特征进行编码分别是:

编号内容编码
11xxxx
2x1xxx
3中国xx1xx
4爸爸xxx1x
5妈妈xxxx1

最总得到分别得到三句话的 One-Hot编码:

  • 我爱中国 ⇨ 11100
  • 爸爸妈妈爱我 ⇨ 11011
  • 爸爸妈妈爱中国 ⇨ 01111

One-Hot编码的优点#

  1. 解决了 分类器不好处理离散数据 的问题。
    • 欧式空间/距离,在回归、分类、聚类等机器学习算法中,特征间距离计算相似度/置信度的计算 都是以基于欧式空间。
    • One-Hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值 就 对应欧式空间的某个点。
  2. 在一定程度上也起到了 扩充特征 的作用。

One-Hot编码的缺点#

One-Hot编码的缺点在文本特征表示上比较突出。

  1. 它是一个词袋模型,不考虑 词与词之间的顺序
  2. 假设词与词相互独立
  3. 它得到的 特征是离散稀疏 的。

首先是缺点1,由于不考虑词之间的顺序,仅仅以词是否出现作为依据,所以两句不同的语句可能出现相同的编码,例如上面举过的例子:爸爸妈妈爱我 的编码是 11011,但 我爱爸爸妈妈 的编码同样是 11011,两句话虽然在编码相同,但从实际表达的含义上缺不同。

然后是缺点2,苹果是一种水果苹果是一家公司,很显然两句话里的 苹果 是两个不同的含义,如果使用相同编码很显然无法进行区分。

缺点3则是在大数据量的情况下尤为突出,假设将整个世界上的所有城市都通过 One-Hot 进行编码,就会出现如下情况:

杭州 [0,0,0,0,0,0,0,1,0,……,0,0,0,0,0,0,0] 上海 [0,0,0,0,1,0,0,0,0,……,0,0,0,0,0,0,0] 宁波 [0,0,0,1,0,0,0,0,0,……,0,0,0,0,0,0,0] 北京 [0,0,0,0,0,0,0,0,0,……,1,0,0,0,0,0,0]

在数据库中,杭州、上海、宁波、北京各对应一个向量,向量中只有一个值为1,其余都为0。

Footnotes#

  1. 机器学习数据预处理1:独热编码(One-Hot)及其代码

  2. one-hot理解

One-Hot编码
https://fuwari.vercel.app/posts/人工智能/神经网络/one-hot编码/
作者
Asuwee
发布于
2022-07-05
许可协议
CC BY-NC-SA 4.0