- one hot 编码,针对的是类别性属性(categorical),类别型属性可以为特征向量中的任一属性,比如性别(one hot 编码的意义在于,属性之间不具有数值上大小的区别,在对最后结果的影响上一视同仁),也可以是分类问题的输出目标值;
对 mnist(手写字符识别)数据集进行手写数字分类,属于多分类问题,手写数字 0-9,共 10 类,从 mnist.pkl.gz 文件中解析得到的字符图像(28*28)的标签(label,或者目标值),只有 1 维,进行 one hot 编码可将其编码为 10 维,数字 0,编码为 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
。
def one_hot(y):
u = np.unique(y)
coords = dict()
for i, x in enumate(u):
coords[str(x)] = i
# 建立 value 和 key 之间的反向映射,
# 字典键值对(key-value pairs)的数目,就是 y 中不重复元素的数目
y_one_hot = np.zeros((len(y), len(u)))
for i, label in enumerate(y):
y_one_hot[i, coords[str(label)]] = 1
return y_one_hot