首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个字符串的热编码列表

一个字符串的热编码列表
EN

Stack Overflow用户
提问于 2020-04-28 09:32:54
回答 2查看 2.5K关注 0票数 2

我有一个字符串列表作为我的分类问题的标签(用卷积神经网络进行图像识别)。这些标签由5-8个字符组成(数字从0到9,字母从A到Z).为了训练我的神经网络,我想对标签进行一次热编码。我编写了一个代码来对一个标签进行编码,但在试图将代码应用到列表时,我仍然遇到了困难。

下面是我为一个标签编写的代码,它工作得很好:

代码语言:javascript
复制
from numpy import argmax
# define input string
data = '7C24698'
print(data)
# define universe of possible input values
characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ '
# define a mapping of chars to integers
char_to_int = dict((c, i) for i, c in enumerate(characters))
int_to_char = dict((i, c) for i, c in enumerate(characters))
# 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:
    character = [0 for _ in range(len(characters))]
    character[value] = 1
    onehot_encoded.append(character)
print(onehot_encoded)
# invert encoding
inverted = int_to_char[argmax(onehot_encoded[0])]
print(inverted)

现在,我希望获得标签列表的相同输出,并将输出存储在一个新列表中:

代码语言:javascript
复制
list_of_labels = ['7C24698', 'NDK745']
encoded_labels = []

我该怎么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-28 09:40:44

您可以使用您的工作代码创建一个函数,然后使用内置函数map为您的lists_of_labels中的每个元素申请您的一次热编码函数:

代码语言:javascript
复制
from numpy import argmax
# define input string

def my_onehot_encoded(data):
    # define universe of possible input values
    characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ '
    # define a mapping of chars to integers
    char_to_int = dict((c, i) for i, c in enumerate(characters))
    int_to_char = dict((i, c) for i, c in enumerate(characters))
    # integer encode input data
    integer_encoded = [char_to_int[char] for char in data]
    # one hot encode
    onehot_encoded = list()
    for value in integer_encoded:
        character = [0 for _ in range(len(characters))]
        character[value] = 1
        onehot_encoded.append(character)

    return onehot_encoded


list_of_labels = ['7C24698', 'NDK745']
encoded_labels = list(map(my_onehot_encoded, list_of_labels))
票数 1
EN

Stack Overflow用户

发布于 2020-04-28 09:51:24

您可以使用LabelBinarizer来自scikit-学习

代码语言:javascript
复制
from sklearn.preprocessing import LabelBinarizer

>>> labels = ["first", "second", "third"]
>>> lb = LabelBinarizer()
>>> lb.fit(labels)
>>> lb.transform(labels)
array([[1, 0, 0],
       [0, 1, 0],
       [0, 0, 1]])

并将单一热编码标签转换回string值:

代码语言:javascript
复制
>>> encoded_labels = [
  [1, 0, 0],
  [0, 1, 0],
  [0, 0, 1]
]
>>> lb.inverse_transform(encoded_labels)
array(['first', 'second', 'third'])
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61476990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档