刚开始学习深度学习的时候,会遇到“独热编码”这个概念。英文名:one-hot encoding。
在网上查了好多资料,写的比较模糊,或者难以理解。下面,我将尽可能的对one-hot encoding做个通俗的解释。
从以下三个方面来说。
1.什么是one-hot encoding
2.为什么要用one-hot encoding
3.基于Keras的one-hot encoding案例
1.什么是one-hot encoding
就是将分类数据,转换成二进制向量表示,以便用于机器学习算法的处理。
什么是分类数据?
答:比如宠物有猫/狗/虎。那么,猫/狗/虎就是宠物这一类别的具体分类数据。需要将其转换为二进制向量表示。
什么是二进制向量?
答:假设宠物有三种。
猫 狗 虎
1 0 0
0 1 0
0 0 1
100表示猫,100就是猫的二进制向量
010表示狗,010就是狗的二进制向量
2.为什么要用one-hot encoding
算法无法直接处理分类的数据。
3.基于Keras的one-hot encoding案例
from numpy import array
from numpy import argmax
from keras.utils import to_categorical
data = [1,3,2,0,3,2,2,1,0,1]
data = array(data)
print(data)
[1 3 2 0 3 2 2 1 0 1]
#one-hot encoding
encoded = to_categorical(data)
#这里就将上面的数字用二进制向量表示出来
print(encoded)
[[0. 1. 0. 0.]
[0. 0. 0. 1.]
[0. 0. 1. 0.]
[1. 0. 0. 0.]
[0. 0. 0. 1.]
[0. 0. 1. 0.]
[0. 0. 1. 0.]
[0. 1. 0. 0.]
[1. 0. 0. 0.]
[0. 1. 0. 0.]]
#invert encoding 反转编码,得到二进制向量的整数值
inverted = argmax(encoded[0])
print(inverted)
1
附:
以下这两篇文章解释的更为通透,这是我见过全网解释最为通透的文章
https://machinelearningmastery.com/how-to-one-hot-encode-sequence-data-in-python/
https://machinelearningmastery.com/why-one-hot-encode-data-in-machine-learning/