一种使用numpy的热编码
如果输入为零,我想制作一个看起来像这样的数组:
[1,0,0,0,0,0,0,0,0,0]
如果输入为5:
[0,0,0,0,0,1,0,0,0,0]
对于以上内容,我写道:
np.put(np.zeros(10),5,1)
但它没有用。
有什么方法可以在一线实现?
-
通常,当您想在机器学习中使用单编码进行分类时,就会有一组索引。
import numpy as np nb_classes = 6 targets = np.array([[2, 3, 4, 0]]).reshape(-1) one_hot_targets = np.eye(nb_classes)[targets]
在
one_hot_targets
现在array([[[ 0., 0., 1., 0., 0., 0.], [ 0., 0., 0., 1., 0., 0.], [ 0., 0., 0., 0., 1., 0.], [ 1., 0., 0., 0., 0., 0.]]])
使用
.reshape(-1)
可以确保您使用正确的标签格式(也可能使用[[2], [3], [4], [0]]
)。该-1
值是一个特殊值,表示“将所有剩余的物料放入此维”。因为只有一个,所以它使阵列变平。复制粘贴解决方案
def get_one_hot(targets, nb_classes): res = np.eye(nb_classes)[np.array(targets).reshape(-1)] return res.reshape(list(targets.shape)+[nb_classes])
包
您可以使用mpu.ml.indices2one_hot。经过测试且易于使用:
import mpu.ml one_hot = mpu.ml.indices2one_hot([1, 3, 0], nb_classes=5)