首页 > 解决方案 > 标签编码,one_hot 编码到标签

问题描述

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

 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) 

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

一世。标签编码:

     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,16),而模型预期为 (10,4)。请问如何使 one_hot 编码器的大小适合 Y_train 和 Y_test 的真实形状?或者有没有比这更好的方法来使用上面的示例。我真的很感激这方面的任何帮助。

标签: pythonkeras

解决方案


我会keras.utils.to_categorical用来得到你所追求的:

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

基本上 one-hot 为您编码目标标签。


推荐阅读