标签编码,标签的one_hot编码

时间:2018-10-18 08:49:37

标签: python keras

我的用例是关于机器学习在物理层无线通信中的应用。 我的输入要素具有复杂的价值,我将其转换为等效的实际价值要素,如下所示。

 Y = np.concatenate((np.real(S_bar), np.imag(S_bar)))
Y = array([[-1.,  1.,  3.,  1., -3.,  1., -3., -3.,  1., -1.],
     [-1.,  3.,  3., -1.,  1.,  3., -3.,  1., -1.,  3.],
     [ 1., -1.,  3.,  3.,  3., -3., -1., -1., -1., -1.],
     [ 3.,  1., -3.,  3., -3.,  1.,  1.,  3.,  3., -1.]])
Y是一个4 x 10的训练矩阵,其中4行是特征,而10列是样本或训练示例。 我想将其表示为10 x 4的one_hot编码训练标签,以使其适合于keras环境,如下所示:

      model.fit(X_train, Y_labels, epochs=5, batch_size=100) 

我以以下方式尝试了它,但是它不起作用。

i。标签编码:

     le = preprocessing.LabelEncoder()
     y = []
for i in range(0,Y.shape[0]):
    le.fit(Y[i,:])
   temp = le.transform(Y[i,:]) 
   y.append(temp)
y = np.array(y)

Y被标记为:

 array([[1, 2, 3, 2, 0, 2, 0, 0, 2, 1],
   [1, 3, 3, 1, 2, 3, 0, 2, 1, 3],
   [2, 1, 3, 3, 3, 0, 1, 1, 1, 1],
   [3, 2, 0, 3, 0, 2, 2, 3, 3, 1]], dtype=int64) 

ii。 one_hot编码:

encoder=OneHotEncoder(sparse=False)
encoder.fit(y.T)
labels = encoder.transform( y.T) 

*我的问题是,当模型预期为(10,4)时,“标签”的形状为(10,16)。请问如何将one_hot编码器的大小调整为Y_train和Y_test的真实形状?还是有其他比上述示例更好的方法呢?我对此表示感谢。

1 个答案:

答案 0 :(得分:0)

我会用keras.utils.to_categorical来获得您想要的东西:

from keras.utils import to_categorical
labels = to_categorical(y[0])
# labels.shape == (10, 4)

基本上可以一键编码为您的目标标签。