我正在使用to_categorical
中的keras.utils
对列表中的数字进行一次热编码。如何从分类数据中获取数字?有没有可用的功能。
Y=to_categorical(y, num_classes=79)
答案 0 :(得分:0)
您只需通过np.argmax()
即可做到:
import numpy as np
y = [0, 1, 2, 0, 4, 5]
Y = to_categorical(y, num_classes=len(y))
print(Y)
y = np.argmax(Y, axis=-1)
print(y)
# [0, 1, 2, 0, 4, 5]
为什么使用argmax(axis=-1)
?
在上面的示例中,to_categorical
返回形状为(6,6)的矩阵。设置axis=-1
意味着在每一行中提取最大的索引。
[[1. 0. 0. 0. 0. 0.]
[0. 1. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 0.]
[1. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 1. 0.]
[0. 0. 0. 0. 0. 1.]]
在here上有关索引的更多信息。
如果我的数据具有多个维度,该怎么办?
没有区别。初步列表中的每个条目都将转换为大小为[1, nb_classes]
的单热点编码,其中只有一个索引为1,其余索引为零。与上面的示例类似,当您在每一行中找到最大值时,它将转换为原始列表。
y = [[0, 1], [2, 0], [4, 5]]
Y = keras.utils.to_categorical(y, num_classes=6)
#[[[1. 0. 0. 0. 0. 0.]
# [0. 1. 0. 0. 0. 0.]]
#
# [[0. 0. 1. 0. 0. 0.]
# [1. 0. 0. 0. 0. 0.]]
#
# [[0. 0. 0. 0. 1. 0.]
# [0. 0. 0. 0. 0. 1.]]]
y = np.argmax(Y, axis=-1)
#[[0 1]
# [2 0]
# [4 5]]