One-Hot 编码主要采用N位寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候只有一位有效。
One-Hot 编码器对类别进行了二进制操作,易于机器学习算法利用。
# n_classes = 5, 每个数字为一类
# 1为第 1类, 2为第 2类...
array = [2, 3, 1, 5]
one_hot = [[0, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
[1, 0, 0, 0, 0],
[0, 0, 0, 0, 1]]
在 https://blog.csdn.net/weixin_43143670/article/details/104791946 这篇博客中,我学到了一种将图像每个像素的 label 转化为 onehot 的方法。
import numpy as np
def onehot(data, n_classes):
buf = np.zeros(data.shape + (n_classes, ))
# buf.shape: (h, w, n_classes)
nmsk = np.arange(buf.size) * n_classes + buf.ravel()
# nmsk[0]=0~(n-1), nmsk[1]=(n-1)~(2n-1)...
buf.ravel()[nmsk] = 1
return buf