2017-04-20 31 views
1

二进制值我有一个numpy的阵列,其看起来如下:一个热编码在numpy的

array([[0],[1],[1]]) 

我希望它被表示为一个热编码当量:

array([[1,0],[0,1],[0,1]]) 

任何机构有任何想法?我尝试使用sklearn.preprocessing.LabelBinarizer,但这只是重新生成输入。

谢谢。

编辑

按照要求,这里是使用LabelBinarizer

代码
from sklearn.preprocessing import LabelBinarizer 

train_y = np.array([[0],[1],[1]]) 
lb = LabelBinarizer() 
lb.fit(train_y) 
label_vecs = lb.transform(train_y) 

输出:

array([[0],[1],[1]]) 

请注意,它在documentation“二进制目标状态转变为列向量'

+0

你如何使用LabelBinarizer。它应该是正确的。发布你的代码和当前输出(你说它只是重新生成输入) –

+0

按要求更新 – user1753640

+0

好的。对于指定的输出('array([[1,0],[0,1],[0,1]])'),您可以使用MultiLabelBinarizer。请在我的其他答案中查看它的用法 - http://stackoverflow.com/a/42392689/3374996。但是 –

回答

3

要使用sklearn,似乎我们可以使用OneHotEncoder,像这样 -

from sklearn.preprocessing import OneHotEncoder 

train_y = np.array([[0],[1],[1]]) # Input 

enc = OneHotEncoder() 
enc.fit(train_y) 
out = enc.transform(train_y).toarray() 

样品输入,输出 -

In [314]: train_y 
Out[314]: 
array([[0], 
     [1], 
     [1]]) 

In [315]: out 
Out[315]: 
array([[ 1., 0.], 
     [ 0., 1.], 
     [ 0., 1.]]) 

In [320]: train_y 
Out[320]: 
array([[9], 
     [4], 
     [1], 
     [6], 
     [2]]) 

In [321]: out 
Out[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.]]) 

initialization另一种方法 -

def initialization_based(A): # A is Input array 
    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 

另有broadcasting -

def broadcasting_based(A): # A is Input array 
    a = np.unique(A, return_inverse=1)[1] 
    return (a.ravel()[:,None] == np.arange(a.max()+1)).astype(int)