one hot 独热码

2022-07-02 22:03:52 浏览数 (2)

独热/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))

...

0 人点赞