独热码(one-hot-enconding)的理解以及编码与解码

独热码(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表示按行进行操作
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值