我有一个如下所示的numpy数组:
array([[0],[1],[1]])
我想将其表示为独热编码的等价形式:
array([[1,0],[0,1],[0,1]])
有人有任何想法吗?我尝试使用sklearn.preprocessing.LabelBinarizer,但这只是重现了输入。
谢谢。
编辑
应要求,这里是使用LabelBinarizer的代码
from sklearn.preprocessing import LabelBinarizertrain_y = np.array([[0],[1],[1]])lb = LabelBinarizer()lb.fit(train_y)label_vecs = lb.transform(train_y)
输出:
array([[0],[1],[1]])
请注意,文档中确实说明了“二进制目标转换为列向量”
回答:
要使用sklearn
,我们似乎可以使用OneHotEncoder
,如下所示 –
from sklearn.preprocessing import OneHotEncodertrain_y = np.array([[0],[1],[1]]) # 输入enc = OneHotEncoder()enc.fit(train_y)out = enc.transform(train_y).toarray()
样本输入和输出 –
In [314]: train_yOut[314]: array([[0], [1], [1]])In [315]: outOut[315]: array([[ 1., 0.], [ 0., 1.], [ 0., 1.]])In [320]: train_yOut[320]: array([[9], [4], [1], [6], [2]])In [321]: outOut[321]: array([[ 0., 0., 0., 0., 1.], [ 0., 0., 1., 0., 0.], [ 1., 0., 0., 0., 0.], [ 0., 0., 0., 1., 0.], [ 0., 1., 0., 0., 0.]])
另一种使用初始化
的方法 –
def initialization_based(A): # A是输入数组 a = np.unique(A, return_inverse=1)[1] out = np.zeros((a.shape[0],a.max()+1),dtype=int) out[np.arange(out.shape[0]), a.ravel()] = 1 return out
另一种使用广播
的方法 –
def broadcasting_based(A): # A是输入数组 a = np.unique(A, return_inverse=1)[1] return (a.ravel()[:,None] == np.arange(a.max()+1)).astype(int)