python - 一种使用 numpy 的热编码

标签 python numpy one-hot-encoding

如果输入为零,我想创建一个如下所示的数组:

[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)

但它不起作用。

有什么方法可以在一行中实现吗?

最佳答案

通常,当您想要在机器学习中获得用于分类的 one-hot 编码时,您有一个索引数组。

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)

关于python - 一种使用 numpy 的热编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38592324/

相关文章:

python - 使用 Python 自动转换 '<' 和 '>'

python - BeautifulSoup Replace_with 用于非标准标签

Python unittest 在单个套接字的 tcp 服务器上进行多个测试

python - 我可以在 __init__.py 文件中编写方法/函数吗?

python - 如何使用 pandas 中的正则表达式来屏蔽具有某些 nan 值的列?

Python:如何在不扩展矩阵的情况下增加矩阵的维度?

python - 将数据帧酸洗到磁盘时出现内存错误

machine-learning - 为什么基于树的模型不需要对名义数据进行one-hot编码?

Matlab onehot 转整数

dataframe - Julia DataFrames-如何进行一键编码?