独热/one-hot在数位电路和机器学习中被用来表示一种特殊的位元组或向量,
直观来说就是有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制。
该字节或向量里仅容许其中一位为1,其他位都必须为0。
其被称为独热因为其中只能有一个1,若情况相反,只有一个0,其余为1,则称为独冷(one-cold)。
在统计学中,虚拟变数代表了类似的概念。
通常,在通信网络协议栈中,使用八位或者十六位状态的独热码,且系统占用其中一个状态码,余下的可以供用户使用。
代码语言:python代码运行次数:0复制import numpy as np
wide = 10
test = np.random.randint(wide,size=5)
print(test)
# raw
def one_hot(num,wide):
res = np.zeros(wide)
res[num] = 1
return res
print(np.array([one_hot(i,wide) for i in test]))
# batch
def one_hots(narr,wide):
res = np.zeros((narr.size,wide))
row = np.arange(narr.size)
res[row, narr] = 1
return res
print(one_hots(test,wide))
# multi-hot
test = np.array([[1,2,3,4,5],[7,8,9,0,1]])
print(np.array([one_hots(i,wide).sum(axis=0) for i in test]))
# tensorflow
import tensorflow as tf
print(tf.keras.utils.to_categorical(test,num_classes=(wide)))
# ...
from sklearn.preprocessing import LabelBinarizer
print(LabelBinarizer().fit(np.arange(wide)).transform(test))
# OneHotEncoder ...
# pandas
# import pandas as pd
# print(pd.get_dummies(test,wide))
...