独热码(one-hot-enconding)的理解以及编码与解码
1.为什么要引入独热码的概念
在机器学习的领域中,常常会遇到分类,聚类等问题,如果所收集到的数据拥有大量离散型的特征和类别,则我们就需要对其进行编码。
就拿mnist手写数字识别来说,其数据的标签就有10个类别:0~9,假设采取神经网络模型进行训练和识别。
如果不采取独热码的形式,仍然以0~9作为其标签,那么就相当于最终的输出层只有一层,此时输出值的跨度就会比较大,一个微小的特征变化都会对最终的结果产生更大的影响,想个极端的例子,如果类别高达8000,这样直接以8000作为标签,它的影响必然比编码成 [0,0,…,0,1] 的形式大,这样的话与其说是分类问题更像是回归预测问题。
因此为了解决上述的问题,使训练过程中不受到因为分类值表示的问题对模型产生的负面影响,引入独热码对分类模型的特征进行独热码编码。
2.独热码的编码
如0~2的数字可分别编码成为[1,0,0],[0,1,0],[0,0,1],1所在向量中的位置就是其对应的类别。one-hot的理解就是众多0中的一个1,那个1就是hot.
在python语言中的深度学习库keras中可以直接实现独热码。
keras.utils.to_categorical(data,num_class)
#num_class 就是对应的类别数
3.独热码的解码
在大多数深度学习框架的神经网络库中,已经做好了解码的工作,比如在对模型进行评估验证时,它肯定对预测出来的数做了解码的工作,不需要我们再去进行解码。
但如果你自己想要查看你最终所预测出来的类别结果,那么可以直接通过numpy的argmax函数进行查看。
class = model.predict(test_data)
class = np.argmax(class,axis=1)
#argmax 就是返回该向量中最大数所在的位置,axis=1表示按行进行操作