前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >详解深度学习中的独热编码

详解深度学习中的独热编码

作者头像
OpenCV学堂
发布2018-07-26 10:54:02
1.4K0
发布2018-07-26 10:54:02
举报

很多人开始接触深度学习,数据处理遇到第一个专业英文术语就是one-hot encode(独热编码),很多初学者就会迷茫,这个东西是什么意思,其实说的直白点所谓的独热编码最重要的就是把一组字符串或者数字转为一组向量而且这组向量中只能有一个向量值是1。可见独热编码还是很形象的说1这个单独大热门,做个形象的比喻,2018足球世界杯的冠军只能有一个,如果对32支球队做个独热编码则会得到32个向量,其中只能有一支球队对应的向量是1,表示这届的冠军就是它啦,其它都只能是零,得回家。对以往各届参赛球队做独热编码就可以得到每届结果,然后根据以往各支球队综合表现生成一系列的向量,就可以训练生成模型,根据本届各队综合表现参数,就可以预测本届冠军啦,这里独热编码生成的向量可以作为标签,这个也是独热编码最常用的方式与场景。在tensorflow的官方mnist数据集例子中也是采用独热编码来做标签数据,训练实现手写数字识别的。说了这么多独热编码的解释与概念,下面就来看看独热编码详细解释,只需四步,保证你理解独热编码,而且会做啦。

独热编码的定义

根据同一类别的数据生成一组二值向量, 类别数据中期待的对应二值向量为1,其余为零。

举例说明

假设我们要预测鸢尾花种类,已知有三种分别为山鸢尾、变色鸢尾、维吉尼亚鸢尾。根据给定的一组鸢尾花的数据,我们可以预测其种类是哪一种,对训练数据编码:

山鸢尾

变色鸢尾

维吉尼亚鸢尾

1

0

0

最终向量为1 0 0 表示种类是山鸢尾

山鸢尾

变色鸢尾

维吉尼亚鸢尾

0

1

0

最终向量为0 1 0 表示种类是变色鸢尾

山鸢尾

变色鸢尾

维吉尼亚鸢尾

0

0

1

最终向量为0 0 1 表示种类是维吉尼亚鸢尾

为什么要使用独热编码,原因如下

独热编码可以很好的表示分类数据的,而许多机器学习与深度学习的任务就是实现各种回归模型分类任务,而且独热编码非常容易实现,无需复杂计算,只有整数0、1的二进制表达容易被技术与工程人员理解与接受。

独热编码的代码演示

  • 手动版
代码语言:javascript
复制
from numpy import argmax
# define input string
data = 'hello world'
print(data)
# define universe of possible input values
alphabet = 'abcdefghijklmnopqrstuvwxyz '
# define a mapping of chars to integers
char_to_int = dict((c, i) for i, c in enumerate(alphabet))
int_to_char = dict((i, c) for i, c in enumerate(alphabet))
# integer encode input data
integer_encoded = [char_to_int[char] for char in data]
print(integer_encoded)
# one hot encode
onehot_encoded = list()
for value in integer_encoded:
    letter = [0 for _ in range(len(alphabet))]
    letter[value] = 1
    onehot_encoded.append(letter)
print(onehot_encoded)
# invert encoding
inverted = int_to_char[argmax(onehot_encoded[0])]
print(inverted)
  • keras版本
代码语言:javascript
复制
from numpy import array
from numpy import argmax
from keras.utils import to_categorical
# define example
data = [1, 3, 2, 0, 3, 2, 2, 1, 0, 1]
data = array(data)
print(data)
# one hot encode
encoded = to_categorical(data)
print(encoded)
# invert encoding
inverted = argmax(encoded[0])
print(inverted)

参考引用

https://machinelearningmastery.com/how-to-one-hot-encode-sequence-data-in-python/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 独热编码的定义
  • 举例说明
  • 为什么要使用独热编码,原因如下
  • 独热编码的代码演示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档