在数据预处理过程中,可能会遇到一些特征列中的样本并不是连续存在的,而是以分类形式存在的。对于这样的特征,通常需要对其进行特征数字化,可采用的方法是独热编码(One-Hot Encoding)。

什么是独热编码

独热编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由它独立的寄存器位,并且在任意时候只有一位有效是1,其他都是0。

下面三个特征属性:

  • 性别:[“male”,”female”]
  • 地区:[“Europe”,”US”,”Asia”]
  • 浏览器:[“Firefox”,”Chrome”,”Safari”,”Internet Explorer”]

对于某一个样本[“male”, “Aisa”, “Chrome”], 需要将这个以分类形式存在的特征变量数字化,经过独热编码后:

  • 性别特征:有2个可能值,N=2,male:10;female:01
  • 地区特征:有3个可能值,N=3,Europe:100;US:010;Aisa:001
  • 浏览器特征:有4个可能值,N=4,Firefox:1000;Chrome:0100;Safari:0010;Internet Explorer:0001

样本[“male”, “Aisa”, “Chrome”]完整的特征数字化的结果为:[1,0,0,0,1,0,1,0,0],其中1,0代表male;0,0,1代表Aisa;0100代表Chrome

为什么使用独热编码来处理离散型特征?

对于地区特征:[“Europe”,”US”,”Asia”]。

  • 不使用独热编码,那么令 Europe=1,US=2,Asia=3实现给不同类别标签编码,机器可能学习到的是“Europe<US<Asia”,但是我们只是让机器区分他们的类别,并不是比较大小的。这三者之间的距离是(Europe,US)=1,(US,Asia)=1,(Europe,Asia)=2,这样表示计算出来的特征的距离不合理。

  • 使用独热编码,那么Europe=1,0,0;US=0,1,0;Asia=0,0,1。这样任意两者之间的距离都是$\sqrt2$,在向量空间距离都相等,所以这样不会出现偏序性,基本不会影响基于向量空间度量算法的效果,更合理。

网上这部分内容很多都涉及到了欧式空间,我对欧式空间是什么还不知道,所以就没有复制粘贴了,给出两个相关连接,以后了解了再回头看看:

https://www.biaodianfu.com/one-hot-encoding.html

https://zhuanlan.zhihu.com/p/35287916

独热编码的缺点

当类别的数量很多时,特征空间会变得非常大。在这种情况下,一般可以用PCA(主成分分析)来减少维度。而且One-Hot Encoding+PCA这种组合在实际中也非常有用。